标签:new 准备 ati 内存 静态属性 静态初始化 常量 同事 初始化块
访问修饰符:
类的每一个成员(包括成员变量、方法和构造器)都有一个访问修饰符,用来判断谁可以访问该成员
static 静态:
1、特性:
1)与对象无关,与类有关
2)在加载期有特殊操作
2、用static修饰的属性:
1)全类(不管多少对象)共享一个值 ----可以用类名. 进行访问
常量属性无脑设计为static
变量属性极少设计为static
2)在加载期就会被产生
3、用static修饰的方法:----静态方法-----类方法
该方法与对象无关,只与类有关-----static的方法不能访问本类的任何非static的属性或其他方法(因
为他们全跟对象有关)
------所以只有当这个方法的整个实现都跟对象身上的任何非static无关
的时候,才能把该方法设计为static
------即:工具类的工具方法才能设计为static
在加载期会优先加载static的方法,后加载非static的方法-----这是static不能调用非static的机制上的
原因。
内存:
堆、栈、数据段、代码段
new出来的在堆区
局部变量在栈区
static修饰的属性既不在堆也不在栈,而是在数据段
static修饰的属性----静态属性-----类属性
该属性与对象无关,全类共享同一个值-----所以只有极少的变量属性能够被设计为static(真正判断出
所有对象的值永远都一样)
-----所以常量属性可以无脑设计为static
- ----所以可以使用类名. 的方式进行访问(切忌把因果关系倒
置)
在加载期(运行期之前),该属性即被产生-----产生在内存中的数据段的静态区(普通属性是运行期
执行到new的代码,产生在内存的堆区)
------所以可以不产生对象,直接访问属性
初始化块:
1、实例初始化块:
1)在产生对象的时候,会被自动调用
2)每产生一个对象,就会被调用一次
3)它执行的实际是在构造方法被调用的第三步初始化属性之后,第四步构造方法里面代码被执行
之前
4)所以相当于可以把实例初始化的代码写到构造方法里面,放前面即可
5)因此这个实例初始化块的使用率相当低
2、静态初始化块:
1)在加载Person类的时候会被自动调用
2)一个类只会被加载一次,所以静态初始化块只会被执行一次
3)所以常常把一些在加载期就可以做的准备动作写到静态初始化
4)没有别的替代方式,因此静态初始化块的使用率相当高
成员内部类----直接定义在外部类中,位置和外部类的成员变量、构造方法、普通方法是平行的
1)像外部类所有的成员一样,它是可以有访问修饰符的,同样控制这个内部类再外部类的外部或
内部可访
2)在内部类的内部同样可以有属性、构造、方法等一切类可以包换的内容
3)内部类中访问外部类的属性或方法,请使用外部类的名字.this.的方式访问
4)成员内部类不能有静态属性和静态方法,但可以访问外部类的静态属性和静态方法,类名.访问
5)成员内部类的class文件名:外部类的名字$内部类的名字.class
局部内部类-----定义的位置在外部类的某个方法中,和局部变量是平行的
1)与局部变量一样,没有任何的访问修饰符,当然也没有static
2)在内部类的内部同样可以有属性、构造、方法等一切类可以包含的内容
3)局部内部类不能有静态属性和静态方法
4)局部内部类的class文件名:外部类的名字$数字标号内部类的名字.class-----标号表示这个内部
类出现的顺序
匿名内部类-----是局部内部类的一种特例,所以也是定义在一个外部类的某个方法中
1)这个类没有名字,在产生对象的同事去定义拥有哪些属性或方法,并且只能用一次
2)在匿名内部类的内部同样可以有属性、构造、方法等一切类可以包含的内容
3)匿名内部类不能有静态属性和静态方法
4)局部内部类的class文件名:外部类的名字$数字标号.class-----标号表示这个内部
类出现的顺序
匿名内部类不能访问到外部类同方法中的局部变量,只能访问到外部类同方法中的局部常量
标签:new 准备 ati 内存 静态属性 静态初始化 常量 同事 初始化块
原文地址:http://www.cnblogs.com/wuhao-bky/p/6399294.html