【构造方法】:https://baike.baidu.com/item/构造方法/10455265
构造方法是一种特殊的方法,它是一个与类同名且返回值类型为同名类类型的方法。对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化。当类实例化一个对象时会自动调用构造方法。构造方法和其他方法一样也可以重载。
构造方法是一种特殊的成员方法,它的特殊性反映在如下几个方面:
1.构造方法作用:(1).构造出来一个类的实例 (2).对构造出来个一个类的实例(对象)初始化。
2.构造方法的名字必须与定义他的类名完全相同,没有返回类型,甚至连void也没有。
3.主要完成对象的初始化工作,构造方法的调用是在创建一个对象时使用new操作进行的。
4.类中必定有构造方法,若不写,系统自动添加无参构造方法。接口不允许被实例化,所以接口中没有构造方法。
5.不能被static、final、synchronized、abstract和native修饰。
6.构造方法在初始化对象时自动执行,一般不能显式地直接调用.当同一个类存在多个构造方法时,java编译系统会自动按照初始化时最后面括号的参数个数以及参数类型来自动一一对应。完成构造函数的调用。
7.构造方法分为两种:无参构造方法 有参构造方法
构造方法可以被重载。没有参数的构造方法称为默认构造方法,与一般的方法一样,构造方法可以进行任何活动,但是经常将他设计为进行各种初始化活动,比如初始化对象的属性。
8.构造代码块:
(1)作用:给对象进行初始化,对象一建立就执行,而且优先于构造函数执行
(2)构造代码块和构造函数的区别:
构造代码块是给所有不同对象的共性进行统一初始化,构造函数是给对应的对象进行初始化
9.子类继承父类中,
***子类的实例化过程
***构造方法不能被子类继承
***子类创建对象时,会先去创建父类的对象。
默认是去调用父类的无参构造方法。
***子类构造方法中,第一行默认是super()
***为什么子类中第一行会默认有super()
因为他继承父类的成员使用,使用前这些成员必须初始化,
而他们是父类的成员,所以,必须通过父类进行初始化。
所以,会先创建一个父类的对象。
**当父类没有无参构造方法时
必须使用this或者super调用其他的构造方法。
10.自定义类中,如果不写构造方法,java系统会默认添加一个无参的构造方法。如果写了一个有参的构造方法,就一定要写无参构造方法。
如果想使用无参的构造方法,就必须手动给出无参构造方法。
建议:一般情况下,我们自定义的类都要手动给出无参构造方法。
【代码】-- 理解java构造方法:
构造方法作用:(1)构造出来一个类的实例 (2)对构造出来个一个类的实例(对象)初始化。
// 计算坐标点的距离 -- 理解java构造方法
public class java_basic_point {
// 成员变量,属性
int x;
int y;
// 默认无参构造器
public java_basic_point() {
System.out.println("默认构造");
}
// 有参构造1
public java_basic_point(int a, int b) {
System.out.println("有参数构造");
x = a;
y = b;
}
// 有参构造2(重载)
public java_basic_point(int a) {
this(a,a); // 调用上面的有参构造1
}
/*
* 点距离的计算公式
*/
// 点到原点的距离(无参)
public double distance() {
return Math.sqrt(Math.pow(this.x, 2) + Math.pow(this.y, 2));
}
// 到某个点的距离(参数为坐标点)
public double distance(int a, int b) {
return Math.sqrt(Math.pow(this.x-a, 2) + Math.pow(this.y-b, 2));
}
// (参数为点对象)
public double distance(java_basic_point p) {
return distance(p.x, p.y);
}
// 主函数
public static void main(String[] args) {
java_basic_point p1 = new java_basic_point(3, 2); // 实例化p1
System.out.println("P1的坐标是:" + p1.x + "," + p1.y);
java_basic_point p2 = new java_basic_point(5); //实例化p2
System.out.println("P2的坐标是:" + p2.x + "," + p2.y);
System.out.println("==============================");
java_basic_point p = new java_basic_point(6, 8); // 实例化p
System.out.println("距离原点的距离" + p.distance());
System.out.println("到给定点的距离" + p.distance(3, 3));
System.out.println("到某个点对象的距离" + p.distance(p1));
}
}
【输出】
有参数构造
P1的坐标是:3,2
有参数构造
P2的坐标是:5,5
==============================
有参数构造
距离原点的距离10.0
到给定点的距离5.830951894845301
到某个点对象的距离6.708203932499369