访问修饰符
类和类成员的访问控制
访问修饰符有3个(4种)。public、protected、package-access(包访问修饰符)、private
public访问修饰符
被该修饰符修饰的成员变量和成员方法可以在所有类中访问。
protected访问修饰符
被该修饰符修饰的成员变量和成员方法可以在声明它的类中访问,在该类的子类中访问,也可以在与该类位于同一个包中的类访问,但不能再位于其他包的非子类中访问。
package-access(包访问修饰符)
缺省指不使用权限修饰符。不使用权限修饰符修饰的成员变量和成员方法可以在声明它的类中访问,也可以在该类位于同一个包中的类访问,但不能位于其他包的类(包括子类)中访问。
private访问修饰符
被该修饰符修饰的成员变量和成员方法只能在声明他们的类中访问,而不能再其它类(包括子类)中访问。
1、类的访问修饰符
| 同一包中 | 不同包中 | |
|---|---|---|
public | 可以使用 | 可以使用 |
package-access(包访问修饰符) | 可以使用 | 不可以使用 |
2、类成员的访问修饰符
| 位置 | public | protected | 包访问修饰符 | private |
|---|---|---|---|---|
| 同类访问 | true | true | true | true |
| 同包其他类访问 | true | true | true | false |
| 同包子类访问 | true | true | true | false |
| 不同包子类访问 | true | true | false | false |
| 不同包非子类访问 | true | false | false | false |
static关键字
static修饰属性
使用static修饰的属性称为静态属性或类变量,没有使用static修饰的属性称为实例变量。使用static修饰的属性属于类,不属于具体的某个对象。类属性在类的首次加载时初始化。
static修饰方法
类方法不依赖与任何对象,用类名直接加“.”调用,对象名也可以调用。使用static修饰的方法属于类,不属于具体的某个对象。
1、静态方法不能直接访问实例变量和实例方法。
2、在实例方法中够可以直接调用类中定义的静态变量和静态方法。
静态初始化
Java中的静态初始化是一种在类被加载时执行的初始化方式,用于初始化类的静态变量和执行一些静态代码块。
语法:
static{
//静态初始化代码块
}
静态初始化代码块在类被加载时只执行一次,且只能访问类的静态变量和方法。
静态初始化的执行顺序是按照代码块在类中出现的顺序依次执行的。
静态初始化可以用来完成一些静态资源的初始化。
也可以用来执行一些需要再类加载时执行的操作。
静态成员与实例成员的区别
- 静态成员是类的成员,实例成员是对象的成员。静态成员是在类加载时初始化,只有一个副本,可以被类的所有成员共享;实例成员是在对象创建时初始化,每个对象都有自己的一份。
- 静态成员可以直接通过类名访问,不需要创建对象;实例成员需要通过对象来访问。
- 静态成员不能直接访问实例成员,但实例成员可以访问静态成员和实例成员。这是因为在实例化对象之前, 静态成员已经被初始化,而实例成员需要通过对象来访问。
- 静态成员可以在静态初始化中初始化,实例成员需要在构造函数或实例初始化中初始化。建泰成员适合存储类级别的信息;实例成员适合存在对象级别的信息。