在本頁中,我們將瞭解 Java 對象和類。在面向對象的編程技術中,我們使用對象和類來設計程式。 Java中的對象既是物理實體又是邏輯實體,而Java中的類只是邏輯實體。 # 什麼是Java中的對象 具有狀態和行為的實體稱為對象,例如椅子、自行車、記號筆、筆、桌子、汽車等。它可以是物理的或邏輯的(有形 ...
在本頁中,我們將瞭解 Java 對象和類。在面向對象的編程技術中,我們使用對象和類來設計程式。
Java中的對象既是物理實體又是邏輯實體,而Java中的類只是邏輯實體。
什麼是Java中的對象
具有狀態和行為的實體稱為對象,例如椅子、自行車、記號筆、筆、桌子、汽車等。它可以是物理的或邏輯的(有形的和無形的)。無形對象的例子是銀行系統。
一個對象具有三個特征:
- 屬性:表示對象的數據(值)。
- 方法:表示一個對象的方法(功能),如存款、取款等。
- 身份:對象身份通常通過唯一 ID 實現。ID 的值對外部用戶不可見。但是,JVM 在內部使用它來唯一地標識每個對象。
例如,Pen 是一個對象。它的名字叫雷諾茲;顏色為白色,稱為它的狀態。它是用來寫的,所以寫就是它的行為。
對象是類的實例。類是創建對象的模板或藍圖。因此,對象是類的實例(結果)。
對象定義:
- 對象是現實世界中的實體。
- 對象是運行時實體。
- 對象是具有狀態和行為的實體。
- 該對象是一個類的實例。
Java中的類是什麼
類是一組具有共同屬性的對象。它是創建對象的模板或藍圖。它是一個邏輯實體。它不可能是物理的。
Java 中的類可以包含:
- 欄位
- 方法
- 構造器
- 嵌套類和介面
聲明類的語法:
class <class_name>{
field;
method;
}
Java 中的實例變數
在類內部但在方法外部創建的變數稱為實例變數。實例變數在編譯時不獲取記憶體。它在創建對象或實例時在運行時獲取記憶體。這就是為什麼它被稱為實例變數。
Java 中的方法
在 Java 中,方法就像一個函數,用於公開對象的行為。
方法優勢
- 代碼重用性
- 代碼優化
Java中的新關鍵字
new 關鍵字用於在運行時分配記憶體。所有對象都在堆記憶體區域中獲得記憶體。
對象和類示例:類中的 main
在這個例子中,我們創建了一個 Student 類,它有兩個數據成員 id 和 name。我們正在通過 new 關鍵字創建 Student 類的對象並列印對象的值。
在這裡,我們在類中創建一個 main() 方法。
文件:Student.java
//Java程式來說明如何定義一個類和欄位
//定義一個學生類
class Student{
//定義欄位
int id;//欄位或數據成員或實例變數
//在Student類中創建main方法
public static void main(String args[]){
//創建對象或實例
Student s1=new Student();//創建學生對象
//列印對象的值
System.out.println(s1.id);//通過引用變數訪問成員
System.out.println(s1.name);
}
}
輸出:
0
null
對象和類示例:類外的main
在實時開發中,我們創建類並從另一個類中使用它。這是一種比以前更好的方法。
讓我們看一個簡單的例子,我們在另一個類中有 main() 方法。
我們可以在不同的 Java 文件或單個 Java 文件中有多個類。如果在單個 Java 源文件中定義多個類,最好使用具有 main() 方法的類名來保存文件名。
文件:TestStudent1.java
//Java 程式來演示在其中有 main 方法
//另一個類
//創建學生類
class Student{
int id;
String name;
}
//創建另一個包含主要方法的類TestStudent1
class TestStudent1{
public static void main(String args[]){
Student s1=new Student();
System.out.println(s1.id);
System.out.println(s1.name);
}
}
輸出:
0
null
3種初始化對象的方法
在 Java 中有 3 種初始化對象的方法。
- 通過引用變數
- 按方法
- 通過構造函數
1)對象和類示例:通過引用初始化
初始化對象意味著將數據存儲到對象中。讓我們看一個簡單的例子,我們將通過引用變數初始化對象。
文件:TestStudent2.java
class Student{
int id;
String name;
}
class TestStudent2{
public static void main(String args[]){
Student s1=new Student();
s1.id=101;
s1.name="小明";
System.out.println(s1.id+" "+s1.name);//用空格列印成員
}
}
輸出:
101 小明
我們還可以創建多個對象,並通過引用變數將信息存儲在其中。
文件:TestStudent3.java
class Student{
int id;
String name;
}
class TestStudent3{
public static void main(String args[]){
//創建對象
Student s1=new Student();
Student s2=new Student();
//初始化對象
s1.id=101;
s1.name="小明";
s2.id=102;
s2.name="小華";
//Printing data
System.out.println(s1.id+" "+s1.name);
System.out.println(s2.id+" "+s2.name);
}
}
輸出:
101 小明
102 小華
2)對象和類示例:通過方法初始化
在此示例中,我們創建了 Student 類的兩個對象,並通過調用 insertRecord 方法將值初始化為這些對象。在這裡,我們通過調用 displayInformation() 方法來顯示對象的狀態(數據)。
文件:TestStudent4.java
class Student{
int rollno;
String name;
void insertRecord(int r, String n){
rollno=r;
name=n;
}
void displayInformation(){System.out.println(rollno+" "+name);}
}
class TestStudent4{
public static void main(String args[]){
Student s1=new Student();
Student s2=new Student();
s1.insertRecord(111,"小可");
s2.insertRecord(222,"小艾");
s1.displayInformation();
s2.displayInformation();
}
}
輸出:
111 小可
222 小艾
上圖可以看到,object獲取的是堆記憶體區的記憶體。引用變數是指分配在堆記憶體區的對象。這裡,s1 和 s2 都是引用變數,引用記憶體中分配的對象。
3) 對象和類示例:通過構造函數初始化
稍後我們將學習 Java 中的構造函數。
對象和類示例:員工
讓我們看一個維護員工記錄的例子。
文件:TestEmployee.java
class Employee{
int id;
String name;
float salary;
void insert(int i, String n, float s) {
id=i;
name=n;
salary=s;
}
void display(){System.out.println(id+" "+name+" "+salary);}
}
public class TestEmployee {
public static void main(String[] args) {
Employee e1=new Employee();
Employee e2=new Employee();
Employee e3=new Employee();
e1.insert(101,"A",45000);
e2.insert(102,"B",25000);
e3.insert(103,"C",55000);
e1.display();
e2.display();
e3.display();
}
}
輸出:
101 A 45000.0
102 B 25000.0
103 C 55000.0
對象和類示例:矩形
給出了另一個維護 Rectangle 類記錄的例子。
文件:TestRectangle1.java
class Rectangle{
int length;
int width;
void insert(int l, int w){
length=l;
width=w;
}
void calculateArea(){System.out.println(length*width);}
}
class TestRectangle1{
public static void main(String args[]){
Rectangle r1=new Rectangle();
Rectangle r2=new Rectangle();
r1.insert(11,5);
r2.insert(3,15);
r1.calculateArea();
r2.calculateArea();
}
}
輸出:
55
45
在 Java 中創建對象有哪些不同的方法?
java中創建對象的方法有很多種。他們是:
- 按新關鍵字
- 通過 newInstance() 方法
- 通過 clone() 方法
- 通過反序列化
- 通過工廠方法等
稍後我們將學習這些創建對象的方法。
匿名對象
匿名只是意味著無名。沒有引用的對象稱為匿名對象。它只能在創建對象時使用。
如果您只需要使用一個對象一次,那麼匿名對象是一個很好的方法。例如:
new Calculation();//匿名對象
通過引用調用方法:
Calculation c=new Calculation();
c.fact(5)
通過匿名對象調用方法
new Calculation().fact(5);
讓我們看看 Java 中匿名對象的完整示例。
class Calculation{
void fact(int n){
int fact=1;
for(int i=1;i<=n;i++){
fact=fact*i;
}
System.out.println("階乘為 "+fact);
}
public static void main(String args[]){
new Calculation().fact(5);//使用匿名對象調用方法
}
}
輸出:
階乘為 120
僅按一種類型創建多個對象
我們只能通過一種類型創建多個對象,就像我們在基元的情況下所做的那樣。
原始變數的初始化:
int a=10, b=20;
引用變數的初始化:
1、矩形 r1= new Rectangle(), r2= new Rectangle(); //創建兩個對象
Rectangle r1=new Rectangle(), r2=new Rectangle();//創建兩個對象
讓我們看看這個例子:
//Java程式來說明其中Rectangle類的使用
//有長度和寬度數據成員
class Rectangle{
int length;
int width;
void insert(int l,int w){
length=l;
width=w;
}
void calculateArea(){System.out.println(length*width);}
}
class TestRectangle2{
public static void main(String args[]){
Rectangle r1=new Rectangle(),r2=new Rectangle();//創建兩個對象
r1.insert(11,5);
r2.insert(3,15);
r1.calculateArea();
r2.calculateArea();
}
}
輸出:
55
45
真實世界的例子:賬戶
文件:TestAccount.java
//用於演示銀行系統工作的Java程式
//我們從我們的賬戶存入和提取金額的地方。
//創建一個具有 deposit() 和 withdraw() 方法的 Account 類
class Account{
int acc_no;
String name;
float amount;
//初始化對象的方法
void insert(int a,String n,float amt){
acc_no=a;
name=n;
amount=amt;
}
//存款方法
void deposit(float amt){
amount=amount+amt;
System.out.println(amt+" 存入");
}
//撤回方法
void withdraw(float amt){
if(amount<amt){
System.out.println("餘額不足");
}else{
amount=amount-amt;
System.out.println(amt+" 撤回");
}
}
//查詢賬戶餘額的方法
void checkBalance(){System.out.println("餘額為: "+amount);}
//顯示對象值的方法
void display(){System.out.println(acc_no+" "+name+" "+amount);}
}
//創建一個測試類來存取金額
class TestAccount{
public static void main(String[] args){
Account a1=new Account();
a1.insert(832345,"小安",1000);
a1.display();
a1.checkBalance();
a1.deposit(40000);
a1.checkBalance();
a1.withdraw(15000);
a1.checkBalance();
}}
輸出:
832345 小安 1000.0
餘額為:1000.0
40000.0 存入
餘額為:41000.0
15000.0 撤回
餘額為:26000.0