一、构造方法
1、 构造的定义和作用
构造方法是类中特殊的方法,通过调用构造方法来完成对象的创建,以及对象属性的初始化操作。
1.1 当一个类没有提供任何构造方法,系统会默认提供一个无参数的构造方法。
无参数构造方法又叫缺省构造器,或默认构造方法。
1.2 当类中手动提供了构造方法,系统将不再提供无参数构造方法。
1.3 无参数构造方法和有参数构造方法都可以调用。
Student x = new Student();
Student y = new Student(123);
1.4 构造方法可以重载
在一个类中构造方法可以有多个,且所有构造方法名字相同(与类名相同)。
(重载:同一个类中,方法名相同,参数列表不同)
1.5 对于实例变量,在构造方法中没有手动给它赋值,统一都会默认赋值。默认赋系统值。
2、 构造方法的语法结构
[修饰符列表] 构造方法名 (形式参数列表){
构造方法体;
}
普通方法体的语法结构
[修饰符列表] 返回值类型 方法名(形式参数列表){
方法体;
}
注意:
第一:修饰符列表当前为public,而不是public static;
第二:构造方法名和类名必须一致;
通常在构造方法体中给属性赋值,完成属性的初始化;
第三:构造方法不需要指定返回值类型,也不能写void,void表示普通方法。
3、 构造方法使用new运算符调用
new 构造方法名(实际参数列表);
二、封装
1、 封装的定义和作用:
封装的作用有两个:
第一个作用:保证内部结构的安全。
第二个作用:屏蔽复杂,暴露简单。
在代码级别上,封装有什么用?
一个类体当中的数据,假设封装之后,对于代码的调用人员来说,不需要关心代码的复杂实现,只需要通过一个简单的入口就可以访问了。
另外,类体中安全级别较高的数据封装起来,外部人员不能随意访问,来保证数据的安全性。
2、 封装的实现:
第一步:属性私有化(使用private关键字进行修饰。)
private表示私有的,该关键字修饰的数据只能在本类中访问。
第二步:对外提供简单的操作入口。
1个属性对外提供两个set和get方法。外部程序只能通过set方法修改,
只能通过get方法读取,可以在set方法中设立关卡来保证数据的安全性。
注意:
set和get方法都是实例方法,不能带static。
不带static的方法称为实例方法,实例方法的调用必须先new对象。
set和get方法写的时候有严格的规范要求:
set方法:
public void set+属性名首字母大写(1个参数){
xxx = 1个参数;
}
get方法:
public 返回值类型 get+属性名首字母大写(无参){
return xxx;
}
四、Static关键字
1、 所有static关键字修饰的都是类相关的,类级别的;
所有static修饰的,都是采用“类名.”的方式访问,不需要new对象;
static修饰的变量:静态变量;
static修饰的方法:静态方法。
2、 变量分为:局部变量和成员变量
成员变量又分为:
实例变量
静态变量
2.1 静态变量在类加载时初始化,不需要new对象;
静态变量存储在方法区中
实例变量存储在堆内存中
局部变量存储在栈内存中
2.2 所有对象的某个属性都是一致的,为类级别特征,建议定义为静态变量,
在方法区中只保留一份,节省内存空间;
一个对象一份的定义为实例变量。
2.3 实例变量一定要通过“引用.”来访问;
静态变量一般使用“类名.”来访问,也可以通过“引用.”来访问(不建议)
2.4 静态变量不需要对象的存在,不会出现空指针异常。
假设country是类Chinese的静态变量,user1是对象
user1 = null;
String s1 = user1.country;
// 不会报错,系统会默认执行 Chinese.country
访问“实例”相关的,“空引用”必然会出现空指针异常
假设name是类Chinese的实例变量,user1是对象
user1 = null;
String s2 = user1.name;
// 报错,空指针异常
2.5 当方法体中直接访问了实例变量,这个方法一定是实例方法。
工具类中的方法一般都是静态方法。
3、 静态代码块
3.1 使用static关键字定义静态代码块;
3.2 静态代码块的语法:
static {
java语句;
java语句;
}
3.3 static静态代码块执行:
类加载时执行,且只执行一次;
在main方法执行之前执行
3.4 静态代码块按照自上而下的顺序执行。
3.5 静态代码块的作用:
不常用;
提供类加载时机;(可以记录日志)
注:java程序中有顺序要求的:
第一:对方法来说,方法体中的代码有先后顺序;
第二:静态代码块1和静态代码块2有先后顺序;
第三:静态代码块和静态变量有先后顺序,
不能在静态代码块中引用之后的静态变量。
不同的方法之间没有执行顺序,调用哪个就执行哪个。
4、 实例代码块
4.1 实例代码块语法:
{
java语句;
java语句;
java语句;
}
4.2 实例代码块在类加载时不执行,
只要构造方法执行,必然在构造方法执行之前执行实例代码块;
对象构建时机。
五、this关键字
1、 一个对象一个 this;
this 是一个变量,是一个引用;
this 保存当前对象的内存地址,指向自身;
this 指向“当前对象”,也可以说 this 代表“当前对象”;
this 存储在堆内存当中对象的内部;
2、 this 可以使用在实例方法中以及构造方法中,语法格式分别为“this.”和“this( )”;
this. 大部分情况下可以省略,默认访问当前对象;
当在实例方法或构造方法中,区分局部变量和实例变量的时候不能省略。
public void setTitle(String title) {
this.title = title; //第一个title是实例变量,第二个是局部变量
}
3、 this 不能出现在带有 static 的方法当中。
(this 代表当前对象,静态方法中不存在对象,互相矛盾)
4、 this使用在构造方法中
通过当前的构造方法去调另一个本类的构造方法:
this(实际参数列表);
对于this()的调用必须是构造器中的第一个语句。
作用:代码复用
eg.
// 无参数构造
public Date(){
this(2000,1,1);
}
// 有参数构造
public Date(int year, int month, int day){
this.year = year;
this.month = month;
this.day = day;
}