Java_类与对象03_封装和private、this、super、static关键字

A    封装:类中的成员变量为private(私有),为私有的成员变量提供公有的get()set()。

  封装的好处:

    i.      隐藏实现细节,提供共有的访问方式

    ii.     提高了代码的复用性

    iii.    提高安全性

  封装的原则(思想):

    i.      将不需要对外提供的内容隐藏起来

    ii.     把属性隐藏,提供公共方法对其访问

  封装的体现:private是封装的一种体现。

B    private:

  i.      是一个权限修饰符

  ii.     可以修饰成员(成员变量和成员方法)

  iii.    被private修饰的成员只能在本类中被访问

C     this关键字: 代表当前类的对象引用。

  引用当前类中的成员变量成员方法

    private String name;

    public static void main(String[] args) {
        this.name = "zhangsan"; // 错误,主方法是静态的,不能使用this关键字。
    }

    public String getName() {
        return name; // 这里其实是隐含了this
    }

D    super关键字:代表父类存储空间的标识。(可以理解为父类的引用,通过这个东西可以访问父类的成员)

E    static关键字:

  1.    可以修饰成员变量成员方法静态的成员可以直接使用类名(接口名)直接调用,也可以通过类的对象调用。

    修饰成员变量:静态变量

      i.      类所有的对象共用一份静态变量。

      ii.     静态变量只在第一次使用类时初始化,从第二次使用类时不再进行初始化。

    修饰成员方法:静态方法。

      i.      静态方法不能使用this与super关键字

      ii.    静态方法只能直接调用当前类中静态的成员。想要调用非静态成员必须通过类的对象调用(因为静态方法不接受隐含的this)。

              private String name;

              static String num;

          静态方法的直接调用:

            调用静态成员:

                  Test.num = "";    // 通过类名调用

                  // this.num = "";  // 错误,static修饰的成员方法(即静态方法)不能使用this与super关键字

                  num = "";      // 是否相当于Test.num = "";

                  也可通过类的对象调用

            调用非静态成员:

                  // this.name = "";         // 错误,static修饰的成员方法不能使用this与super关键字

                  // Test.name = "";        // 错误,name不是静态的

                  // name = "";                // 错误,name不是静态的,因此相当于this.name

                  只能通过类的对象调用

          非静态方法的直接调用:

            调用静态成员:

                  Test.num = "";

                  this.num = ""; //原理 好像 与上面的相同,this:是当前类的对象引用

                  num = "";       //调用方式和静态方法直接调用的原理相同

                  也可通过类的对象调用

            调用非静态成员

                  Test.name = "";    //错误,只有静态成员才可以用类名(接口名)调用

                  name = "";     //相当于this.name = "";

                  也可通过类的对象调用

      iii.   非静态的方法可以直接调用静态的成员。

  2.     静态的特点:

      A:随着类的加载而加载

      B:优先与对象存在

      C:被类的所有对象共享

      D:可以通过类名调用:

      既可以通过对象名调用,也可以通过类名调用,建议通过类名调用。

  3.     静态的内存图:静态的内容在方法区的静态区

  4.     静态的注意事项;

      A:在静态方法中没有this对象

      B:静态只能访问静态(代码测试过)

  5.     静态变量和成员变量的区别

      A:所属不同

        静态变量:属于类,类变量

        成员变量:属于对象,对象变量,实例变量

      B:内存位置不同

        静态变量:方法区的静态区

        成员变量:堆内存

      C:生命周期不同

        静态变量:静态变量是随着类的加载而加载,随着类的消失而消失

        成员变量:成员变量是随着对象的创建而存在,随着对象的消失而消失

      D:调用不同

        静态变量:可以通过对象名调用,也可以通过类名调用

        成员变量:只能通过对象名调用

猜你喜欢

转载自www.cnblogs.com/zhaolanqi/p/9234612.html
今日推荐