一些关于Java课程学习下来的心得

        本学期是大三下学期,学校开设了Java课程,对于学习过C语言,Python两种语言的我,对于Java的总结基本可以浓缩成:比C语言丰富,但是比Python格式要求高,但是多种语言容易混淆,这次总结作业我将大体按照书本,结合上课习题进行分别总结,课本上基本安装内容之类的环境搭建以及程序设计基础部就不多加赘述,主要总结Java面对对象的一些学习的心得。

        本学期Java课程的学习到今天为止主要分为:基本数据类型,分支,循环,数组与方法,面对对象编程,前四个板块可以总结为:Java程序设计的基础,应是为第一次学习语言就接触Java的初学者介绍的,这一部分基本与C语言相同,较为不同的就是Java对于格式的要求较为严格,更为繁琐与复杂,规定的格式较为C语言会更加的多,但这也保证了其稳定性。该部分对于学习过其他语言的学生来说难度并不是很大,但是加以学习也可以深刻认识到Java的基本框架基础结构,为接下来Java核心内容的学习进行一个良好的铺垫。第五个内容即为面对对象编程,该部分是Java课程核心内容,书本上分为了一、二、三,三个部分,主要就是阐述教学了类与对象,函数,静态变量,封装,包,访问控制修饰符,继承,成员覆盖,多态,抽象类和接口的教学。其中类、对象、函数可以被认为是面向对象编程的基本原理和基本概念;静态变量、封装、包、访问控制修饰符可以被认为是一些对面对对象概念的深入讲解以及面对对象的应用一些较为高级的概念;其余的:继承、成员覆盖、多态、抽象类和接口可以被认为是Java面对对象的高级应用。

接下来我来对本学期至今学习到的面对对象的内容进行一些简单的分块总结。

类与对象

类与对象是Java面对对象编程的一个最基本的概念。

对象(Object):可以理解为类的实例。

类(Class):可以理解为一类对象的集合包括它的行为及描述。

通俗的理解为:Class蔬菜包括了 Object白菜 Object黄瓜 Object辣椒

课程中程序教学了一个雇员类(片段):

public class Employee{
	private String sname,sex;
	int age,sid;
	Employee (int id,String name ,String Sex,int Age){
		sid=id;
		sname=name;
		sex=Sex;
		age=Age;		
	}

通过代码很好的可以理解类与对象的含义。(类Employee中包含了sid,sname,sex,age,他们的数据类型各不相同但却可以包含在同一个类里)

函数

函数在课本的排版下大致分为:成员函数,构造函数两个部分

成员函数:可以理解为用编写在类中的函数简化相同的操作,如:

.../
inf.name = "Ed";
inf.sex = "Male";
inf.age = "20";
System.out.printf("name =" + inf.name);
System.out.printf("sex = " + inf.sex);
System.out.printf("age = " + inf.sex);

可以看出同样操作的代码写了三次,若是出现纰漏很容易造成错误,此时可以使用一个成员函数进行调用,可以简化程序以及减少不必要的错误:

.../
void Display(){
    System.out.printf("name = " + name);
    System.out.printf("age = " + age);
    System.out.printf("sex = " + sex);
}
.../
    inf.name = "Ed";
    inf.age = "20";
    inf.sex = "Male";
    inf.Display();

课本中还提到了加入参数的成员函数,带返回类型的成员函数等等,大同小异,不多赘述。

构造函数:可以理解为构造一个初始化函数令对象初始化。

.../
    Employee(String name,String sex,int age){
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

类的生命周期中构造函数只被调用一次,用作初始化。一个类中可以定义多个构造函数,但是只有在没有定义构造函数时才可以被实例化,因此很多上机实验中不能将对象实例化的错误大多来源于此,对这个概念的不够了解导致的。

静态变量与静态函数

静态变量:让多个对象共有的内容共用一个空间保存

.../
Fuzhou.Province = "Fujian";
.../
Quanzhou.Provinde = "Fujian";

如此福州与泉州两个对象都有相同的省份名称,但是占用了两个空间(若是其他需要,在更改时还需要一个一个手动修改),若是使用静态变量,就可以共用一个空间,并且修改时也不需要单独修改,只需要调用:

{.../
static String Province;
}
.../
Fuzhou.Province = "Fujian";
.../
Quanzhou.Province = "Fujian";

静态函数:与普通函数用法相同,作用与静态变量相同。

.../
static void setProvince(String Province){
    City.Province = Province;
}
.../
City Quanzhou = new CityName();
Quanzhou.setProvince("Fujian");
.../

封装与包

封装:封装可以完善对象的使用,不被随意修改成莫名其妙的数据。

就如若Age变量被赋值成为-100,这不就不符合常理吗?此时进行封装,就可以保证成员可以不被随意修改成奇奇怪怪的数据。

.../
private int age;
public void setAge(int age){
    if (age < 0 || age >= 100){
        return -1;
    }
    this.age = age;          
}
.../

如此一来该成员在进行赋值的时候就会进行判断,而不会把一些奇奇怪怪的数据也赋值进去。

包:很好理解地就是将被我们分为同一类的文件放到同一个包(Package)中,方便更好的管理,同一个包里的文件可以相互访问,类似住在同一间房子里。

package china

若是要调用其他文件时,可以使用import来进行调用

.../
import china.fujian.quanzhou

继承与接口

继承:可以理解为多个对象的相同特征可以使用继承来简化描述

先定义一个Coastland类作为父类,在子类Quanzhou可以对泉州是沿海城市进行描述。 

class Coastland{
    protected String city;
    public void show(){
        System.out.println(city+"is a coastland");
    }
}
.../
class Quanzhou extends Coastland{
    public Quanzhou(String city){
        this.city = city;
    }
}
public class Main{
    public static void main(String[] argc){
        Quanzhou qz = new Quanzhou("Quanzhou");
        qz.show();
    }    
}

接口

接口:若在一个抽象类中所有的函数都是抽象的,可以将其定义为接口。

在上文代码中添加一个名为CoastArea的接口,从而来继承接口的抽象函数并进行调用。

interface CoastArea{
    protected String city
    public void show();
}
.../
class Coastland implements CoastArea{
    public void show(){
        ...
    }
}
.../

以上就是10周以来我对Java课程面对对象编程的一些拙见,若有不对之处,还请指正。


版权声明:本文为weixin_63145171原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。