有参构造与无参构造
1.1 构造方法
构造方法是一种特殊的方法,它是一个与类同名且返回值类型为同名类类型的方法。对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化。当类实例化一个对象时会自动调用构造方法。构造方法和其他方法一样也可以重载。
[修饰符] 类名(){ } |
构造方法根据是否有参数分为无参构造和有参构造
1.1.1 无参构造
无参构造方法就是构造方法没有任何参数。构造方法在创建对象(new Dog())调用,无参构造方法中一般用于给属性赋值默认值。
public class Dog{ String name; int health; int love; String strain; public Dog(){ System.out.println("构造方法"); health = 100; love = 0; } … }
如果开发中没有定义无参构造方法,jvm默认给类分配一个无参构造,形如
public Dog(){ }
|
1.1.2 有参构造
当构造/实例化一个对象时,可以向构造方法中传递参数,这样的构造方法称为有参构造。形如:
[修饰符] 类名(Type arg1,Type arg2,…){ // 初始化代码 } |
1.1.2.1 局部变量和成员变量优先级
如果在一个作用域中,局部变量和成员变量同名,局部变量的优先级更高。
1 public class Dog{ 2 3 4 5 String name; 6 7 int health; 8 9 int love; 10 11 String strain; 12 13 14 15 public Dog(String name,int health,int love,String strain){ 16 17 name = name; 18 19 health = health; 20 21 love = love; 22 23 strain = strain; 24 25 } 26 27 }
优化后
1 public class Dog{ 2 3 4 5 String name; 6 7 int health; 8 9 int love; 10 11 String strain; 12 13 14 15 /* 16 17 public Dog(){ 18 19 System.out.println("构造方法"); 20 21 health = 100; 22 23 love = 0; 24 25 } 26 27 */ 28 29 30 31 public Dog(String _name,int _health,int _love,String _strain){ 32 33 name = _name; 34 35 health = _health; 36 37 love = _love; 38 39 strain = _strain; 40 41 } 42 43 44 45 public void showInfo(){ 46 47 System.out.print("我的名字叫"+name); 48 49 System.out.print(",健康值"+health); 50 51 System.out.print(",亲密度"+love); 52 53 System.out.println(",我是一只"+strain); 54 55 } 56 57 }
有参构造和无参构造是方法重载关系。
1.1.2.2 有参构造常见问题
如果一个类提供了有参构造方法,jvm不在给类默认分配无参构造。
public class Dog{
String name; int health; int love; String strain;
/* public Dog(){ System.out.println("构造方法"); health = 100; love = 0; } */
public Dog(String _name,int _health,int _love,String _strain){ name = _name; health = _health; love = _love; strain = _strain; }
public void showInfo(){ System.out.print("我的名字叫"+name); System.out.print(",健康值"+health); System.out.print(",亲密度"+love); System.out.println(",我是一只"+strain); } } |
Dog dog = new Dog(); dog.name = name; dog.health = 100; dog.love = 0; dog.strain = strain; |
总结:
在开发过程中,如果开发者提供了有参构造方法,一定要习惯性的提供无参构造。