Java 类与对象

Java 是一门面向对象的编程语言,类是面向对象编程中的基本编程单元。

类与对象

在 Java 中,对象是类似于数据结构的容器,具有状态行为。对象代表系统或应用程序中的参与者

例如,在学籍管理系统中,主要参与者是学生、教师等。

对象是类的实例。

一个类可用于创建多个对象。它们在结构上相似,但可以有不同的状态。

如何声明一个类

在 Java 中声明类的一般语法是:

<<modifiers>> class <<class name>> {

        // fields and members of the class
}
  • 一个类声明可能有零个或多个修饰符 modifiers。
  • 关键字class用于声明一个类。
  • <> 是用户定义的类名,它应该是一个有效的标识符。
  • 每个类都有一个主体,它在一对大括号 { … } 内指定。
  • 类的主体包含其不同的组件,例如字段、方法等。
public class Mapull {
    // 暂时留空
}

class 类型

在 Java 中,我们可以有两种类型的类。

  • 抽象类——被 abstract 修饰,这些是不完整的类。这意味着你不能创建此类的实例,而只能扩展这些类来完成它们。
  • 非抽象类——这些类定义了它们的完整状态和行为。他们是完整的类定义,你可以创建此类的实例。

Java 类的组成

Java 中的类可能由五个主要组件组成。

  • 字段
  • 方法
  • 构造函数
  • 静态初始化器
  • 实例初始值设定项

字段和方法也称为类成员。构造函数和两个初始化器都用于类的初始化,即使用类模板创建对象。

构造函数用于创建类的对象,我们必须至少有一个类的构造函数(如果我们明确声明,那么 JVM 会为我们注入默认构造函数)。

初始化器用于初始化类的字段。我们可以有零个或多个静态或实例类型的初始值设定项。

字段

类的字段表示该类的对象的属性(也称为状态属性)。这些字段在类的主体内声明。

在类中声明字段的一般语法是:

public class Mapull

        // 字段定义
        <<modifiers>> <<data type>> <<field name>> = <<initial value>>;
}

假设“学生”类的每个对象都有两个属性:名称和年龄。学生类应该包括两个字段的声明:一个表示名称,一个表示年龄。

public class Student {

        String name;
        int age;
}

这里的 Student 类声明了两个字段:name 和gender。Student 类的每个实例(或对象)都将拥有这两个字段的副本。

方法或函数

Java 方法是一组组合在一起进行操作的语句的集合。方法通常用于修改类字段的状态,方法也可用于通过调用其他对象中的方法来委派任务。

在 Java 中,方法可以——

  • 接受零个或多个参数
  • 返回 void 或单个值
  • 被重载 – 意味着我们可以定义多个名称相同但语法不同的方法
  • 被覆盖 – 意味着我们可以在父类和子类中定义具有相同语法的方法
public class Student {

        String name;
        int gender;

        public void study() {

            System.out.println("我爱学习");
        }
}

构造函数

构造函数是命名的代码块,用于在创建对象后立即初始化类的对象。构造函数声明的一般语法是:

<<Modifiers>> <<Constructor Name>>(<<parameters list>>) throws <<Exceptions list>> {

        // Body of constructor goes here
}
  • 构造函数的访问修饰符可以是 public、private、protected 或包级别(无修饰符)。
  • 构造函数名称与类名相同。
  • 构造函数名称后跟一对左括号和右括号,其中可能包含参数。
  • 异常是可选的,右括号后面可以跟关键字 throws,后面跟以逗号分隔的异常列表。
  • 与方法不同,构造函数没有返回类型。
  • 我们甚至不能指定 void 作为构造函数的返回类型。如果有任何返回类型,那么它是方法。
请记住,如果构造的名称与类名相同,则它可以是方法或构造函数。如果它指定了返回类型,则它是一个方法。如果它没有指定返回类型,则它是一个构造函数。

实例初始化块

我们看到构造函数用于初始化类的实例。一个实例的初始化块,也被称为实例初始化,还使用初始化类的对象。

实例初始值设定项只是类主体内部的代码块,但位于任何方法或构造函数之外。实例初始值设定项没有名称。它的代码只是放在一个左大括号和一个右大括号内。

请注意,实例初始化程序在实例上下文中执行,并且关键字this在实例初始化程序中可用。

public class Mapull
{
    {
        //instance initializer block
    }
}
  • 一个类可以有多个实例初始化器。
  • 对于我们创建的每个对象,所有初始化程序都按文本顺序自动执行。
  • 所有实例初始值设定项的代码都在任何构造函数之前执行。
  • 一个实例初始化不能有一个return语句。
  • 除非所有声明的构造函数在它们的 throws 子句中列出那些已检查的异常,否则它不能抛出已检查的异常。
public class Student {

    //实例初始化
    {
        System.out.println("实例初始化");
    }

    //构造器
    public Student()
    {
        System.out.println("构造器初始化");
    }

    public static void main(String[] args) {
        new Student();
    }
}
实例初始化
构造器初始化

静态初始化块

静态初始化块也被称为一个静态初始化。
它类似于实例初始化块,只是它用于初始化一个类。

实例初始化器对每个对象执行一次,而静态初始化器只在类定义加载到 JVM 时为类执行一次。
为了将它与实例初始化器区分开来,我们需要static在其声明的开头使用关键字。
我们可以在一个类中有多个静态初始值设定项。
所有静态初始化器都按照它们出现的文本顺序执行,并在任何实例初始化器之前执行。
静态初始化程序不能抛出已检查的异常,它不能有 return 语句。

public class Mapull {

    //静态初始化
    static {
        System.out.println("静态初始化");
    }

    //构造器
    public Student()
    {
        System.out.println("构造器初始化");
    }

    public static void main(String[] args) {
        new Student();
    }
}
静态初始化
构造器初始化

如何创建 Java 对象

在 Java 中,要从类创建对象,请使用new关键字及其构造函数之一。

<<Class>> <<variable>> = new <<Call to Class Constructor>>;

//e.g.

Student student = new Student();

请记住,当我们不向类添加构造函数时,Java 编译器会为我们添加一个构造函数。Java 编译器添加的构造函数称为默认构造函数。默认构造函数不接受任何参数。类的构造函数名与类名相同。

new 操作符之后是对正在创建其实例的类的构造函数的调用。new 运算符通过在堆中分配内存来创建类的实例。

“空”引用类型

Java 有一种特殊的引用类型,称为 null。它没有名字,我们不能定义空引用类型的变量。空引用类型只有一个由 Java 定义的值,即空文字。它只是空的。

空引用类型与任何其他引用类型的赋值兼容。也就是说,我们可以为任何引用类型的变量分配空值。实际上,存储在引用类型变量中的空值意味着引用变量不引用任何对象。

// 给 tom 赋予  null

Student tom = null;      // tom 不指向任何对象
tom = new Student();     // 将 tom 指向一个合法的 Student 对象

请注意, nullnull 类型的文字。我们不能将 null 分配给原始类型变量,这就是 Java 编译器不允许我们将原始值与 null 值进行比较的原因。

总结

这一节的内容比较抽象,如果理解起来有困难,不妨先了解后面内容。类的创建将贯穿在整个 Java 开发中,在之后潜移默化的实战中,相信会有更深的体会。

转载请注明出处:码谱记录 » Java 类与对象
标签: