类和对象2
访问限定符
1.限定符
- 影响的是访问权限
- 两种情况:
修饰顶级(Top level)
修饰成员级(Member level)
四种访问限定符:
说法 | 定义语法 | 说明 |
---|---|---|
public | public | 所有类都有访问权限 |
package private | 空白 | 只有一个包的类有访问权限 |
protected | protected | 同类、同包、子类(不同包) |
private | private | 只有本类有访问权限 |
a包的A类定义的属性 | a包的A类方法中 | a包下的B类方法中 | b包的C类方法中 |
---|---|---|---|
public | 有 | 有 | 有 |
package private | 有 | 有 | 没有 |
private | 有 | 没有 | 没有 |
静态方法 / 静态属性
- 方法
普通方法(方法)
静态方法(类方法) - 属性
普通属性(属性)
静态属性(类属性)
语法
static关键字:
- 被static修饰的属性是静态属性
- 被static修饰的方法是静态方法
理解:
- 普通属性 /普通方法
都绑定着一个隐含着的对象(this) - static 的含义就是和对象解绑
1.静态属性不再保存在对象(堆区)中,而是保存在类(方法区)中
2.静态方法调用时,没有隐含着的对象,所以也就无法使用this关键字
访问静态属性 /调用静态方法语法
类的内部:
访问属性:
- 属性名称;
- 类名称.属性名称;
- this.属性名称; //保证当前方法不是静态方法
调用方法:
- 方法名称(实参列表);
- 类名称.方法名称(实参列表);
- this.方法名称(实参列表); //保证当前方法不是静态方法
类的外部:
访问属性:
- 类名称.属性名称
- 对象的引用,属性名称
调用方法:
- 类名称.方法名称(实参列表);
- 对象的引用.方法名称(实参列表);
强调:
在静态方法(静态上下文)中,因为没有隐式的对象和该方法绑定,所以:
- 不能访问普通属性;
- 不能调用普通方法;
- 无法使用this关键字;
- 表现出来的特性:一个类的所有的对象是可以共享静态属性的;
普通属性/静态属性的初始化规则
普通属性:发生在对象的实例化的时候
方式:
- 定义时初始化
int a=10;
- 构造代码块
{
a=10;
}
- 在构造方法中初始化
Person()
{
a=10;
}
初始化顺序:定义时和构造代码块按照定义顺序的先后优先执行,最后执行构造方法;
静态属性:发生在类被加载的时候
方式:
- 定义时初始化
static int a=10;
- 静态构造代码块
static
{
a=20;
}
初始化顺序:按照定义顺序的先后执行;
总结属性的初始化顺序:
-
类的加载一定发生对象实例化之前;
即静态属性的初始化一定在普通属性的初始化之前; -
静态属性初始化顺序:按照定义类时的书写顺序初始化
-
普通属性初始化顺序:定义时和构造代码块按书写顺序初始化
构造方法中的初始化一定发生在最后,和书写顺序无关
了解:
- 类的信息一开始是以字节码(bytecode)*.class形式保存在磁盘上的;
- 类的加载过程:
即类加载器在对象的目录上找到指定类的字节码文件,并且进行解析,然后放到内存的方法区的过程;
类只有在被使用到的时候才会进行加载
1)用类去实例化对象
2)调用静态方法
3)访问静态属性