1、构造器
通过关键字new来生成对象的实例,是通过构造器来实现的。
简单的说,构造器是同类名相同的特殊方法。
1.1构造器的特点
①构造器与类名相同(包括大小写)。
②一个类可以有多个构造器。
③构造器可以有0个、1个或多个参数。
④构造器没有返回值,但不用写void。
⑤构造器总是和new运算符一起被调用。
1.2构造器有两个作用:构造对象;初始化对象
构造对象:
构造一个对象时,是通过在构造器的前面加上new来实现的。
我们可以把构造的对象传递给一个方法,如:
System.out.println(new Student("TOM"));
也可以将一个方法应用于一个对象,如:
new Date().toString();
只要使用了一次new运算符就会产生一个新的对象,在内存中的分配地址是不同的。
当我们采用new运算符时,类在内存堆中产生的是一个类的实例,并将这个实例的地址保存在变量中。所以对象实例化的过程也是一个对象地址引用的过程。
由于对象变量与对象是可以分开的,我们可以显式的定义一个对象变量并将对象变量赋值为空,以明确表示现在没有对象与对象变量相关联。例如:
Date deadline=null;//构建一个新的对象变量并赋值为空。
在构建了一个指向空对象的对象变量后,可以根据需要随时将这个空的对象变量指向一个新的对象或已存在的对象。
对象变量的初始化:
对象变量作为变量的一种,在程序使用的过程中也需要被初始化。
而类似于Date类的本地变量,他们的共同属性是与本地系统有关,本地变量系统是不会被自动初始化的。
2、方法
2.1封装
封装就是把数据和行为结合在一个块中,对于对象的使用者隐藏了数据的实现过程,对象的使用者只能通过特定的方法访问类的实例字段。
任何想改变对象当前状态的动作必须通过调用对象的方法。
绝不允许方法直接访问除它自己的实例字段以外的其他的实例字段。
2.2方法的定义
在一个类中,声明方法的格式如下:
访问标识符 返回值类型 方法名(变量类型 变量名称,…)
2.3方法分析
2.4方法使用
在Java中所有方法的使用,可以采用统一的格式,即
对象实例名.方法名(参数,…)
2.5设置器和访问器
访问器get方法只是查看对象的状态,并没有改变对象的任何状态
设置器是修改对象某种状态的方法,通常以set开头
get | set | |
---|---|---|
方法声明部分 | 有返回值类型 | void,即不返回类型 |
方法声明有无参数 | 无参数 | 至少有一个参数 |
方法体内语句 | 有返回语句 | 肯定有赋值语句 |
通常情况下设置器与访问器是同时出现的,只是对于一些受保护性字段,或者不想让使用者操纵的字段,只有访问器而没有设置器。
2.6封装的意义
在Java代码中使用访问器及设置器的意义就是实现数据的封装。
对于这种访问控制数据的方式,就实现了数据的封装,使数据的访问及修改处于可控制的范围内,并且对于一个数据的修改仅仅只能通过一种方式进行操作,这种唯一性就是封装的意义。
如果要实现一个对实例字段的访问与设置,一般情况下应该有三项内容:一个私有的数据字段、一个公开的字段访问器和一个公开的字段设置器。
这样做虽然略麻烦但是可以改变方法内部的实现而不影响到类中的其他的代码。
3、使用多个源文件
一个文件中不同的类保存为不同的文件,这时在编译的过程中就有两种编译方式
(1)通过通配符来调用编译器
与通配符相匹配的所有源文件都会被编译成类文件
(2)编译主文件
这是Java内置的一种机制,只要一个主类中包括其他类,编译主类时其他的类也会被编译。
必须在同一个包内
4、访问控制符
5、静态字段与方法
- 静态字段
如果在一个类中,把一个字段声明为static,那么在这个类中只能由这么一个类字段,而每个实例都共享同一个字段。
public class StudentTest{
public static void main(String[]args){
for(i=0;i<100;i++){
Student stu=new Student("stu"+i);
.....
}
}
}
class Student{
private String name="";
...
private int number=0;
private static int nextNumber=1;
}
public int getStudentNumber(){
return number;
}
public void setStudentNumber(){
number=nextNumber;
nextNumber++;
}
对于每一个学生类的实例,有不同的学号,但是他们实际上都共有一个nextNumber,每生成一个实例,调用实例的方法setStudentNumber,将静态字段nextNumber的值赋给number,并且使number字段值增加1,下一个对象的实例就接着由当前的值在生成新的学号。
静态字段只属于类所有,因此也被称为类字段。
-
静态常量
-
静态方法
静态方法是一类特殊的方法 ,它并不操纵具体的对象,它同静态字段类似,是属于类的方法。
因为静态方法不操纵具体的对象,所以在一个静态方法中不能访问类的实例字段,但是可以访问一个自己类中的静态字段。
静态方法是一个逻辑相对比较封闭的方法,我们通常会在以下两种情况下使用静态方法:
①当一个方法不需要访问对象的状态时。
②一个方法只需要访问类中的静态方法时 -
工厂方法
首先工厂方法就是生产对象的地方,也就是生产类的实例的地方。
其次他还是一个方法,这个方法的目的就是生产对象。 -
main方法
当程序开始执行时,还不存在任何对象。静态方法main执行后,开始创建所需要的对象。
每一个类都可以有一个main方法。这是对类进行单元测试的一个很方便的技巧。
main方法又被称为测试方法,可以在每一个类中都有一个main方法,以实现对不同功能类的测试,在多个类组合在一起的时候也应该有一个综合性的测试方法。
6、final实例字段
对于final字段,在对象被构造时,这种字段必须被初始化。也就是说,必须保证在每一个构造器结束之前,该类型字段已经被设定。一旦被设定值,以后将不能再改变。