封装

来源:互联网 发布:淘宝做任务送礼物 编辑:程序博客网 时间:2024/06/08 02:27
  • 关键字this、static

    1. this:本类对象的引用

      1. this(属性):在构造函数中调用另一个构造函数。
      2. this.属性:访问成员属性。
      3. this.方法:调用成员方法。
    2. static:静态成员是类成员,不是对象成员。

      1. 静态变量:当属性值被所有对象共享时使用。
      2. 静态方法:当访问的成员都是静态或者在工具类中使用。由于jvm先加载类再加载对象,为了防止静态成员在没有创建本类对象之前访问对象成员,java限制静态方法只能访问静态成员。
  • 构造函数

    当自定义了构造函数后,默认的构造函数就不存在了。一般自定义构造函数时都要先定义无参构造函数,防止子类构造函数找不到父类的无参构造函数而编译失败。

  • 构造函数、构造代码块、静态代码块之间的区别

    1. 构造函数与构造代码块都是给对象进行初始化的,静态代码块是给类进行初始化的。
    2. 构造函数是对特定对象进行初始化,构造代码块对所有对象进行初始化。当所有对象的初始属性>值都相同时,可以将初始化动作定义在构造代码块中,当创建对象调用构造函数时系统会自动先调用构造代码块,而不用利用super语句在带参构造函数中手动调用。
    3. 静态代码块一般用于定义项目启动时必须先执行的操作,这种代码自动执行。
    4. 调用顺序:静态代码块–>构造代码块–>构造函数。
  • 内部类

    1. 使用场景

      当描述事物时,事物的内部还有事物,且内部事物有功能描述,则该事物用内部类来描述,
      由于内部类是外部类的成员,为了封装性,一般将内部类修饰为私有,并对外提供访问接口。

    2. 内部类与外部类之间的访问规则

      由于内部类处于成员位置,因此可以直接访问外部类中的成员。外部类要访问内部类,必须先建立内部类对象。

    3. 局部内部类

      1. 由于处于局部位置,不可以被成员修饰符修饰。
      2. 可直接访问外部类中的成员,但是不能访问它所在局部的普通变量,只能访问被final修饰的局部变量,保证了线程的安全。
    4. 匿名内部类(局部内部类的一种)

      1. 好处:简化书写,将定义内部类、继承、复写、创建对象、调用糅合成一步。
      2. 定义匿名内部类的前提:内部类必须继承自抽象类或者实现接口。
      3. 使用场景:当内部类中的方法不超过3个时使用,既保证了代码的可阅读性,又简化书写。
      4. 匿名内部类格式示范
          <pre>     interface AbsDemo    {        void show();    }    class Outer    {        int x = 3;        public void function()        {            new AbsDemo()            {                void show()                {                    System.out.println("x="+x);                }            }.show();        }    }    </pre>
    5. 静态内部类

      1. 当内部类中定义了静态成员,该内部类也要被静态修饰。(因为所有的静态成员必须在所有的非静态变量之前加载,而内部非静态类是在创建外部类对象之后才加载的,即加载顺序为:外部类–>静态成员–>内部非静态类,这就产生内部非静态类加载与其包含的静态成员加载之间的矛盾,解决方法是将包含静态成员的内部类也修饰为静态)。
      2. 由于静态内部类处于外部类的成员位置,因此静态内部类只能访问外部类中的静态成员。
    6. 外部其他类如何直接访问公有内部类

      1. 访问普通内部类:Outer.Inner in = new Outer().new Inner()

      2. 访问静态内部类:普通成员new Outer.Inner().function();静态成员:new Outer.Inner.function()