java中的构造方法是一种特殊的方法,用于初始化对象。java构造函数在对象创建时被调用。它构造值,即提供对象的数据。
构造函数基本上定义了两个规则。分别如下:
有两种类型的构造函数
< class_name>(){}
默认构造函数的示例:
在这个例子中,在Bike类中创建了无参数(no-arg)构造函数。它将在对象创建时被调用。
class Bike1{
Bike1(){
System.out.println("Bike is created");
}
public static void main(String args[]) {
Bike1 b = new Bike1();
}
默认构造函数的目的是根据类型为对象提供默认值,如:0,null等。
显示默认值的默认构造函数示例
class Student3 {
int id;
String 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();
}
}
在上面代码中我们并没有为其提供构造函数,但是我们在输出是会发现其是有值的,这就是在上面的类中,代码中并没有创建任何构造函数,但编译器自动提供了一个默认构造函数。默认构造函数分别为字段:id 和 name 分别提供了0和null值。
2.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, "Karan");
Student4 s2 = new Student4(222, "Aryan");
s1.display();
s2.display();
}
}
构造方法重载是Java中的一种技术,一个类可以有任何数量的参数列表不同的构造函数。编译器通过构造函数参数列表中的参数数量及其类型来区分这些构造函数。
示例:
class Student5 {
int id;
String name;
int age;
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, "Karan");
Student5 s2 = new Student5(222, "Aryan", 25);
s1.display();
s2.display();
}
}
在Java中没有复制构造函数。但是可以将一个对象的值复制到另一个中,就像C++中的复制构造函数,在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, "Karan");
Student6 s2 = new Student6(s1); //将上面的s1传入
s1.display();
s2.display();
}
}
将对象值分配给另一个对象
可以通过将对象值分配给另一个对象,将一个对象的值复制到另一个对象中。 在这种情况下,不需要创建构造函数。
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, "Karan");
Student7 s2 = new Student7();
s2.id = s1.id; //直接赋值
s2.name = s1.name; //同上
s1.display();
s2.display();
}
}
注意: