一文了解 Java 中的构造器(java中构造器的写法)

  本篇文章为你整理了一文了解 Java 中的构造器(java中构造器的写法)的详细内容,包含有java的构造器和构造方法 java中构造器的写法 java构造器和构造函数 java的构造方法是什么 一文了解 Java 中的构造器,希望能帮助你了解 一文了解 Java 中的构造器。

  摘要:Java 也采用了构造器,并且还提供了一个垃圾收集器(garbage collector),当不再使用内存资源的时候,垃圾收集器会自动将其释放。

  本文分享自华为云社区《一文带你了解 Java 中的构造器》,作者: 宇宙之一粟 。

  C ++ 引入了构造器(constructor,也叫构造函数)的概念,它是在创建对象时被自动调用的特殊方法。

  Java 也采用了构造器,并且还提供了一个垃圾收集器(garbage collector),当不再使用内存资源的时候,垃圾收集器会自动将其释放。

  构造器定义

  在 Java 中,可以通过编写构造器来确保每个对象的初始化。但是这里有两个问题:

  这个构造器使用的任何名字都有可能与类里某个成员相冲突;

  编译器负责调用构造器,所以它必须始终知道应该调用哪个方法。

  C++ 语言采用的方案就是将构造器和类的名字定义相同,Java 也采用了这个方案。

  构造器的作用是用来建立一个新的类的实例,当一个对象被创建时,JVM 使用一个构造函数,并为其分配内存空间。

  
例如,在下面的示例中,我们创建了一个名为 ReLearnConstructor 的构造函数。在构造函数内部,我们正在初始化 hello 变量的值。:

  
注意创建 ReLearnConstructor 类的对象的语句:ReLearnConstructor rc = new ReLearnConstructor();

  在这里,当创建对象时,调用 ReLearnConstructor 构造函数。并且,hello 变量的值被初始化。

  因此打印的 hello 的值为:

  构造器目的

  构造函数的目的是初始化对象的状态,为所有声明的属性赋值。如果我们没有自定义构造函数,JVM 就会为这些属性分配默认值。

  原始类型的默认值:

  整数类型是 0

  浮点类型是 0.0

  布尔类型是 false

  对于其他 Java 引用类型,默认值是null,这意味着引用类型的属性没有被分配任何值。

  后面可以用代码查看这些默认值。

  构造器分类

  在 Java 中,有三种类型的构造器:

  无参构造器

  有参构造器

  默认构造器

  无参构造器

  与方法类似,Java 构造函数可能有参数,也可能没有任何参数。如果构造函数不接受任何参数,则称为无参数构造器。例如上述代码中 ReLearnConstructor 构造器就是:

  
有参构造器

  字面理解,具有参数的构造函数称为有参数构造器。那为什么需要使用有参构造器?

  有参构造器可用于为不同对象提供不同初始化的值。例如:

  
ReLearnConstructor rc1 = new ReLearnConstructor("Java");

  ReLearnConstructor rc2 = new ReLearnConstructor("Go");

  ReLearnConstructor rc3 = new ReLearnConstructor("Python");

  }

 

 

  
public static void main(String[] args) {

  ReLearnConstructor rc = new ReLearnConstructor();

  System.out.println("默认值:");

  System.out.println("languages:" + rc.languages);

  System.out.println("a:" + rc.a);

  System.out.println("b:" + rc.b);

  System.out.println("c:" + rc.c);

  }

 

 

  
可以看到,我们还没有创建任何构造函数。因此,Java 编译器会自动创建默认构造函数。上述表格得以印证。

  原生方法和构造器的区别

  构造函数必须与在 Java 中定义的类具有相同的名称

  当方法没有返回任何值时,构造函数不会返回任何类型,而方法则具有返回类型或 void

  在对象创建时,仅调用构造函数一次,而方法可以被调用任何次数

  如果我们不用构造器来给属性赋值的话,可以先使用 new 运算符获取类的实例,并使用类的 setter 方法设置值,如下:

  
public String toString() {

   return Arrays.asList(name, String.valueOf(age)).toString();

   public void setName(String name) {

   this.name = name;

   public void setAge(int age) {

   this.age = age;

   // getters

  // Initialize an object in Java

  class Main

   public static void main(String[] args)

   Person person = new Person();

   person.setName("Yuzhou1su");

   person.setAge(22);

   System.out.println(person);

  }

 

 

  
public String toString() {

   return Arrays.asList(name, String.valueOf(age)).toString();

  class SimpleConstructor {

   public static void main(String[] args) {

   Person person = new Person("Yuzhou1su", 22);

   System.out.println(person);

  }

 

 

  
构造器重载

  与 Java 方法重载类似,我们也可以创建两个或多个具有不同参数的构造函数。这称为构造函数重载。

  
public static void main(String[] args) {

  ReLearnConstructor rc1 = new ReLearnConstructor();

  ReLearnConstructor rc2 = new ReLearnConstructor("Python");

  rc1.getName();

  rc2.getName();

  }

 

 

  
在上面的例子中,我们有两个构造函数:ReLearnConstructor() 和 ReLearnConstructor(String language)。在这里,两个构造函数都用不同的值初始化变量语言的值。根据创建对象时传递的参数,调用不同的构造函数,分配不同的值。

  运行结果:

  
拷贝构造器

  Java 中的拷贝构造方法是一种使用该类的一个对象构造另外一个对象的构造方法。

  复制构造函数是一种特殊构造函数,用于将新对象创建为现有对象的副本。它只需要一个参数,它将是同一类的另一个实例。我们可以使用 this() 语句从复制构造函数中显式调用另一个构造函数:

  
public static void main(String[] args) {

  ReLearnConstructor rc = new ReLearnConstructor("Python");

  ReLearnConstructor copyOfrc = new ReLearnConstructor(rc);

  rc.getName();

  copyOfrc.getName();

  }

 

 

  
当需要拷贝一个带有多个成员变量的复杂对象或者想构造已存在对象的深拷贝对象时非常有用。

  匿名内部类

  除了上文介绍的使用构造器的方法,另一种初始化对象的方法是使用“双大括号初始化”。这将创建一个匿名内部类,其中只有一个实例初始化程序。建议不要使用这种方法。

  
public String toString() {

   return Arrays.asList(name, String.valueOf(age)).toString();

   public void setName(String name) {

   this.name = name;

   public void setAge(int age) {

   this.age = age;

   // getters

  // Initialize an object in Java

  class Main

   public static void main(String[] args)

   // Anonymous class

   Person person = new Person() {{

   // Initializer block

   setName("Yuzhou1su");

   setAge(22);

   System.out.println(person);

  }

 

 

  
实例化对象时会隐式调用构造函数。

  创建构造函数的两条规则是:构造函数的名称应与类相同。Java 构造函数不能有返回类型。

  如果一个类没有构造函数,Java 编译器会在运行时自动创建一个默认构造函数。默认构造函数使用默认值初始化实例变量。例如 int 变量将被初始化为 0

  构造函数类型:

  无参构造器 - 不接受任何参数的构造函数参数化构造函数

  接受参数的构造器 - 接受参数的构造函数

  默认构造器 - 如果没有明确定义,Java 编译器会自动创建一个构造函数。

  构造函数不能被 abstract、static 或 final 修饰

  编译器会报如下错误:

  


Illegal modifier for the constructor in type ReLearnConstructor; only public, protected private are permitted

 

  以上就是一文了解 Java 中的构造器(java中构造器的写法)的详细内容,想要了解更多 一文了解 Java 中的构造器的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: