1. 程式人生 > 其它 >面向物件程式設計----構造方法

面向物件程式設計----構造方法

構造器

構造器又稱為構造方法constructor

類裡面只有屬性跟方法!構造方法也是方法它有幾個特殊的地方:

用於構造該類的例項,(物件)別的事不做

構造器用於構造該類的例項。

格式如下:

[修飾符] 類名 (形參列表){

//n條語句

} 

是一種特殊的方法:

1.通過new關鍵字呼叫!!

2.構造器雖然有返回值,但是不能定義返回型別(返回值的型別肯定是本類),不能在構造器立呼叫return

3.如果我們沒有定義構造器,則系統會自動定義一個無參的建構函式。如果已定義則編譯器不會新增!

4.構造器的方法名必須和類在一

5.作用:構造該類的物件,經常也用來初始化物件的屬性

定義一個“點”(

Point)類用來表示三維空間中的點(有三個座標)。要求如下:

--可以生成具有特定座標的點物件。

--提供可以設定三個座標的方法。 

package cn.Test.oop;

public class Car {
int speed;
// 第一寫修飾符,完了寫Car構造器的方法名必須和類在一致。
// 本質上有返回值,必然是返回建立好的物件,什麼都不用寫
// 構造器雖然有返回值,
// 但是不能定義返回型別(返回值的型別肯定是本類),
// 不能在構造器裡呼叫return。
// 如果我們沒有定義構造器,
// 則系統會自動定義一個無參的建構函式。
// 如果已定義則編譯器不會新增!
// 除了幫助我們構造一個物件,還用來幫助我們初始化屬性


  public Car() {
  System.out.println("說明構造器被呼叫了");
  }
}

package cn.Test.oop;
/**
* 測試構造方法
* @author 神奇的夢
*
*/
public class TestConstructor {
  public static void main(String[] args) {
  // 方法需要物件來呼叫可是對 用方法的時候物件都沒有
  // 所以通過new來直接呼叫構造器
  Car c=new Car();
  }
}

package cn.Test.oop;

public class Point {
double x,y,z;
// 通過構造器初始化物件的屬性


// 這樣做的好處是:
// 你自己加了構造器編譯器就不會給你加無參構造器

作用:構造該類的物件,經常也用來初始化物件的屬性

public Point(double _x,double _y,double _z) {
x=_x;
y=_y;
z=_z;
}
測試的時候,建一個點就比較簡單了
public void setX(double _x) {
x=_x;
}
public void setY(double _y) {
y=_y;
}
public void setZ(double _z) {
z=_z;
}

// 方法有輸入有輸出返回一個功能塊
// 另外一個點可以作為一個形參傳進來Point pxx

提供可以計算該“點”距另外點距離的方法。
public double distance(Point pxx) {
// Math.sqrt()是開方類,記得加括號把整體括起來,不然就超double表述範圍了
double resulta = Math.sqrt((x-pxx.x)*(x-pxx.x)+(y-pxx.y)*(y-pxx.y)+(z-pxx.z)*(z-pxx.z));
return resulta;
}
// Point是 點 的意思
// The constructor Point() is undefined
// 建構函式Point()未定義
public static void main(String[] args) {
// 你自己加了構造器編譯器就不會給你加無參構造器
// Point p = new Point();
// 怎麼解決呢!  直接傳參
Point p = new Point(3,4,8);
Point p2 = new Point(200,40,80);

使用p.setX()方法把p.x的值改為5
p.setX(5);
System.out.println(p.x);

// 指p到p2的距離p.distance(p2)
p.distance(p2);
System.out.println(p.distance(p2));
double xss=-12*-12;
System.out.println(xss);
  }
}