Java入門姿勢【面向對象3】構造方法及其重載_方法的調用
上次我為大家寫出啦「定義類與創建對象_了解局部變量」,上篇文章代碼可能較多,如沒有了解透徹的話請打開下方文章在進行觀看一下哦!!
【Java入門姿勢【面向對象2】定義類與創建對象_了解局部變量】
這次我們來說一下:構造方法以及重載 的使用
學習教程推薦:
- 1.北京高淇Java300集(Java強烈推薦)
Java300集零基礎適合初學者視頻教程_Java300集零基礎教程_Java初學入門視頻基礎鞏固教程_Java語言入門到精通 - 2.JavaSE基礎全套-從零開始進階之大神(推薦)
【大力推薦】OOP面向對象Java基礎乾貨分享/JavaSE/面向對象編程/OOP程序設計_嗶哩嗶哩_bilibili - 3.Java全套課程-基礎必備課程
JAVA全套課程_Java入門_Java零基礎必備_Java編程課程_Java核心基礎_EasyUI_SSM整合框架_Redis_高並發—全套課程 - 4.Java常用類基礎實戰
【基礎夯實】Java常用類實戰基礎教程_Java八大常用類核心基礎_Java常用類基礎入門/Java包裝類/String類 - 5.Java基礎入門必備數學知識【數據結構與算法】(推薦)
Java基礎入門必學知識數據結構與算法_Java數據結構與算法基礎到進階/Java基礎入門進階/Java數據結構分析/Java數據結構常見問題_嗶哩嗶哩_bilibili - 6.Java面向對象編程_OOP基礎深入講解
Java面向對象編程重基礎深入講解_OOP面向對象Java基礎乾貨分享/JavaSE/面向對象編程/OOP程序設計 - 7.GOF23種設計模式-23中設計模式詳解課程
GOF23種設計模式講解_Java gof23種設計模式詳解課程_從單例到備忘錄模式 23種模式詳解
構造方法及其重載
一、構造方法
對於一個類來說,一般有三種常見的成員:屬性field、方法method、構造器constructor。這三種成員都可以定義零個或多個。
構造方法(constructor)也叫構造器,用於對象的初始化。構造器是一個創建對象時被自動調用的特殊方法,目的是對象的初始化。構造器的名稱應與類的名稱一致。Java通過new關鍵字來調用構造器,從而返回該類的實例,是一種特殊的方法。
聲明格式:
[修飾符] 類名(形參列表){
//n條語句
}
構造器4個要點:
- 構造器的方法名必須和類名一致!
- 構造器通過new關鍵字調用!!
- 構造器雖然有返回值,但是不能定義返回值類型(返回值的類型肯定是本類),不能在構造器里使用return返回某個值。
- 如果我們沒有定義構造器,則編譯器會自動定義一個無參的構造方法。如果已定義則編譯器不會自動添加!
- 構造方法也是方法,只不過有特殊的作用而已。與普通方法一樣,構造方法也可以重載。
示例一:定義計算機類並模擬其操作
示例代碼:
public class Computer {
//成員變量
private String cpu="Intel";//cpu
private String memory;//內存
private String mainBoard;//主板
private String keyBoard;//鍵盤
//構造方法
public Computer(){
System.out.println("--------Computer()--------");
cpu = "AMD";
}
public Computer(String cpu,String memory,
String mainBoard,String keyBoard){
this.cpu = cpu;
this.memory = memory;
this.mainBoard = mainBoard;
this.keyBoard = keyBoard;
}
// public Computer(String cpu1,String memory1,String mainBoard1,String keyBoard1){
// cpu = cpu1;
// memory = memory1;
// mainBoard = mainBoard1;
// keyBoard = keyBoard1;
// }
//成員方法
public void start(){
System.out.println("-------starting------");
}
public void close(){
System.out.println("------- closing----------");
}
public void show(){
System.out.println("cpu="+cpu+",memory="+memory+
",mainBoard="+mainBoard+",keyBoard"+keyBoard);
}
public static void main(String[] args) {
//購買一台電腦
Computer computer2 = new Computer();
// computer.cpu="酷睿"; omputer.memory="三星";
// computer.mainBoard="華碩"; computer.keyBoard="羅技";
Computer computer = new Computer("酷睿","三星","華碩","羅技");
//讓電腦運行
computer.start();
computer.show();
computer.close();
}
}
需要注意的地方:
1)對象的創建完全是由構造方法實現的嗎?
不完全是。構造方法是創建Java對象重要途徑,通過new關鍵字調用構造器時,構造器也確實返回了該類對象,但這個對象並不是完全由構造器負責創建的。創建一個對象分為如下四步:
1. 分配對象空間,並將對象成員變量初始化為0或空
2. 執行屬性值的顯示初始化
3. 執行構造方法
4. 返回對象的地址給相關的變量
2)如果方法構造中形參名與屬性名相同時,需要使用this關鍵字區分屬性與形參。
this.id 表示屬性 id; id 表示形參 id
二、對象數組
學習到這裡在前面我們已經學過數組了,但是數組元素都是基本數據類型或者String類型。學習了類和對象之後,可以定義數組的元素類型是更加複雜的引用引用數據類型,每個元素可以是一個具體的對象,稱為:對象數組。
沒有過的解釋,大傢伙直接上手敲一下代碼嘗試一下:
代碼示例:使用對象數組存儲多台計算機信息
public class TestArray {
public static void main(String[] args) {
//定義一個數組,存儲4個分數,並遍歷
int [] arr;
arr = new int[4];
arr[0] = 90;
arr[1] = 80;
arr[2] = 100;
arr[3] = 54;
for(int score : arr){ System.out.println(score); }
System.out.println("======================");
//定義一個數組,存儲4台計算機,並遍歷
//Computer [] arr2;
//arr2 = new Computer[4];
Computer [] arr2 = new Computer[4];
arr2[0] = new Computer("酷睿","三星","華碩","羅技");
arr2[1] = new Computer("Intel","金士頓","技嘉","雙飛燕");
arr2[2] = new Computer("AMD","三星","華碩","雙飛燕");
arr2[3] = new Computer("酷睿","金士頓","技嘉","羅技");
for (Computer computer:arr2){
// System.out.println(computer.toString());
computer.show();
}
}
}
大家也可以自己使用 對象數組存儲多個對象並輸出內容!!
方法的調用
方法調是Java開發中的基本操作。理解方法調用的內存分配過程,實參形參的傳遞過程非常必要。方法參數分為基本數據類型和引用數據類型兩種,傳遞參數有着實質的區別。
一、基本數據類型的方法調用
代碼示例參考:
public class Point {
int x;
int y;
}
public class TestRefArgs {
public static void main(String[] args) {
//定義兩個變量
Point p = new Point();
p.x = 10;
p.y = 20;
//輸出交換前兩個變量的值
System.out.println("交換前:p.x="+p.x+",p.y="+p.y);
//交換兩個變量的值
swap(p);
//輸出交換後兩個變量的值
System.out.println("交換後:p.x="+p.x+",p.y="+p.y);
}
public static void swap(Point p){
p = new Point();
int temp;
temp = p.x;
p.x = p.y;
p.y = temp;
}
}
二、引用數據類型的方法調用
代碼示例參考:
public class Point {
int x;
int y;
}
public class TestRefArgs {
public static void main(String[] args) {
//定義兩個變量
Point p = new Point();
p.x = 10;
p.y = 20;
//輸出交換前兩個變量的值
System.out.println("交換前:p.x="+p.x+",p.y="+p.y);
//交換兩個變量的值
swap(p);
//輸出交換後兩個變量的值
System.out.println("交換後:p.x="+p.x+",p.y="+p.y);
}
public static void swap(Point p){
p = new Point();
int temp;
temp = p.x;
p.x = p.y;
p.y = temp;
}
}
注意事項:基本數據類型的參數是值傳遞,引用數據類型的參數傳遞是引用(地址),本質上也是值傳遞。
三、this的使用
對象創建的過程和this的本質
構造方法是創建Java對象的重要途徑,通過new關鍵字調用構造器時,構造器也確實返回該類的對象,但這個對象並不是完全由構造器負責創建。創建一個對象分為如下四步:
1. 分配對象空間,並將對象成員變量初始化為0或空
2. 執行屬性值的顯示初始化
3. 執行構造方法
4. 返回對象的地址給相關的變量
this的本質就是「創建好的對象的地址」! 由於在構造方法調用前,對象已經創建。因此,在構造方法中也可以使用this代表「當前對象」 。
this最常的用法:
- 調用成員變量:如果成員變量和局部變量同名,this必須書寫,用來區分兩者;如果沒有同名的局部變量,this可以不寫
- 調用成員方法:這種情況下,this可以省略
- 調用構造方法:使用this關鍵字調用重載的構造方法,避免相同的初始化代碼。但只能在構造方法中用,並且必須位於構造方法的第一句。
- this不能用於static方法中。
代碼示例參考:this關鍵字的使用
public class Student {
//成員變量
private int sno;//學號
private String name;//姓名
private String sex;//性別
private double score;//分數
//構造方法
public Student(){
}
public Student(int sno,String name,String sex ){
this.sno = sno;
this.name = name;
this.sex = sex;
}
public Student(int sno,String name,String sex ,double score){
this(sno,name,sex);
//new Student(sno,name,sex);
// this.sno = sno;
// this.name = name;
// this.sex = sex;
this.score = score;
}
//成員方法
public void study(){
this.shout();
shout();
//System.out.println("好好學習,天天向上。add oil!!!");
System.out.println("在教室努力的學習中,代碼量一行行提升了.....");
}
public void shout(){
System.out.println("好好學習,天天向上。add oil!!!");
}
public void show(){
System.out.println(sno +" "+this.name+" "+sex+" "+this.score);
}
public static void main(String[] args) {
Student stu = new Student(7,"田七","男",77);
stu.study();
stu.shout();
stu.show();
//study();
Student stu2 = new Student();
}
}


