构 造 方 法
定义:对象创建时使用的方法,即在new一个新对象时,对应构造方法,直接对属性赋值。
语句格式: 修饰符(public 等) 构造方法名(必须跟当前类名一样,否则报错)(参数列表){
}
构造方法的体现:
(1)构造方法没有返回值类型,也不需要返回值。因为它是为成员变量赋值,赋值结束,方法随之执行结束。
(2)构造方法名称必须与类名保持一致
(3)构造方法没有具体的返回值
默认构造方法与细节:
默认构造方法:如果没有显示指定构造方法,编译会在编译时自动添加默认的构造方法,如果已经指定了构造方法,则不会再添加默认构造方法。
细节:
(1)一个类中可以有多个构造方法,多个重载方法是以重载的形式存在的。
(2)构造方法是可以被private修饰的,作用是其他类无法创建此方法的对象。
this关键词
构造方法之间的调用,可以通过this关键词来完成
构造方法调用格式:
this(参数列表);
成员变量和局部变量同名问题:
当在方法中出现了成员变量和局部变量重名的情况时,可以在成员变量前添加this.关键词来区分。
Super关键字
子父类中构造方法的调用:
在创建子类对象时,父类的构造方法会先执行,因为子类中所有构造方法的第一行有默认的隐式super();语句。
格式:
调用本类中的构造方法 this(实参列表); 调用父类中的空参数构造方法 super(); 调用父类中的有参数构造方法 super(实参列表);
当父类中没有空参数构造方法时,子类的构造方法必须有显示的super语句,指定要访问的父类有参数构造方法。
子类对象创建过程的细节:
(1)只要是构造方法,第一行都有默认的super();
(2)Java中,定义了一个所有类的父类:opject
注意:
类中的构造方法默认第一行都有隐式的super()语句,在访问父类中的空参数构造方法。所以父类的构造方法既可以给自己的对象初始化,也可以给自己的子类对象初始化。
如果默认的隐式super()语句在父类中没有对应的构造方法,那么必须在构造方法中通过this或者super的形式明确要调用的构造方法。
实例:
package com.oracel.demo01; public class Person { private int id; private String name; private int age; //系统会默认提供一个空参构造,当自己添加时会取消,若测试类中需要,需要自己手动添加 public Person(){ } //可以存在多个构造方法,以重载的形式存在
public Person(int id){
this.id=id;
} public Person(int id,String name,int age){ this(id); //使用this关键词,调用构造方法this.name=name; //接收参数,并且赋值 this.age=age; //使用this.关键词 来区分成员变量和局部变量 } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public boolean compare(Person p){ return this.age==p.age; } }
测试类:
package com.oracel.demo01; public class Test { public static void main(String[] args) { // TODO Auto-generated method stub //构造函数只能在创建对象(new)的时候赋值一次 //构造方法是给成员变量初始化的,但系统还是先赋默认值,然后再传参 Person p=new Person(1,"寒武",18); System.out.println(p.getId()+"..."+p.getName()+"..."+p.getAge()); } }