面向过程的结构化程序设计
结构化程序的弊端:
1.缺乏对数据的封装;
2.数据和方法(对数据的操作)的分离。
什么是抽象数据类型
所谓抽象数据类型可以理解为:将不同类型的数据的集合组成一个整体用来描述一种新的事物;
什么是类
类定义了一种抽象数据类型。
类不但定义了抽象数据类型的组成(成员变量),同时还定义了可以对该类型实施的操作(方法)。
/**定义雇员类*/ public class Emp{ String name; int age; char gender; double salary; }
在此示例中,仅仅定义了Emp类型的组成,即成员变量。该类定义了4个成员变量:String类型的name用于存放名字;int类型的age用于存放年龄;char类型的gender用于存放性别;double类型的salary用于存放工资。
定义了Emp类以后,提升了代码的模块化以及代码的重用性,但程序依然存在问题
-打印信息的方法是只能针对Emp数据操作,属于Emp自身的方法,需要实现数据和方法(对该类数据的操作)的统一。
定义类的成员变量
类的定义包括“成员变量”的定义和“方法”的定义,其中“成员变量”用于描述该类型对象共同的数据结构。
Java语言中,类的成员变量的定义可以使用如下语法:
class 类名{
成员变量类型 变量名称;
... ... ...
}
对象创建后,其成员变量可以按照默认的方式初始化。
初始化对象成员变量时,其默认值的规则如下表所示:
成员变量的类型 | 默认初始值 |
数值类型(byte、shout、int、long、float、double) | 0 |
boolean型 | false |
char型 | /u0000 |
引用类型 | null |
定义类的方法
类中除了定义成员变量,还可以定义方法,用于描述对象的行为,封装对象的功能。
Java语言中,可以按照如下方式定义类中的方法:
class 类名{
修饰词 返回值类型 方法名称([参数列表]) {
方法体... ... ...
}
... ... ...
}
使用new关键字创建对象
类定义完成后,可以使用new关键字创建对象。创建对象的过程称为实例化。
new运算的语法为:
new 类名();
例如:new JFrame()可以创建一个窗体对象。
引用类型变量
为了能够对实例化的对象进行访问控制,需要使用一个特殊的变量——引用。
-引用类型变量可以存放该类对象的地址信息,通常称为“指向该类的对象”;当一个引用类型变量指向该类的对象时,就可以通过这个变量对对象实施访问。
-除8种基本类型外,用类、接口、数组等声明的变量都称为引用型变量,简称“引用”。
访问对象的成员变量、调用方法
可以通过引用访问对象的成员变量或调用方法。
Cell c = new Cell(); c.row = 2; c.col = 3; c.drop(); c.moveLeft(2); String str = c.getCellInfo();
引用类型变量的赋值
引用类型变量存储的是对象的地址信息。相同类型的引用类型变量之间也可以相互赋值。
引用类型变量之间的赋值不会创建新的对象,但有可能会使两个以上的引用指向同一个对象。
Emp e1 = new Emp(); Emp e2 = e1; //将e1的值(对象的地址信息)赋给e2,e2和e1只想相同的对象。 e1.name = "黄河大虾"; e2.name = "白发馍女"; System.out.println(e1.name);
通过引用e1和e2操作的是相同的对象
null和NullPointerException
对于引用类型变量,可以对其赋值为null。null的含义为“空”,表示还没有指向任何对象。例如:
Emp emp = null; //引用emp中的值为null,没有任何对象; emp = new Emp(); //引用emp指向了一个Emp对象;
当一个引用的值为null的时候,如果通过引用访问对象成员变量或者调用方法是不合逻辑的。此时,会产生NullPointerException.例如:
JFrame frame = null; frame.setSize(200,300);
会产生NullPointerException