Java 中的类与对象
  anLrwkgbyYZS 2023年12月30日 8 0


是构造对象的模板,由类构造(construct) 对象的过程称为创建类的实例 (instance)。

对象中的数据称为实例域(instance field), 操纵数据的过程称为方法(method)。

对于每个特定的类实例(对象)都有一组特定的实例域值,这些值的集合就是这个对象的当前状态( state )。

 1.  封装性

封装性:将数据和对数据的操作封装起来,对象状态(属性)由这个对象自己的行为(方法)来读取和改变,隐藏细节部分。

Java 中 属性的封装,无特殊情况都是用的 private 修饰符, 用 private 修饰符声明该属性为私有属性,只允许类的内部直接访问该属性。对于私有属性,要给一对 setter() 和 getter() 方法操作,外部访问私有属性需要通过setter() 和 getter() 方法。 setter() 和 getter() 方法 IDE(idea、eclipse) 可快速生成 。

在类中可以使用 this 关键字访问本类的私有属性,this 关键字只能用于类的方法体中。如this.id,去访问本类的私有属性 id。

良好的封装能够减少耦合;保证属性的操作安全性。 

2. 类之间的关系

依赖(Dependency),即(uses-a)关系,一个类A的方法可以操纵另外一个类B的对象,就叫做类A依赖类B。应该尽可能的降低依赖,减少类与类之间的耦合性。

继承,即(is-a)关系,一个类继承另外一个类。

实现(Realization):一个类实现了一个接口。

关联(Association):一个类在另外一个类中作为成员变量,默认为双向关联,directed Association 单向关联。

聚合(Aggregation):聚合是较强的关联关系,强调的是整体与部分之间的关系。例如,学校和学生的关系。聚合的整体和部分之间在生命周期上没有什么必然的联系,部分对象可以在整体对象创建之前创建,也可以在整体对象销毁之后销毁。

组合(Composition):组合是聚合的一种形式,它具有更强的拥有关系,强调整体与部分的生命周期是一致的,整体负责部分的生命周期的管理。生命周期一致指的是部分必须在组合创建的同时或者之后创建,在组合销毁之前或者同时销毁,部分的生命周期不会超出组合的生命周期。例如Windows的窗口和窗口上的菜单就是组合关系。如果整体被销毁,部分也必须跟着一起被销毁,如果所有者被复制,部分也必须一起被复制。

3. 构造器

主要特点:

(1)与类同名。

(2)可以有一个以上的构造器,如果没有显式定义,编译器自动添加默认的无参构造器。

(3)可以有0个,1个或多个参数。

(4)没有返回值。

(5)与 new 一起调用。

默认初始化:数值(char、short、byte、int、long、float、double)为0,布尔值为false,对象引用为null。

4. final 与 static 

可以将实例域定义为 final , 构建对象的时候必须初始化 final 实例域。如下所示,不初始化无法通过编译:

Java 中的类与对象_Test

static 可以将域定义为 静态域,每一个实例对静态域都有一份拷贝,静态域属于类

static 可以将方法定义为静态方法,静态方法不能访问实例域 

 静态域 和 静态方法都可以通过类名访问,测试代码如下:

public class Test {
    public static String value = "play";
    public static void getValue() {
        System.out.println(Test.value);
    }
    public static void main(String[] args) throws ClassNotFoundException {
        System.out.println(Test.value);
        Test.getValue();
    }
}

运行截图:

Java 中的类与对象_System_02

5. 初始化顺序

当程序执行时,需要生成某个类的对象,Java执行引擎会先检查是否加载了这个类,如果没有加载,则先执行类的加载再生成对象,如果已经加载,则直接生成对象

在类的加载过程中,类的static成员变量会被初始化,另外,如果类中有static语句块,则会执行static语句块。static成员变量和static语句块的执行顺序同代码中的顺序一致。

在Java中,类是按需加载,只有当需要用到这个类的时候,才会加载这个类,并且只会加载一次

public class Test {
    public static void main(String[] args) throws ClassNotFoundException {
        HelloStatic helloStatic = new HelloStatic();
        HelloStatic helloStatic1 = new HelloStatic();
    }
}


class HelloStatic {
    static {
        System.out.println("HelloStatic!!!");
    }

    public HelloStatic() {
        System.out.println("HelloStatic");
    }
}

运行截图如下所示:

Java 中的类与对象_Test_03

在生成对象的过程中,会先初始化对象的成员变量,然后再执行构造器。也就是说类中的变量会在任何方法(包括构造器)调用之前得到初始化,即使变量散步于方法定义之间。

public class Test {
    public static void main(String[] args)  {
        new Meal();
    }
}

class Meal {

    public Meal() {
        System.out.println("meal");
    }

    Bread bread = new Bread();
}

class Bread {

    public Bread() {
        System.out.println("bread");
    }
}

 运行截图如下所示:

Java 中的类与对象_Test_04

参考文献:

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月30日 0

暂无评论

推荐阅读
anLrwkgbyYZS