亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> java

精通 Java 构造器:类型、用法与实战示例

Java 构造器

本教程通过示例讲解 Java 构造器、其类型及用法。

什么是构造器?

Java 构造器类似于在创建类的对象时调用的方法。

与 Java 方法不同,构造器与类同名且无返回类型。例如:

class Test {
    Test() {
        // 构造器体
    }
}

此处 Test() 是构造器。它与类同名且无返回类型。

推荐阅读: 为什么构造器不返回值


示例 1: Java 构造器

class Main {
    private String name;
    // 构造器
    Main() {
        System.out.println("Constructor Called:");
        name = "Programiz";
    }
    public static void main(String[] args) {
        // 创建 Main 类对象时调用构造器
        Main obj = new Main();
        System.out.println("The name is " + obj.name);
    }
}

输出:


Constructor Called:
The name is Programiz

上例创建名为 Main() 的构造器。构造器内初始化 name 变量。

注意创建 Main 类对象的语句:

Main obj = new Main();

创建对象时调用 Main() 构造器,name 变量被初始化。

故程序打印 name 值为 Programiz。


构造器类型

Java 中构造器可分为 3 类:

  1. 无参构造器
  2. 带参构造器
  3. 默认构造器

1. Java 无参构造器

类似方法,Java 构造器可有参数也可无参数。

若构造器不接受任何参数,称为无参构造器。例如:

private Constructor() {
    // 构造器体
}

示例 2: Java private 无参构造器

class Main {
    int i;
    // 无参数构造器
    private Main() {
        i = 5;
        System.out.println("Constructor is called");
    }
    public static void main(String[] args) {
        // 无参数调用构造器
        Main obj = new Main();
        System.out.println("Value of i: " + obj.i);
    }
}

输出:


Constructor is called
Value of i: 5

上例创建构造器 Main()。构造器不接受参数,故为无参构造器。

注意构造器声明为 private。

构造器一旦声明 private,外部无法访问。故禁止用 private 构造器在类外创建对象。

此处在同一类内创建对象,故程序能访问构造器。详见 Java 实现私有构造器。

若想在类外创建对象,需声明构造器为 public。

示例 3: Java public 无参构造器

class Company {
    String name;
    // 公共构造器
    public Company() {
        name = "Programiz";
    }
}
class Main {
    public static void main(String[] args) {
        // 在另一个类中创建对象
        Company obj = new Company();
        System.out.println("Company name = " + obj.name);
    }
}

输出:


Company name = Programiz

推荐阅读: Java 访问修饰符


2. Java 带参构造器

Java 构造器也可接受一个或多个参数。此类构造器称为带参构造器 (带参数的构造器)。

示例 4: 带参构造器

class Main {
    String languages;
    // 接受单个值的构造器
    Main(String lang) {
        languages = lang;
        System.out.println(languages + " Programming Language");
    }
    public static void main(String[] args) {
        // 调用构造器传递单个值
        Main obj1 = new Main("Java");
        Main obj2 = new Main("Python");
        Main obj3 = new Main("C");
    }
}

输出:


Java Programming Language
Python Programming Language
C Programming Language

上例创建构造器 Main(),接受单个参数。注意表达式:

Main obj1 = new Main("Java");

此处向构造器传递单个值。根据传入参数,构造器内初始化 language 变量。


3. Java 默认构造器

若未显式创建构造器,Java 编译器在程序执行时自动创建无参构造器。此构造器称为默认构造器。

示例 5: 默认构造器

class Main {
    int a;
    boolean b;
    public static void main(String[] args) {
        // 调用默认构造器
        Main obj = new Main();
        System.out.println("Default Value:");
        System.out.println("a = " + obj.a);
        System.out.println("b = " + obj.b);
    }
}

输出:


a = 0
b = false

此处未创建任何构造器。故 Java 编译器自动创建默认构造器。

默认构造器将未初始化的实例变量设为默认值。

类型默认值
booleanfalse
byte0
short0
int0
long0L
char\u0000
float0.0f
double0.0d
object引用 null

上程序中 a 和 b 分别初始化为默认值 0 和 false。

上程序等价于:

class Main {
    int a;
    boolean b;
    // 一个私有构造器
    private Main() {
        a = 0;
        b = false;
    }
    public static void main(String[] args) {
        // 调用构造器
        Main obj = new Main();
        System.out.println("Default Value:");
        System.out.println("a = " + obj.a);
        System.out.println("b = " + obj.b);
    }
}

程序输出与示例 5 相同。


Java 构造器重要注意事项


Java 构造器重载

类似 Java 方法重载,可创建两个或多个参数不同的构造器。这称为构造器重载。

示例 6: Java 构造器重载

class Main {
    String language;
    // 无参构造器
    Main() {
        this.language = "Java";
    }
    // 带单参数构造器
    Main(String language) {
        this.language = language;
    }
    public void getName() {
        System.out.println("Programming Langauage: " + this.language);
    }
    public static void main(String[] args) {
        // 调用无参构造器
        Main obj1 = new Main();
        // 调用带参构造器
        Main obj2 = new Main("Python");
        obj1.getName();
        obj2.getName();
    }
}

输出:


Programming Language: Java
Programming Language: Python

上例有两个构造器:Main() 和 Main(String language)。两者用不同值初始化 language 变量。

根据对象创建时传入的参数,调用不同构造器并赋不同值。

也可从一个构造器调用另一个构造器。详见 Java 从一个构造器调用另一个。

注意:使用 this 关键字指定类变量。了解 this 关键字请访问 Java this 关键字。

java

  1. C++构造函数详解:默认、参数化与拷贝构造函数
  2. 精通 Java 运算符:类型、语法与实战示例
  3. Java 注释:类型、用法与最佳实践
  4. 精通 Java 增强 for 循环:语法、示例与最佳实践
  5. 精通 Java 构造器:类型、用法与实战示例
  6. 精通 Java 字符串:创建、方法与最佳实践
  7. Java StringBuilder 与 StringBuffer:高性能字符串操作
  8. 精通 Java 接口:概念、实现与最佳实践
  9. 精通 Java 匿名内部类:定义、语法与实战示例
  10. Java 枚举构造器详解与实战示例
  11. 精通 Java Try-With-Resources:自动资源管理详解
  12. Java 注解详解:类型、放置位置与实战示例