static关键字
static修饰的属性称为静态属性或类变量,没有static修饰的属性称为实例变量
使用static修饰的属性属于类,不属于具体的某个对象
类属性在类首次被加载时初始化,即使没有创建对象,类属性也是存在的
static修饰的方法为类方法或静态方法,不使用static修饰的方法为实例方法,类方法不属于任何对象
静态方法中不能直接访问实例变量和实例方法
在实例方法中可以直接调用类中定义的静态变量和静态方法
实例成员变量和静态成员变量的区别:
1.静态成员属于类,所有对象共享,实例成员属于对象,对象之间私有的。
2.静态成员 通过类名.属性名 / 对象名.属性名 访问,实例成员只能通过 对象名.属性名 访问。
3.两者的初始化时机不同,静态成员在加载类模板的时候就初始化,实例成员是在创建对象(new)的时候初始化。
4.实例方法中可以使用实例成员和静态成员,静态方法中只能使用静态成员。
5.实例方法中可以调用静态方法和实例方法,静态方法中只能调用静态方法,如果要调用实例方法,需要先创建对象,使用对象调用。
6.实例方法中可以使用 this 关键字,静态方法中不能使用。
对象初始化顺序:
1.类第一次加载时,被初始化static成员
2.static代码块:类加载时只执行一次,只能访问类的静态变量和方法
3.初始化实例成员
4.实例代码块:创建对象时会执行,创建多少次对象就会执行多少次
5.构造方法
包
包的作用:
-
存放类
-
防止命名冲突
-
在更广的范围内,保护类,数据,方法
包的定义:package 包名
包的声明:
当前类所在的包
源文档的第一条非注释性语句,并且原文档只能有一个包声明语句,包名前缀通常是全部小写的ASCII字母,并且是一个顶级域名,通常使用域名的倒写,包名的后续根据不同的公司规定不同
包的导入:
当前类要使用的包
import 包名.类名
同包下的类不需要导包
使用非同包下的类需要导包或或使用全限定类名
java.lang包下的包不需要导包
访问修饰符:
类访问修饰符:public 、package-access
类成员的访问修饰符:public 、protected、 package-access、 private
位置 | public | protected | 包访问修饰符 | private |
---|---|---|---|---|
同类访问 | √ | √ | √ | √ |
同包其它类 | √ | √ | √ | × |
同包子类 | √ | √ | √ | × |
非同包子类 | √ | √ | × | × |
非同包其它类 | √ | × | × | × |
封装
优点:
-
防止外部数据直接访问类的内部数据,保护数据的安全性
-
通过限制外部访问,可以更好的控制数据的正确性和完整性
-
可以隐藏实现类的细节,不需要了解类的内部实现细节,只需要知道如何使用类提供的接口
松耦合尽量减少对象之间的关联性,以降低他们之间的复杂性和依赖性
步骤:
1.修改字段的访问权限
2.设置getter/setter字段方法
3.设置字段的存取限制
封装的意义:
1.隐藏类的内部细节
2.限制外部访问控制数据的正确性和完整性
3.修改类的内部实现,不会影响类的用户
4.提高代码的重用性
遮蔽:
在一个作用域中使用了一个和外层作用域相同的变量名,导致内部变量遮蔽了外部变量,即无法直接访问外部变量