无参构造与有参构造
构造方法根据有无参数分为无参构造和有参构造
无参构造语句:
[修饰符] 类名(){
}
有参构造语句:
[修饰符] 类名(type a1,type a2...){
}
它俩构成了方法重载。
局部变量和成员变量的优先级问题:(如下述代码)
public class Dog{ String name;
public Dog(String name){
name=name;
}
}
此时标记的name是无法赋值给name的,因为局部变量的优先级高于成员变量,name只会找到name
name这种情况怎么解决呢?
第一种方法:
public class Dog{ String name; public Dog(String _name){ name=_name; } }
将这个形参里的属性名变化一下以示区分,此时name在局部变量里面找不到name就会去成员变量里面找。
第二种方法:
关键字 this(可用于访问对象本身的属性)
具体实例可跳到 this 环节。。。
有参构造中常见问题:
一般类里没声明构造的话,系统默认的是无参构造;
如果声明了有参构造,但是其它类传过来的数据类型或者属性个数都不匹配的话,那么系统就会报错,
此时咱们程序员就需要习惯性的两个构造都声明一下。
举例说明:(下述类的有参构造只构造了名字和品种,但是没有声明无参构造)
1 public class Dog{ 2 3 String name; 4 int health; 5 int love; 6 String strain; 7 8 /* 9 public Dog(){ 10 System.out.println("构造方法"); 11 health = 100; 12 love = 0; 13 } 14 */ 15 16 public Dog(String _name,String _strain){ 17 name = _name;20
strain = _strain; 21 } 22 23 public void showInfo(){ 24 System.out.print("我的名字叫"+name); 25 System.out.print(",健康值"+health); 26 System.out.print(",亲密度"+love); 27 System.out.println(",我是一只"+strain); 28 } 29 }
另一个类的属性赋值:
Dog dog = new Dog(); dog.name = name; dog.health = 100; dog.love = 0; dog.strain = strain;
9-13行代码就是解决方案。
***习惯性的两个构造都声明一下