
Java 教程
- Java - 首頁
- Java - 概述
- Java - 歷史
- Java - 特性
- Java 與 C++
- JVM - Java 虛擬機器
- Java - JDK 與 JRE 與 JVM
- Java - Hello World 程式
- Java - 環境搭建
- Java - 基本語法
- Java - 變數型別
- Java - 資料型別
- Java - 型別轉換
- Java - Unicode 系統
- Java - 基本運算子
- Java - 註釋
- Java - 使用者輸入
- Java - 日期和時間
Java 控制語句
- Java - 迴圈控制
- Java - 決策制定
- Java - If-else
- Java - Switch
- Java - For 迴圈
- Java - For-Each 迴圈
- Java - While 迴圈
- Java - do-while 迴圈
- Java - Break
- Java - Continue
面向物件程式設計
- Java - OOPs 概念
- Java - 物件和類
- Java - 類屬性
- Java - 類方法
- Java - 方法
- Java - 變數作用域
- Java - 構造方法
- Java - 訪問修飾符
- Java - 繼承
- Java - 聚合
- Java - 多型
- Java - 重寫
- Java - 方法過載
- Java - 動態繫結
- Java - 靜態繫結
- Java - 例項初始化塊
- Java - 抽象
- Java - 封裝
- Java - 介面
- Java - 包
- Java - 內部類
- Java - 靜態類
- Java - 匿名類
- Java - 單例類
- Java - 包裝類
- Java - 列舉
- Java - 列舉構造方法
- Java - 列舉字串
Java 內建類
Java 檔案處理
Java 錯誤和異常
- Java - 異常
- Java - try-catch 塊
- Java - try-with-resources
- Java - 多重 catch 塊
- Java - 巢狀 try 塊
- Java - Finally 塊
- Java - throw 異常
- Java - 異常傳播
- Java - 內建異常
- Java - 自定義異常
Java 多執行緒
- Java - 多執行緒
- Java - 執行緒生命週期
- Java - 建立執行緒
- Java - 啟動執行緒
- Java - 執行緒連線
- Java - 執行緒命名
- Java - 執行緒排程器
- Java - 執行緒池
- Java - 主執行緒
- Java - 執行緒優先順序
- Java - 守護執行緒
- Java - 執行緒組
- Java - 關閉鉤子
Java 同步
Java 網路程式設計
- Java - 網路程式設計
- Java - 套接字程式設計
- Java - URL 處理
- Java - URL 類
- Java - URLConnection 類
- Java - HttpURLConnection 類
- Java - Socket 類
- Java - 泛型
Java 集合
Java 介面
Java 資料結構
Java 集合演算法
高階 Java
- Java - 命令列引數
- Java - Lambda 表示式
- Java - 傳送郵件
- Java - Applet 基礎
- Java - Javadoc 註釋
- Java - 自動裝箱和拆箱
- Java - 檔案不匹配方法
- Java - REPL (JShell)
- Java - 多版本 Jar 檔案
- Java - 私有介面方法
- Java - 內部類菱形運算子
- Java - 多解析度影像 API
- Java - 集合工廠方法
- Java - 模組系統
- Java - Nashorn JavaScript
- Java - Optional 類
- Java - 方法引用
- Java - 函式式介面
- Java - 預設方法
- Java - Base64 編碼解碼
- Java - Switch 表示式
- Java - Teeing 收集器
- Java - 微基準測試
- Java - 文字塊
- Java - 動態 CDS 檔案
- Java - Z 垃圾收集器 (ZGC)
- Java - 空指標異常
- Java - 打包工具
- Java - 密封類
- Java - 記錄類
- Java - 隱藏類
- Java - 模式匹配
- Java - 簡潔數字格式化
- Java - 垃圾回收
- Java - JIT 編譯器
Java 雜項
- Java - 遞迴
- Java - 正則表示式
- Java - 序列化
- Java - 字串
- Java - 程序 API 改進
- Java - 流 API 改進
- Java - 增強的 @Deprecated 註解
- Java - CompletableFuture API 改進
- Java - 流
- Java - 日期時間 API
- Java 8 - 新特性
- Java 9 - 新特性
- Java 10 - 新特性
- Java 11 - 新特性
- Java 12 - 新特性
- Java 13 - 新特性
- Java 14 - 新特性
- Java 15 - 新特性
- Java 16 - 新特性
Java API 和框架
Java 類參考
- Java - Scanner
- Java - 陣列
- Java - 字串
- Java - Date
- Java - ArrayList
- Java - Vector
- Java - Stack
- Java - PriorityQueue
- Java - LinkedList
- Java - ArrayDeque
- Java - HashMap
- Java - LinkedHashMap
- Java - WeakHashMap
- Java - EnumMap
- Java - TreeMap
- Java - IdentityHashMap
- Java - HashSet
- Java - EnumSet
- Java - LinkedHashSet
- Java - TreeSet
- Java - BitSet
- Java - Dictionary
- Java - Hashtable
- Java - Properties
- Java - Collection
- Java - Array
Java 有用資源
Java - 構造方法
Java 構造方法
Java 構造方法是用於在建立物件時初始化該物件的特殊型別的方法。它與類名相同,並且在語法上類似於方法。但是,構造方法沒有顯式的返回型別。
通常,您將使用構造方法為類定義的例項變數提供初始值,或執行建立完整形成的物件所需的任何其他啟動過程。
所有類都具有構造方法,無論您是否定義了一個,因為 Java 自動提供一個預設構造方法,該構造方法將所有成員變數初始化為零。但是,一旦您定義了自己的構造方法,便不再使用預設構造方法。
建立 Java 構造方法的規則
在建立 Java 構造方法時,必須遵循以下規則
- 構造方法的名稱必須與類名相同。
- Java 構造方法沒有返回型別。甚至不要使用 void 作為返回型別。
- 同一個類中可以有多個構造方法,這個概念稱為構造方法過載。
- 可以使用訪問修飾符與構造方法一起使用,如果您想更改構造方法的可見性/可訪問性,請使用它們。
- Java 提供了一個在物件建立期間呼叫的預設構造方法。如果您建立任何型別的構造方法,則不會呼叫預設構造方法(由 Java 提供)。
建立 Java 構造方法
要在 Java 中建立構造方法,只需編寫構造方法的名稱(與類名相同),後跟括號,然後在花括號 ({}) 內編寫構造方法的主體。
語法
以下是構造方法的語法:
class ClassName { ClassName() { } }
建立 Java 構造方法的示例
以下示例建立了一個簡單的構造方法,它將列印“Hello world”。
public class Main { // Creating a constructor Main() { System.out.println("Hello, World!"); } public static void main(String[] args) { System.out.println("The main() method."); // Creating a class's object // that will invoke the constructor Main obj_x = new Main(); } }
此程式將列印
The main() method. Hello, World!
Java 構造方法的型別
Java 中有三種不同的構造方法型別,我們已將其列出如下
- 預設構造方法
- 無參構造方法
- 帶參構造方法

1. 預設構造方法
如果您沒有在類中建立任何構造方法,則 Java 會提供一個預設構造方法來初始化物件。
示例:預設構造方法(沒有構造方法的類)
在此示例中,我們沒有定義任何構造方法。預設構造方法用於初始化物件。
public class Main { int num1; int num2; public static void main(String[] args) { // We didn't created any structure // a default constructor will invoke here Main obj_x = new Main(); // Printing the values System.out.println("num1 : " + obj_x.num1); System.out.println("num2 : " + obj_x.num2); } }
輸出
num1 : 0 num2 : 0
2. 無參(無引數)構造方法
顧名思義,無引數構造方法不接受任何引數。透過使用無參構造方法,您可以初始化類資料成員並執行您希望在物件建立時執行的各種活動。
示例:無參構造方法
此示例建立了一個無參構造方法。
public class Main { int num1; int num2; // Creating no-args constructor Main() { num1 = -1; num2 = -1; } public static void main(String[] args) { // no-args constructor will invoke Main obj_x = new Main(); // Printing the values System.out.println("num1 : " + obj_x.num1); System.out.println("num2 : " + obj_x.num2); } }
輸出
num1 : -1 num2 : -1
3. 帶參構造方法
帶有一個或多個引數的構造方法稱為帶參構造方法。
大多數情況下,您將需要一個接受一個或多個引數的構造方法。引數以與新增到方法相同的方式新增到構造方法中,只需在構造方法名稱後的括號內宣告它們。
示例 1:帶參構造方法
此示例建立了一個帶參構造方法。
public class Main { int num1; int num2; // Creating parameterized constructor Main(int a, int b) { num1 = a; num2 = b; } public static void main(String[] args) { // Creating two objects by passing the values // to initialize the attributes. // parameterized constructor will invoke Main obj_x = new Main(10, 20); Main obj_y = new Main(100, 200); // Printing the objects values System.out.println("obj_x"); System.out.println("num1 : " + obj_x.num1); System.out.println("num2 : " + obj_x.num2); System.out.println("obj_y"); System.out.println("num1 : " + obj_y.num1); System.out.println("num2 : " + obj_y.num2); } }
輸出
obj_x num1 : 10 num2 : 20 obj_y num1 : 100 num2 : 200
示例 2:帶參構造方法
這是一個使用構造方法的簡單示例:
// A simple constructor. class MyClass { int x; // Following is the constructor MyClass(int i ) { x = i; } }
您可以按如下方式呼叫構造方法來初始化物件:
public class ConsDemo { public static void main(String args[]) { MyClass t1 = new MyClass( 10 ); MyClass t2 = new MyClass( 20 ); System.out.println(t1.x + " " + t2.x); } }
輸出
10 20
Java 中的構造方法過載
構造方法過載意味著一個類中的多個構造方法。當您有多個具有不同引數列表的構造方法時,則稱為構造方法過載。
示例:構造方法過載
在此示例中,我們有多個構造方法。
// Example of Java Constructor Overloading // Creating a Student Class class Student { String name; int age; // no-args constructor Student() { this.name = "Unknown"; this.age = 0; } // parameterized constructor having one parameter Student(String name) { this.name = name; this.age = 0; } // parameterized constructor having both parameters Student(String name, int age) { this.name = name; this.age = age; } public void printDetails() { System.out.println("Name : " + this.name); System.out.println("Age : " + this.age); } } public class Main { public static void main(String[] args) { Student std1 = new Student(); // invokes no-args constructor Student std2 = new Student("Jordan"); // invokes parameterized constructor Student std3 = new Student("Paxton", 25); // invokes parameterized constructor // Printing details System.out.println("std1..."); std1.printDetails(); System.out.println("std2..."); std2.printDetails(); System.out.println("std3..."); std3.printDetails(); } }
輸出
td1... Name : Unknown Age : 0 std2... Name : Jordan Age : 0 std3... Name : Paxton Age : 25
廣告