/**
* 聲明構(gòu)造方法的格式為 修飾符+當(dāng)前類的名稱(形參列表){語(yǔ)句塊}
* 構(gòu)造方法通過(guò)new 調(diào)用
* 構(gòu)造方法固定返回通過(guò)方法運(yùn)算后的對(duì)象 不能更改和定義返回值類型
* 沒(méi)有定義構(gòu)造方法的情況下默認(rèn)構(gòu)造方法為 類名稱(){} 兩個(gè)括號(hào)內(nèi)均為空值 在new調(diào)用時(shí)對(duì)對(duì)象進(jìn)行運(yùn)算 無(wú)更改 直接返回對(duì)象
*/
public class Point {
double x,y;
public void set(int a,int b){
x = a;
y = b;
}
public void print(){
System.out.println(“(“+x+”,”+y+”)”);
}
public static void main(String[] args) {
Point a = new Point();
//通過(guò)new調(diào)用構(gòu)造方法Point() 類中沒(méi)有手動(dòng)定義構(gòu)造方法,默認(rèn)方法中的(){}為空,只返回默認(rèn)的對(duì)象
//Point a 為引用類型 占用4字節(jié) a的4字節(jié)用來(lái)保存對(duì)象的地址
a.print();
a.set(3,5);
a.print();
}
}
class Point1 {
double x,y;
public Point1(double _x,double _y){
x = _x;
y = _y;
}
//手動(dòng)定義構(gòu)造方法 設(shè)定形參_x _y 用這兩個(gè)的值賦值給x y
public double getDistance(Point1 p){
//定義求距離的方法getDistance 返回double型的距離
//方法里()定義形參p p是Point1類的對(duì)象
double d = Math.sqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y));
//Math.sqrt開平方 百度搜索java開方運(yùn)算
//這里的x y為程序中實(shí)際使用調(diào)用命令來(lái)調(diào)用方法getDistance的那個(gè)對(duì)象的x y
//用實(shí)際對(duì)象的x y 和形參p的p.x p.y運(yùn)算
return d;
}
public static void main(String[] args) {
Point1 a = new Point1(3,5);
//new調(diào)用構(gòu)造方法 構(gòu)造方法內(nèi)(3,5)為實(shí)參 對(duì)應(yīng)(_x,_y)形參
//通過(guò)構(gòu)造方法 使對(duì)象的x,y初始化為3,5
//每次執(zhí)行方法 會(huì)在棧stack內(nèi)開辟一個(gè)棧幀 這里調(diào)用構(gòu)造方法 開辟了Point1()的棧幀
/*構(gòu)造方法為創(chuàng)建對(duì)象的第三步
創(chuàng)建對(duì)象第一步創(chuàng)建一個(gè)全默認(rèn)的對(duì)象 x y 全默認(rèn)值
第二步初始化xy 如果在類中定義了double x =7.0 第二步會(huì)將x從默認(rèn)0初始化為7.0
第三步調(diào)用構(gòu)造方法 調(diào)用時(shí)生成對(duì)象的地址this 將構(gòu)造方法的實(shí)參3,5賦值給對(duì)象的this.x this.y
因?yàn)闃?gòu)造方法中的x y 沒(méi)有特意指名別的對(duì)象 所以默認(rèn)x y 是指this.x this.y
即將3,5賦值給當(dāng)前正在構(gòu)造的對(duì)象
構(gòu)造方法執(zhí)行完畢后該方法的棧幀從棧stack內(nèi)消失
*/
System.out.println(a.x+”,”+a.y);
Point1 b = new Point1(5,6);
/*第一步 創(chuàng)建新的對(duì)象 對(duì)象的x y 全默認(rèn)值0
第二步 初始化 對(duì)象的x y 類中沒(méi)有進(jìn)行定義x=?y=? 所以跳過(guò)
第三步 調(diào)用構(gòu)造方法 在棧stack內(nèi)開辟Point1()的棧幀 將當(dāng)前正在構(gòu)造的對(duì)象的地址賦值給方法內(nèi)的this
根據(jù)實(shí)參(5,6)進(jìn)行運(yùn)算 構(gòu)造方法Point1的語(yǔ)句塊內(nèi)設(shè)定將5賦值給this.x 將6賦值給this.y
返回對(duì)象 構(gòu)造方法執(zhí)行完畢 棧幀從棧stack內(nèi)消失
第四步 將new的對(duì)象的地址賦值給引用類型b
*/
double d = a.getDistance(b);
//a為調(diào)用方法的主體 (b)為實(shí)參 b的5,6對(duì)應(yīng)Point1 p 形參的p.x,p.y
//即用主體a的3,5和實(shí)參b的5,6運(yùn)算
//調(diào)用getDistance()方法 在棧stack內(nèi)開辟一個(gè)棧幀 執(zhí)行完畢后消失
//主體a的地址賦值給方法的this
//運(yùn)算時(shí)使用 this.x this.y 和 b.x b.y
System.out.println(d);
}
//main方法結(jié)束 棧幀main()消失
}