Java学习笔记五:基础知识——构造方法/封装/this关键字/static关键字

一、构造方法

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;
		}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值