Java 封装与类

封装与类

  • 面向对象的程序设计将数据和对数据的操作行为封装在一起,作为一个相互依存、不可分割的整体——类。
  • 类中的大多数数据只能为本类的行为处理,类会提供公开的外部接口和外界进行通信。
  • 面向对象的显著特点:封装性继承性多态性
  • 封装隐藏了内部实现,继承实现了现有代码的用,多态在代码复用的基础上可以改写对象的行为。

 


 

封装:

(1)把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位。

(2)实现“信息隐蔽”,尽可能隐藏对象的内部细节,对外界形成一个边界,只保留有限的接口和外界进行联系。 

 


 

 

类:

1. 定义:[类修饰符] class <类名>{ <类体 >}

  (1)类的访问控制符:public, protected, private, package(默认)

  (2)数据成员/成员变量

  (3)数据成员的 set 和 get 方法:通常会将数据成员私有化(声明数据成员为 private),只允许在类的内部直接存取,外界则使用类声明的两个公开的接口(set 和 get 方法)进行访问

package Blog;

public class GanGan {
    // 成员变量
    private String name;

    
    // 成员变量的 set 和 get 方法
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
}

 

  (4)构造方法:用于为新建的对象分配存储空间和对数据成员进行初始化,它只能再创建对象是用 new 命令调用

      *  构造方法通常被重载以提供无参、有参等多种初始化的形式,程序运行时,编译系统会根据创建的对象的参数情况匹配相应的构造方法。

      *  如果一个类中为定义构造方法,编译系统会为之提供一个缺省的无参、方法体为空的构造方法

      

public GanGan() {
        
}

      *  但是,一旦类中自行定义了其他构造方法后,编译系统将不再提供默认的无参构造方法。但无论怎样,都需要在类中自定义一个无参的构造方法

      *  如果类中包含了多个重载的构造方法,而这些重载方法之间存在完全包含的关系,那么可以用一个构造方法去调用另一个构造方法

package Blog;

public class GanGan {
    // 成员变量
    private String name;
    private int age;
    
    // 空构造
    public GanGan() {
        super();
    }
    
    // 有参构造,重载
    
    public GanGan(String name) {
        this.name  = name;
    }
    
    public GanGan(String name, int age) {
        // 使用 this 调用自己的其它构造方法
        // this 调用只能再构造方法中使用,且必须是构造方法执行体的第一句
        this(name);
        this.age = age;
        
    }
    
    
    // 成员变量的 set 和 get 方法
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    
    
}

 

 


 

对象和引用

  1. 创建后的对象存在与堆内存中,通过它的引用变量才能才能访问到,引用变量位于栈内存中。

    (Java 中的 String 类型变量为引用类型,其默认的初值为 null)

  2. 引用变量只存储了对象的地址,与对象建立了指向的关系

    使用对象的成员:引用变量 . 成员变量,引用变量 . 成员方法

 


 

 

关于 static

1. 对于 static 成员,建议使用类名 . 形式进行存取(static成员通常是为类的对象所共享的数据)

package Blog;

public class StaticClass {
    // 成员变量
    public static String nationality = "中国";
    
}

 

package Blog;

public class StaticDemo {

    public static void main(String[] args) {
        System.out.println("干干的国籍:" + StaticClass.nationality);
    }
}

运行成果:

2. static 方法只能访问 static 成员;非 static 方法既可以访问 static 成员,又可以访问非 static 成员

 

3. static 代码块:如果在加载类时希望先进行一些特殊的初始化,可以使用 static 定义一个代码块,将期望最早执行的初始化任务写在代码块中。(类在家在时,会预先执行 static 代码块中的代码,且只执行一次

package Blog;

public class StaticBlockTest {
    // 静态代码块
    static {
        System.out.println("static 代码区,类正在被加载......,我只执行一次");
    }
    
    // 构造方法
    public StaticBlockTest() {
        System.out.println("在创建类的对象......");
    }
}

 

package Blog;

public class StaticBlockDemo {

    public static void main(String[] args) {
        new StaticBlockTest();
        new StaticBlockTest();

    }

}

 

运行结果:

      

 

posted @ 2020-11-03 08:10  ZengZG  Views(168)  Comments(0Edit  收藏  举报