一、构造方法java
定义:与类同名没有返回值的方法称为构造方法;ui
public class test1 {
private String name;
private int age;
public test1(){
}this
}对象
上面的test1()是默认构造方法,即便没有定义java虚拟机在运行的时候也会自动生成,继承
固然若是定义了重载的构造方法便不会自动生成;ip
构造方法的做用有两点1.经过构造方法创建一个对象;2.经过构造方法能够快速的赋初值;get
public class Main {
public static void main(String[] args) {
test1 t1=new test1();//new后面加上构造方法创建了一个对象
}
}虚拟机
而若是类中有其它属性的话能够有构造方法的重载:class
public test1(String name, int age) {
this.name = name;
this.age = age;
}test
利用重载的构造方法能够很快速的给对象赋初值,特别是对于private的属性,若是用getter和setter很不方便;
public static void main(String[] args) {
test1 t1=new test1();
test1 t2=new test1("bob", 18);
System.out.println(t1);
System.out.println(t2);
}
输出结果:
test1 [name=null, age=0]
test1 [name=bob, age=18]
t1没有赋初值全部它里面的值是系统设置的初值;
t2利用有参的构造方法,直接给属性设置了初值,很是的方便,就不用setter方法来一个个设置值;
2. this
谁调用指向谁,是指向调用的对象;
举例说明:
在上面的test1 类中加上如下fly()方法:
public void fly(){
System.out.println(this.name+"会飞");//this指向调用的对象
}
在运行中调用:
public static void main(String[] args) {
test1 t1=new test1();
test1 t2=new test1("bob", 18);
t1.fly();//方法中的this指向t1
t2.fly();//方法中的this指向t2
// System.out.println(t1);
// System.out.println(t2);
}
结果以下:
null会飞
bob会飞
另外this还须要注意的一点是用在构造方法中:
public test1(String name, int age) {
this();//在运行构造方法进行属性赋值前是必定会先调用无参数的构造方法
this.name = name;
this.age = age;
}
固然构造方法调用主要看this(参数列表)看圆括号里面的参数列表和哪个构造方法相同就执行哪个构造方法;
2. super:指向父类,调用父类的属性和方法;
其实使用起来和this关键字差很少;
public test1(){
super();
}
上面的super(()调用的是父类的构造方法,若是没有继承父类的话,那么它的父类是指向object(全部类的超类);
使用:suiper关键字加“ . ”能够访问父类能够访问的属性和方法,通常用于区分被子类重写了的方法;
使用this(参数列表)和super(参数列表)的构造方法注意事项:
a. 只可以位于构造方法的第一行;
b. 不能同时出如今一个构造方法中;
c. 老是会先访问完父类的构造方法在访问子类里面的构造方法;