JavaOO 类的高级概念

访问修饰符:

类的每一个成员(包括成员变量、方法和构造器)都有一个访问修饰符,用来判断谁可以访问该成员

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-----标号表示这个内部

     类出现的顺序

匿名内部类不能访问到外部类同方法中的局部变量,只能访问到外部类同方法中的局部常量

原文地址:https://www.cnblogs.com/wuhao-bky/p/6399294.html