一.概述
1.构造方法的作用和定义
new对象的同时给成员变量赋值,给对象属性初始化
修饰符 构造方法名(参数列表){
}
2.构造方法的特点
没有返回值类型,void在此处也会省略,不需要返回值,方法随着对象构建结束而消失
构造方法名和类名保持一致
在创建对象时自动调用,只执行一次
3.注意
每一个类都需要有构造方法,系统可以给出默认构造方法以便备用
编译时自动检查是否有构造方法,没有就会使用默认构造方法
构造方法也可以重载
创建对象时,调用与参数列表对应的构造方法
二.构造方法的重载
一个类中可以有多个构造方法,以重载形式存在
可以根据不同的需求,灵活的初始化对象的成员变量
构造方法可以使用private修饰,其他类无法创建该类的对象
class Person{
private int age;
private String name;
private Person(){
}
Person(int a){
age=a;
}
Person(int a,String nm){
age=a;
name=nm;
}
}
三.类的初始化过程
Student s=new Student();
1.加载Student.class文件进入内存
2.在栈内存为s开辟空间
3.在堆内存为学生对象开辟空间
4.对学生对象的成员变量进行默认初始化
5.对学生对象的成员变量进行显示初始化
6.通过构造方法对学生对象的成员变量赋值
7.学生对象初始化完成,把对象地址赋值给s变量
四.this关键字
1.this 关键字:本类对象的引用
this在方法中使用,哪个对象调用了该方法,this就代表调用该方法的对象引用
创建对象时,this就存在
this用来区别同名的成员变量和局部变量
2.成员变量隐藏
在局部变量作用域中,如果定义了一个和成员变量同名的局部变量,此时在局部变量作用域中就无法用变量名访问成员变量
this表示特指成员变量
调用其他构造方法的语句必须定义在构造方法的第一行,原因是初始化最先执行
五.子父类中的构造方法
1.调用
在创建子类对象时,父类构造方法会先执行,因为子类所有构造方法的第一行有默认的隐式super()语句,用来访问父类的无参构造方法,进行父类成员的初始化操作
this()是调用本类的构造方法,super()是调用父类的构造方法,且两条语句不能同时出现
子类的所有构造方法必须直接或间接调用父类构造方法,不写默认super()无参构造方法
2.当父类中没有无参构造方法时
1.通过super(参数)访问父类有参构造方法
2.通过this(参数)访问本类中其他构造方法
3.为什么子类对象创建都要访问父类的构造方法
子类继承父类的内容,子类功能的实现常常依赖父类,所以在初始化时需要先初始化父类
4.创建子类对象的细节
如果使用this()调用本类其他构造方法,那么super()就不存在
父类构造方法中也含有隐式的super(),任何构造方法第一行默认都是super()
六.super关键字
指的是父类的存储空间(父类的引用)
super.成员变量
super(参数)
super.成员方法()
关键字super可以在任何的非静态方法中使用
七.static关键字
1.static特点
被static修饰的成员变量属于类,不属于这个类的某个对象,优先于对象存在,被类的所有对象共享
多个对象在访问或修改static修饰的成员变量时,其中一个对象将static成员变量值进行了修改,其他对象中的static成员变量值会跟着改变,即多个对象共享一个static成员变量
被static修饰的成员可以通过类名直接访问
访问静态成员的格式:
1.类名.静态成员变量名
2.类名.静态成员方法名(参数)
2.static注意事项
静态内容是优先对象存在的,静态修饰的内容存于内存的静态区
main方法为静态方法,仅为程序入口,它不属于任何一个对象,可以定义在任意类中
静态上下文中,不能引用非静态的成员变量或成员方法
静态方法中无法访问普通成员,静态成员方法中不能调用非静态的成员方法
在静态上下文中,无法使用this或super关键字,因为this或super指代的是对象
3.静态变量和成员变量的区别
静态变量属于类,也称为类变量;成员变量属于对象,也称为实例变量
静态变量存于方法区的静态区;成员变量存于堆内存
静态变量随类的加载消失而存亡;成员变量随对象的创建消失而存亡
静态变量可以通过类名或对象调用,成员变量只能通过对象名调用
4.定义静态常量
public static final 修饰的变量来完成定义,变量名大写,多个单词是用下划线连接
使用类中的静态成员时,不需要创建对象,直接使用类名访问即可
接口中每个成员变量都默认是静态,用public static final修饰
所有接口中的成员变量已是静态常量,由于接口没有构造方法,所以必须显示赋值,可以直接用接口名访问。
八.final关键字
1.概述
继承提高了代码的复用性,但是有些类在描述完之后不想被继承或类中的部分方法功能是固定的,不想让子类重写。当子类继承了这些特殊类之后,就可以对其中的方法进行重写。
final可以用来修饰类,类的成员,以及局部变量
2.特点
final修饰类不可以被继承,但是可以继承其他类
final修饰的方法不可以被覆盖,但父类中没有final方法,子类覆盖后可以加上final
final修饰的变量为常量,这些变量只能被赋值一次
final修饰的引用类型的变量值为对象地址值,地址值不能更改,但是地址内的对象属性值可以修改
final修饰成员变量,需要在创建对象前赋值,且不能改变
3.自定义常量的初始化
通过构造方法来进行初始化,要保证,每一个构造方法中都必须有初始化自定义变量的初始化语句