
Java 教程
- Java - 首頁
- Java - 概述
- Java - 歷史
- Java - 特性
- Java vs. C++
- JVM - Java虛擬機器
- Java - JDK vs JRE vs 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 - Process API改進
- Java - Stream 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 支援以下基本OOPs 概念:
- 類
- 物件
- 繼承
- 多型性
- 封裝
- 抽象
- 例項
- 方法
- 訊息傳遞
在本教程中,我們將學習 Java 類和物件,類的建立和物件的建立,訪問類方法等。
什麼是 Java 類?
一個類是一個藍圖,從中建立單個物件(或者,我們可以說類是物件型別的一種資料型別)。在 Java 中,一切都是與類和物件相關的。每個類都有其可以方法和屬性,可以透過物件訪問和操作。
例如,如果您想為學生建立一個類。在這種情況下,“學生”將是一個類,而學生記錄(如student1、student2 等)將是物件。
我們也可以認為類是一個工廠(使用者定義的藍圖)來生成物件。
Java 類的屬性
- 類不佔用任何記憶體位元組。
- 類就像一個現實世界中的實體,但它不是一個現實世界中的實體。它是一個藍圖,我們可以在其中指定功能。
- 類主要包含兩部分:方法和資料成員。
- 類也可以是巢狀類。
- 類遵循 OOPs 的所有規則,例如繼承、封裝、抽象等。
類變數的型別
類可以包含以下任何變數型別。
區域性變數 - 在方法、建構函式或塊內定義的變數稱為區域性變數。變數將在方法中宣告和初始化,並且當方法完成時變數將被銷燬。
例項變數 - 例項變數是類中的變數,但在任何方法之外。當類被例項化時,這些變數被初始化。例項變數可以從該特定類的任何方法、建構函式或塊中訪問。
類變數 - 類變數是在類中宣告的變數,在任何方法之外,使用 static 關鍵字。
建立(宣告)Java 類
要建立(宣告)一個類,需要使用訪問修飾符後跟class關鍵字和類名。
建立 Java 類的語法
使用以下語法在 Java 中建立(宣告)類
access_modifier class class_name{ data members; constructors; methods; ...; }
Java 類的示例
在這個例子中,我們建立了一個名為`Dog`的類。該類的屬性包括`breed`(品種)、`age`(年齡)和`color`(顏色)。類的方法包括`setBreed()`、`setAge()`、`setColor()`和`printDetails()`。
// Creating a Java class class Dog { // Declaring and initializing the attributes String breed; int age; String color; // methods to set breed, age, and color of the dog public void setBreed(String breed) { this.breed = breed; } public void setAge(int age) { this.age = age; } public void setColor(String color) { this.color = color; } // method to print all three values public void printDetails() { System.out.println("Dog detials:"); System.out.println(this.breed); System.out.println(this.age); System.out.println(this.color); } }
什麼是Java物件?
一個物件是類型別的一個變數,它是面向物件程式設計系統的一個基本組成部分。一個類擁有方法和資料成員(屬性),這些方法和資料成員可以透過物件訪問。因此,物件是類的例項。
如果我們考慮現實世界,我們可以發現我們周圍有很多物件,例如汽車、狗、人等等。所有這些物件都具有狀態和行為。
如果我們考慮一隻狗,那麼它的狀態是——名字、品種和顏色,而它的行為是——吠叫、搖尾巴和奔跑。
如果你將軟體物件與現實世界中的物件進行比較,它們具有非常相似的特徵。軟體物件也具有狀態和行為。軟體物件的狀態儲存在欄位中,行為透過方法體現。因此,在軟體開發中,方法操作物件的內部狀態,物件間的通訊透過方法完成。
建立(宣告)Java物件
如前所述,類為物件提供了藍圖。因此,基本上,物件是由類建立的。在Java中,`new`關鍵字用於建立新物件。
從類建立物件時,共有三個步驟:
宣告——宣告一個變數,該變數具有物件型別和變數名。
例項化——使用'new'關鍵字建立物件。
初始化——'new'關鍵字後跟對建構函式的呼叫。此呼叫初始化新物件。
建立Java物件的語法
考慮以下在Java中建立類物件的語法:
Class_name object_name = new Class_name([parameters]);
注意:引數是可選的,在使用類中的建構函式時可以使用。
建立Java物件的示例
在這個例子中,我們建立了一個名為`obj`的`Dog`類物件,並訪問其方法。
// Creating a Java class class Dog { // Declaring and initializing the attributes String breed; int age; String color; // methods to set breed, age, and color of the dog public void setBreed(String breed) { this.breed = breed; } public void setAge(int age) { this.age = age; } public void setColor(String color) { this.color = color; } // method to print all three values public void printDetails() { System.out.println("Dog detials:"); System.out.println(this.breed); System.out.println(this.age); System.out.println(this.color); } } public class Main { public static void main(String[] args) { // Creating an object of the class Dog Dog obj = new Dog(); // setting the attributes obj.setBreed("Golden Retriever"); obj.setAge(2); obj.setColor("Golden"); // Printing values obj.printDetails(); } }
輸出
Dog detials: Golden Retriever 2 Golden
訪問例項變數和方法
例項變數和方法透過建立的物件訪問。要訪問例項變數,完整的路徑如下:
/* First create an object */ ObjectReference = new Constructor(); /* Now call a variable as follows */ ObjectReference.variableName; /* Now you can call a class method as follows */ ObjectReference.MethodName();
示例
在這個例子中,我們建立了一個名為Puppy的類。在Puppy類的建構函式中,列印小狗的名字,以便在建立物件時列印其名字。添加了一個例項變數puppyAge,並使用getter/setter方法來操作年齡。在main方法中,使用new運算子建立一個物件。使用setAge()方法更新年齡,並使用getAge()列印年齡。
public class Puppy { int puppyAge; public Puppy(String name) { // This constructor has one parameter, <i>name</i>. System.out.println("Name chosen is :" + name ); } public void setAge( int age ) { puppyAge = age; } public int getAge( ) { System.out.println("Puppy's age is :" + puppyAge ); return puppyAge; } public static void main(String []args) { /* Object creation */ Puppy myPuppy = new Puppy( "tommy" ); /* Call class method to set puppy's age */ myPuppy.setAge( 2 ); /* Call another class method to get puppy's age */ myPuppy.getAge( ); /* You can access instance variable as follows as well */ System.out.println("Variable Value :" + myPuppy.puppyAge ); } }
輸出
如果我們編譯並執行上述程式,則會產生以下結果:
Name chosen is :tommy Puppy's age is :2 Variable Value :2
使用類和物件概念的規則
現在讓我們看看原始檔宣告規則(使用Java類和物件方法)。這些規則在原始檔中宣告類、匯入語句和包語句時至關重要。
每個原始檔只能包含一個公共類。
原始檔可以包含多個非公共類。
公共類名也應該與原始檔名相同,並在末尾附加.java。例如:類名為public class Employee{},則原始檔應為Employee.java。
如果類在包內定義,則包語句應為原始檔中的第一條語句。
如果存在匯入語句,則必須將它們寫在包語句和類宣告之間。如果沒有包語句,則匯入語句應為原始檔中的第一行。
匯入和包語句將應用於原始檔中存在的所有類。不可能對原始檔中的不同類宣告不同的匯入和/或包語句。
類具有多個訪問級別,並且存在不同型別的類;抽象類、最終類等。我們將在訪問修飾符章節中解釋所有這些。
除了上述型別的類之外,Java還有一些特殊的類,稱為內部類和匿名類。
更多關於Java類和物件的示例
示例1
Employee類有四個例項變數——姓名、年齡、職位和薪水。該類有一個顯式定義的建構函式,它接受一個引數。
import java.io.*; public class Employee { String name; int age; String designation; double salary; // This is the constructor of the class Employee public Employee(String name) { this.name = name; } // Assign the age of the Employee to the variable age. public void empAge(int empAge) { age = empAge; } /* Assign the designation to the variable designation.*/ public void empDesignation(String empDesig) { designation = empDesig; } /* Assign the salary to the variable salary.*/ public void empSalary(double empSalary) { salary = empSalary; } /* Print the Employee details */ public void printEmployee() { System.out.println("Name:"+ name ); System.out.println("Age:" + age ); System.out.println("Designation:" + designation ); System.out.println("Salary:" + salary); } }
如本教程前面所述,處理從main方法開始。因此,為了執行此Employee類,應該有一個main方法,並且應該建立物件。我們將為這些任務建立一個單獨的類。
示例2
以下是EmployeeTest類,它建立了Employee類的兩個例項,並呼叫每個物件的方法為每個變數賦值。
將以下程式碼儲存到EmployeeTest.java檔案中。
import java.io.*; public class EmployeeTest { public static void main(String args[]) { /* Create two objects using constructor */ Employee empOne = new Employee("James Smith"); Employee empTwo = new Employee("Mary Anne"); // Invoking methods for each object created empOne.empAge(26); empOne.empDesignation("Senior Software Engineer"); empOne.empSalary(1000); empOne.printEmployee(); empTwo.empAge(21); empTwo.empDesignation("Software Engineer"); empTwo.empSalary(500); empTwo.printEmployee(); } }
輸出
現在,編譯這兩個類,然後執行EmployeeTest以檢視以下結果:
C:\> javac Employee.java C:\> javac EmployeeTest.java C:\> java EmployeeTest Name:James Smith Age:26 Designation:Senior Software Engineer Salary:1000.0 Name:Mary Anne Age:21 Designation:Software Engineer Salary:500.0