zoukankan      html  css  js  c++  java
  • 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-----标号表示这个内部

         类出现的顺序

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

  • 相关阅读:
    百度笔试题:找最小的不重复数
    [置顶] 【收藏】实用软件
    指针数组与数组指针
    根据新浪天气API获取各地天气状况(Java实现)
    项目经历——EasyUI的检索和更新操作
    利用MyEclipse配置S2SH三大框架篇-Spring配置
    Intellij IDEA 最头大的问题,如何自定义注释模板?
    Spring Cloud Gateway VS Zuul 比较,怎么选择?
    Spring Boot 注册 Servlet 的三种方法,真是太有用了!
    Spring Cloud Eureka 常用配置详解,建议收藏!
  • 原文地址:https://www.cnblogs.com/wuhao-bky/p/6399294.html
Copyright © 2011-2022 走看看