构造方法(构造器 constructor)
它只是用于指明对象的初始化,而不是创造对象。
在每一个类创建完,编译器都会自动做一个无参的构造方法(没有显示出来),因为做了这个,所以new才能自动创建对象。
创建对象的4步:
第一步:很简单,创建类时,成员的初始值都为0
比如 :public class Student{
int id;
int age;
}
最开始的id,就为0
第二步:显式初始化。
比如 :public class Student{
int id =1;
int age;
}
最开始id仍是0,然后将它改为1.
第三步:执行构造方法
比如 :public class Student{
int id =1;
int age;
}
如果我不自定义构造方法,编译器也自定了一个无参的构造方法 Student(),以便后续创造对象实例。
比如 s1= new Student();
如果我自定义一个构造方法:
Student (int a, int b){
id= int a;
age = int b;}
那么后续创造对象时,就要使用这个格式。
第四步:返回对象的地址给相关变量,这句话就是指:s1= new Student();即定义完后返回给s1.
注意,对象构造方法,与前面章节学的方法是完全不同的两件事!不要混淆了!
理解完下面的代码,也就明白了上面的意思:
public class Point { //创建一个名叫Point的类或者表
double x,y;//类的两个属性或者表的两个列
Point(double _x,double _y) {
x = _x;
y = _y;
} //因为这里定义了一个带参的对象构造方法,所以编译器虽默认自带但不显示的对象构造方法Point()就不起作用。
//注意,对象构造方法,与前面学的方法是完全不同的两件事!不要混淆了!
public double getDistance(Point p) {
return Math.sqrt((x - p.x) * (x - p.x) + (y - p.y) * (y - p.y));
} //这里是定义一个方法(也是就一个函数)将其值返回给函数名;函数的形参是一个名叫p的Point类的对象
//而根据上面定义的对象构造方法,这个名叫p的对象,使用时需要两个实参分别给p.x和p.y
public static void main(String[] args){
Point p1 = new Point(3.0,4.0);
Point origin = new Point(0.0,0.0);
System.out.println(p1.getDistance(origin));
//p1本身有坐标值,它的方法属性列又通过origin传递实参给了形参point p,这样,整个Math.sqrt所需要的值就都有了。
//相当巧妙啊!
System.out.println(origin.getDistance(origin));
}
}
Point p 定义了一个临时的对象
x | y | getDistance | |
p1 | 3 | 4 | |
origin | 0 | 0 | |
p |