查看原文
其他

【Java编程教程】详解Java 构造函数

点击关注👉 Java面试那些事儿 2023-09-01


在Java中,构造函数是类似于方法的代码块。它在创建类的实例时被调用。在调用构造函数时,对象的内存是在内存中分配的。


它是一种特殊类型的方法,用于初始化对象。


每次使用 new() 关键字创建对象时,至少会调用一个构造函数。


如果类中没有可用的构造函数,它会调用默认构造函数。在这种情况下,Java 编译器默认提供默认构造函数。


Java 中有两种类型的构造函数:无参数构造函数和参数化构造函数。


注意:它被称为构造函数,因为它在对象创建时构造值。没有必要为类编写构造函数。这是因为如果您的类没有默认构造函数,java 编译器会创建一个默认构造函数。


# 创建 Java 构造函数的规则


为构造函数定义了两个规则。


  1. 构造函数名必须与其类名相同

  2. 构造函数必须没有明确的返回类型

  3. Java 构造函数不能是抽象的、静态的、最终的和同步的


注意:我们可以在声明构造函数时使用访问修饰符。它控制对象的创建。换句话说,我们可以在 Java 中拥有 private、protected、public 或 default 构造函数。


# Java构造函数的类型


Java 中有两种类型的构造函数:


  1. 默认构造函数(无参数构造函数)

  2. 参数化构造函数


# Java 默认构造函数


当构造函数没有任何参数时,它被称为“默认构造函数”。


默认构造函数的语法:


<类名>(){}


默认构造函数示例


在此示例中,我们在 Bike 类中创建无参数构造函数。它将在对象创建时被调用。


//Java 程序创建并调用默认构造函数 class Bike1{ //创建默认构造函数 Bike1(){System.out.println("自行车已创建");} //主要方法 public static void main(String args[]){ //调用默认构造函数 Bike1 b=new Bike1(); } }


输出:

自行车已创建


规则:如果类中没有构造函数,编译器会自动创建一个默认构造函数。


专属福利

👉点击领取:651页Java面试题库


Q) 默认构造函数的目的是什么?


默认构造函数用于为对象提供默认值,如 0、null 等,具体取决于类型。


显示默认值的默认构造函数示例


//让我们看另一个默认构造函数的例子 //显示默认值 class Student3{ int id; String name; //显示id和name值的方法 void display(){System.out.println(id+" "+name);} public static void main(String args[]){ //创建对象 Student3 s1=new Student3(); Student3 s2=new Student3(); //显示对象的值 s1.display(); s2.display(); } }


输出:

0 null0 null


说明:在上面的类中,您没有创建任何构造函数,因此编译器为您提供了一个默认构造函数。这里 0 和 null 值由默认构造函数提供。


Java参数化构造函数


具有特定数量参数的构造函数称为参数化构造函数。


为什么要使用参数化构造函数?


参数化构造函数用于为不同的对象提供不同的值。但是,您也可以提供相同的值。


参数化构造函数示例


在此示例中,我们创建了具有两个参数的 Student 类的构造函数。我们可以在构造函数中有任意数量的参数。


//Java程序演示参数化构造函数的使用。class Student4{ int id; String name; //创建参数化构造函数 Student4(int i,String n){ id = i; name = n; } //显示值的方法 void display(){System.out.println(id+" "+name);} public static void main(String args[]){ //创建对象并传递值 Student4 s1 = new Student4(111,"小卡"); Student4 s2 = new Student4(222,"小安"); //调用方法显示对象的值 s1.display(); s2.display(); } }


输出:

111 小卡222 小安

# Java 中的构造函数重载


在 Java 中,构造函数就像一个方法,但没有返回类型。它也可以像 Java 方法一样被重载。


Java 中的构造函数重载是一种拥有多个具有不同参数列表的构造函数的技术。它们的排列方式使每个构造函数执行不同的任务。编译器根据列表中参数的数量及其类型来区分它们。


构造函数重载的例子


//Java程序重载构造函数 class Student5{ int id; String name; int age; //创建两个arg构造函 Student5(int i,String n){ id = i; name = n; } //创建三参数构造函数 Student5(int i,String n,int a){ id = i; name = n; age=a; } void display(){System.out.println(id+" "+name+" "+age);} public static void main(String args[]){ Student5 s1 = new Student5(111,"小卡"); Student5 s2 = new Student5(222,"小安",25); s1.display(); s2.display(); } }


输出:

111 小卡 null222 小安 25


# Java中构造函数和方法的区别


构造函数和方法之间存在许多差异。它们在下面给出。


Java构造函数方法
构造函数用于初始化对象的状态。方法用于暴露对象的行为。
构造函数不能有返回类型。方法必须有返回类型。
构造函数被隐式调用。该方法被显式调用。
如果类中没有任何构造函数,Java 编译器会提供默认构造函数。在任何情况下,编译器都不会提供该方法。
构造函数名必须与类名相同。方法名可能与类名相同,也可能不同。


# Java 复制构造函数


Java 中没有复制构造函数。但是,我们可以将值从一个对象复制到另一个对象,就像 C++ 中的复制构造函数一样。


在 Java 中有多种方法可以将一个对象的值复制到另一个对象中。他们是:


  • 通过构造函数

  • 通过将一个对象的值分配给另一个对象

  • 通过 Object 类的 clone() 方法


在此示例中,我们将使用 Java 构造函数将一个对象的值复制到另一个对象中。


//Java 程序将值从一个对象初始化为另一个对象。class Student6{ int id; String name; //初始化整数和字符串的构造函数 Student6(int i,String n){ id = i; name = n; } //构造函数来初始化另一个对象 Student6(Student6 s){ id = s.id; name =s.name; } void display(){System.out.println(id+" "+name);} public static void main(String args[]){ Student6 s1 = new Student6(111,"小卡"); Student6 s2 = new Student6(s1); s1.display(); s2.display(); } }


输出:

111小卡111小卡


# 在没有构造函数的情况下复制值


我们可以通过将一个对象的值分配给另一个对象来将一个对象的值复制到另一个对象中。在这种情况下,无需创建构造函数。


class Student7{ int id; String name; Student7(int i,String n){ id = i; name = n; } Student7(){} void display(){System.out.println(id+" "+name);} public static void main(String args[]){ Student7 s1 = new Student7(111,"小卡"); Student7 s2 = new Student7(); s2.id=s1.id; s2.name=s1.name; s1.display(); s2.display(); } }


输出:

111小卡111小卡


问)构造函数是否返回任何值?


是的,它是当前的类实例(你不能使用返回类型但它返回一个值)。


构造函数可以执行其他任务而不是初始化吗?


是的,像创建对象、启动线程、调用方法等。您可以像在方法中执行操作一样在构造函数中执行任何操作。


Java中有构造函数类吗?


有的。


Constructor类的目的是什么?


Java提供了一个Constructor类,可以用来获取类中构造函数的内部信息。它位于 java.lang.reflect 包中。



程序员技术交流群


扫码进群记得备注:城市、昵称和技术方向


热门推荐:


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存