Java学习笔记之---构造方法
Java学习笔记之---构造方法
(一)构造方法的特性
- 构造方法不能被对象单独调用
- 构造方法与类同名且没有返回值
- 构造方法只能在对象实例化的时候被调用
- 当没有指定构造方法时,系统会自动添加无参的构造方法,当有指定的构造方法时,系统不会再自动添加无参的构造方法
- 一个类可以有多个构造函数
- 子类的构造默认调用父类的构造
- 虽然父类的构造方法不能被继承,不能被重写,但是会影响子类对象的实例化
- 子类默认调用父类的无参构造方法,可以通过super调用父类允许访问的其他构造方法
(二)构造方法
(1)带参构造方法
public 构造方法名(数据类型 形式参数1,数据类型 形式参数2){ }
public Animal(String name){ this.name=name; System.out.println("我是有参构造方法1"); } public Animal(String name,int age ){ this.name=name; this.age=age; System.out.println("我是有参构造方法2"); }
(2)无参构造方法
public 构造方法名(){ }
public Animal(){ System.out.println("我是无参构造方法"); }
(三)构造方法的调用
通过实例化对象来调用
class AnimalTest{ public static void main(String[] args){ Animal a=new Animal("aa",1); System.out.println(a.name); } }
(四)构造方法实例
public class Animal {
private String name;
int age;
{
System.out.println("我是构造代码块");
}
public Animal(){
System.out.println("我是无参构造方法");
}
public Animal(String name){
this.setName(name);
System.out.println("我是有参构造方法1");
}
public Animal(String name,int age ){
this.setName(name);
this.age=age;
System.out.println("我是有参构造方法2");
}
public void setName(String nmae){
this.name=name;
}
public String getName(){
return this.name;
}
}
class AnimalTest{
public static void main(String[] args){
Animal a=new Animal("aa",1);
System.out.println(a.getName+":"+a.age);
Animal b=new Animal("bb");
System.out.println(b.getName());
Animal c=new Animal(); } }
运行结果:
我是有参构造方法2
aa:1
我是有参构造方法1
bb
我是无参构造方法
(五)构造代码块
- 构造代码块在成员变量下面
- 构造代码块比构造方法先执行
public class Animal { String name; int age; { System.out.println("我是构造代码块"); } public Animal(){ System.out.println("我是无参构造方法"); } public Animal(String name){ this.name=name; System.out.println("我是有参构造方法1"); } public Animal(String name,int age ){ this.name=name; this.age=age; System.out.println("我是有参构造方法2"); } } class AnimalTest{ public static void main(String[] args){ Animal a=new Animal("aa",1); System.out.println(a.name+":"+a.age); Animal b=new Animal("bb"); System.out.println(b.name); Animal c=new Animal(); } }
运行结果:
我是构造代码块
我是有参构造方法2
aa:1
我是构造代码块
我是有参构造方法1
bb
我是构造代码块
我是无参构造方法