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