同包 不同包
本类 子类 非子类 子类 非子类
private √ × × × ×
默认 √ √ √ × ×
protected √ √ √ √ ×
public √ √ √ √ √
标准Java类----- JavaBean
(1)必须有公共无参构造
(2)必须为私有属性提供命名规范的get/set方法
类的成员变量可以成为只读或者只写的
类可以对存储在其成员变量中的内容有一个整体的控制
类的用户不需要知道类是如何存储数据的.
static
static修饰属性
1丶现象:
用static修饰的属性,全类共享一个值,
这个属性将不再存放在每个对象身上,而是全类共享
无论哪个对象对该属性进行了改动,全类所有对象都被改动.
2丶原因:static的属性是单独存放在内存中的静态区,而不是存放在每个对象身上的,
所以,它可以直接通过 类名. 的方式就可以操作.
3丶特殊操作:
------这是结果而不是设计static的原因.
注意:能用static修饰的属性其实是极少的.
-------除非你能真正保证它是全类共享的一个值,否则是不允许的.
它会在程序运行之前,即加载期就会产生并放入.
使用最多? —常量属性可以无脑设计加"static".
public static final …;
static修饰方法
1丶(1)可以通过 类名. 的方式就可以操作.
(2) static的方法中,不能出现this和super.
(3)static的方法中不能访问非static的属性行为.
2丶原因:
加载期,会首先加载静态方法和属性,这个时候还没有对象产生.
在加载静态方法的时候,还不认识 非静态的属性或方法, 因此会报错
3丶特殊设计:
只有工具类的工具方法,才能定义为static
–如果一个方法不需要执行到对象本身相关的数据或行为的时候.
那么这个方法才可以定义为static
初始化块
----实例初始化块
{
}
能在类里面写的第四种东西(属性.初始化块,构造,行为)
1丶书写位置:
写在属性之后,构造之前
2丶什么时候调用??
没有方法声明,不知道参数名,甚至不知道方法名
默认在初始化对象(new 对象) 被自动调用,每产生一个对象,就被调用一次.
分析:
1丶都是代码块,都已经有当前对象,所以凡是可以卸载初始化块中的代码,也可以写在构造方法中.
2丶构造方法内部的代码是实例化初始化块之后执行的最终效果以构造为准
结论:
初始化一个对象要写的代码语句,宁愿写在构造方法里面
咋用?
本类所有构造方法都要执行的共有代码,可以写在实例初始化块.只需要写一次
这个功能和this()一样,
初始化块在什么时候被执行??
划分空间
划分属性
属性初始化
实例化初始化块
构造中的代码
static{
}
静态初始化块
1丶书写位置:
写在属性之后,构造之前
2丶什么时候调用??
没有方法声明,不知道参数名,甚至不知道方法名
默认在类加载的时候被自动调用.
由于一个类只加载一次(第一次使用的时候),所以这个代码只执行一次.
分析:
1丶这是目前我们学的唯一一个在加载期就能执行的代码.
2丶在加载期做事情,消耗的是加载期的时间,不会影响运行期时间.
结论:
静态初始化块,非常有用!!!
特别是一些大项目,一些预先需要准备的动作可以写在里面,从而不影响运行时间.
内部类
可以在一个类当中定义的第五部分 —内部类
内部类分类: 1丶成员内部类 2丶局部内部类
成员内部类:直接书写在外部类本身当中,与外部类的属性,构造,行为,初始化块平行.
除了定义的位置特殊之外,它仍一个完整的类.
表现在:
1丶可以拥有属性,构造,行为,初始化块,甚至是它的内部类
2丶它是一个独立的类,所以有独立的class文件
3丶成员内部类可以像属性丶行为丶初始化块一样,用static修饰 -----静态内部类
.