1.封装的基本知识
1.1 什么是封装
首先上面代码定义了一个Date
类,类中有三个成员变量year
、month
、day
和一个printDate
成员方法,通过main
函数实例化了一个date1
对象,date1.
分别访问了变量和方法,输出了2024年9月7日。
但如果将成员变量year
的访问限定符public
改为private
,则date1
对象就不能访问year
成员变量,也无法给year
赋值。
编译器报错,且提示year 在 Date 中是 private
访问控制,这个行为就叫对year
成员变量的封装,意思就是隐藏date1
对象中year的属性,仅能在自己的类中使用,别的类不能直接访问。
当然,可以对类的成员变量封装,也可以对类的成员方法封装,同理将对方法的访问限定符改为private
即可。
那么要是想在别的类中访问year
成员变量,就可以在Date
类中设置一个对外公开访问的接口,来实现对象的交互,进而访问year
。
我们在Date
类中设置了setYear
和getYear
两个方法,用来设置year
的值和获取year
,这样在右边Test
类中就可以访问setYear
进行赋值,用getYear
方法获取year
的值,这样就能继续打印出2024年9月7日。
1.2 为什么要封装
封装就是为了将内部的实现细节隐藏起来,不对外公开,在自己的类当中访问,仅提供对外公开的接口进行交互,以提高代码的安全性。
2. static
2.1 static有什么用
上面代码可以看出,定义学生类,实例化了三个学生对象,但是当他们上课的教室在一起时,给三个学生的教室分别赋值,显得有些冗杂和繁琐。在java中,static
关键字,可以修饰类的成员变量,将这个成员变量变为所有对象共享。
2.2 ststic修饰成员变量和方法
被static
修饰的变量,称为静态成员或类成员,它不属于某个具体的对象,而是被所有对象共享。它可以使用类名.
来访问,也可以使用对象名.
来访问,但更推荐类名访问
修饰成员方法时同理,给成员方法前加上static
。
public static String getClassRoom(){
被static
修饰的方法,称为静态成员方法,是整个类的方法,不是某个对象特有,并且不能在静态方法中访问非静成员变量。
3.代码块
3.1 代码块的分类
代码块主要分为四类:
- 普通代码块
执行不需要什么条件,可以直接执行。 - 构造/实例代码块
一般用来对实例的成员变量进行初始化。 - 静态代码块
一遍用来对静态的成员变量进行初始化。 - 同步代码块
3.2 代码块的运行顺序
从上面代码可以看出,当我们在右边Test
类中实例化对象时,代码块的调用顺序是,静态代码块→普通代码块→构造代码块→构造方法。
因此一般静态代码块会被优先执行,但是如果有多个对象,静态代码块只会执行一次。
- 只要
main
函数中有执行语句,就会加载Test
类,静态代码块就会执行。 - 实例代码块只有在创建变量时会被执行
- 如果类中什么都没有加载,则不会执行静态代码块。
如果类中有多个静态代码块,则根据书写顺序由上到下依次执行,且每个只执行一次。