Java 创建类 – 如何创建对象?
原文: https://howtodoinjava.com/java/basics/how-to-create-a-class-in-java/
在面向对象范式中,类是编程的基本单位。 在本教程中,学习编写 Java 类和如何在 Java 中创建对象。
1. 类与对象
在 Java 中,对象是具有数据结构的容器,它们具有状态和行为。 对象代表系统或应用程序中的参与者。 例如,在 HR 应用程序中,参与者是雇员,经理,部门或报告。 对象是类的实例。
类是描述其对象的状态和行为的模板。
2. 如何声明一个类
在 Java 中声明类的一般语法为:
<<modifiers>> class <<class name>> {
// fields and members of the class
}
- 类声明可能具有零个或多个修饰符。
- 关键字
class
用于声明一个类。 <<class name>>
是该类的用户定义名称,应为有效标识符。- 每个类都有一个主体,该主体在一对大括号(
{…}
)中指定。 - 类的主体包含其不同的组件,例如字段,方法等。
例如,
public class Main
{
// Empty body for now; Write we own
}
2.1 类的类型
在 Java 中,可以有两种类型的类。
- 抽象类 - 这些类是
abstract
。 这些是不完整的类。 这意味着您无法创建此类的实例。 您只能扩展这些类以完成其规范。 - 非抽象类 – 这些类定义其完整状态和行为。 他们是完整的类。 您可以创建此类的对象。
3. Java 类的渐进性
在 Java 中,类用作模板来创建对象。 Java 中的类可能包含五个主要组件。 即:
- 字段
- 方法
- 构造器
- 静态初始化器
- 实例初始化器
字段和方法也被称为类成员。 构造器和两个初始化器都用于在类初始化期间使用,即使用类模板创建对象。
构造器用于创建类的对象。 我们必须为类至少具有构造器(如果我们明确声明,则 JVM 为我们注入默认构造器)。
初始化器用于初始化类的字段。 我们可以有零个或多个静态或实例类型的初始化器。
3.1 字段
类的字段表示该类对象的属性(也称为状态属性)。 这些字段在类的主体内声明。
在类中声明字段的一般语法为:
public class Main
// A field declaration
<<modifiers>> <<data type>> <<field name>> = <<initial value>>;
}
假设Human
类的每个对象都有两个属性:名称和性别。 Human
类应该包括两个字段的声明:一个代表姓名,另一个代表性别。
public class Human {
String name;
String gender;
}
Human
类在此处声明两个字段:名称和性别。 这两个字段均为String
类型。Human
类的每个实例(或对象)都将具有这两个字段的副本。
3.2 方法
Java 方法是语句的集合,这些语句被组合在一起以执行操作。 方法通常用于修改类字段的状态。 通过调用其他对象中的方法,方法也可以用于委派任务。
在 Java 中,方法可以:
- 接受零个或多个参数
- 返回
void
或单个值 - 重载 – 意味着我们可以定义多个具有相同名称但语法不同的方法
- 被覆盖 – 意味着我们可以在父类和子类中使用相同的语法定义方法
public class Human {
String name;
String gender;
public void eat() {
System.out.println("I am eating");
}
}
3.3 构造器
构造器是一个命名的代码块,用于在创建对象后立即初始化该类的对象。 构造器声明的一般语法为:
<<Modifiers>> <<Constructor Name>>(<<parameters list>>) throws <<Exceptions list>> {
// Body of constructor goes here
}
- 构造器可以将其访问修饰符设为
public
,private
,protected
或包级别(无修饰符)。 - 构造器名称与类的简单名称相同。
- 构造器名称后跟一对左括号和右括号,其中可能包含参数。
- 可选地,在右括号后面可以加上关键字
throws
,而关键字throws
之后是逗号分隔的异常列表。 - 与方法不同,构造器没有返回类型。
- 我们甚至不能将
void
指定为构造器的返回类型。 如果有任何返回类型,则为方法。 - 请记住,如果构造的名称与类的简单名称相同,则它可以是方法或构造器。 如果指定返回类型,则为方法。 如果未指定返回类型,则为构造器。
3.4 实例初始化块
我们看到,构造器用于初始化类的实例。 实例初始化块(也称为实例初始化器)也用于初始化类的对象。
实例初始值设定项只是类体内的代码块,但不包括任何方法或构造器。 实例初始化器没有名称。 它的代码只是放在开括号和闭括号内。
请注意,实例初始化器在实例上下文中执行,并且关键字this
在实例初始化器中可用。
public class Main
{
{
//instance initializer block
}
}
- 一个类可以有多个实例初始化器。
- 对于我们创建的每个对象,所有初始化器都将按文本顺序自动执行。
- 所有实例初始化器的代码都在任何构造器之前执行。
- 实例初始化器不能具有
return
语句。 - 除非所有已声明的构造器在其
throws
子句中列出那些受检的异常,否则它不会抛出受检的异常。
public class Main {
//instance initializer
{
System.out.println("Inside instance initializer");
}
//constructor
public Main()
{
System.out.println("Inside constructor");
}
public static void main(String[] args) {
new Main();
}
}
Output:
Inside instance initializer
Inside constructor
3.5 静态初始化块
- 静态初始化块也称为静态初始化器。
- 它类似于实例初始化块,但用于初始化类。
- 实例初始化器对每个对象执行一次,而静态初始化器仅在将类定义加载到 JVM 中时对一个类执行一次。
- 为了区别于实例初始化器,我们需要在其声明的开头使用
static
关键字。 - 我们可以在一个类中有多个静态初始化器。
- 所有静态初始值设定项均按其出现的文本顺序执行,并在任何实例初始值设定项之前执行。
静态初始化器无法引发受检异常。 它不能有一个return
语句。
public class Main {
//static initializer
static {
System.out.println("Inside static initializer");
}
//constructor
public Main()
{
System.out.println("Inside constructor");
}
public static void main(String[] args) {
new Main();
}
}
Output:
Inside static initializer
Inside constructor
4. 如何创建对象?
在 Java 中,要通过类创建对象,请使用new
关键字及其构造器之一。
<<Class>> <<variable>> = new <<Call to Class Constructor>>;
//e.g.
Human human = new Human();
请记住,当我们不向类添加构造器时,Java 编译器会为我们添加一个构造器。 Java 编译器添加的构造器称为默认构造器。 默认构造器不接受任何参数。 类的构造器的名称与类的名称相同。
在new
运算符之后,将调用正在创建其实例的类的构造器。new
运算符通过在堆中分配内存来创建类的实例。
5. null
引用类型
Java 具有称为null
类型的特殊引用类型。 它没有名字。 因此,我们不能定义空引用类型的变量。 空引用类型只有 Java 定义的一个值,即空字面值。 它只是null
。
空引用类型是与任何其他引用类型兼容的分配。 也就是说,我们可以将空值分配给任何引用类型的变量。 实际上,存储在引用类型变量中的空值表示该引用变量没有引用任何对象。
// Assign null value to john
Human john = null; // john is not referring to any object
john = new Human(); // Now, john is referring to a valid Human object
请注意,null
是null
类型的字面值。 我们无法为基本类型变量分配null
,因此 Java 编译器不允许我们将基本值与null
值进行比较。
这是有关在 Java 中创建类的非常基础的教程的全部内容。
学习愉快!
了解更多信息: Oracle Java Doc