【Java編程教程】詳解Java 中的對象和類

来源:https://www.cnblogs.com/xw-01/archive/2023/07/20/17569673.html
-Advertisement-
Play Games

在本頁中,我們將瞭解 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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文重點介紹了京東零售電商業務在訂單逆向履約上面的最佳技術實踐,閱讀本文,讀者可以瞭解到整個快退平臺新系統設計的底層邏輯,也可以參考本文並結合實際場景,將方案應用在遺留債務系統改造、業務和技術建模中。 ...
  • # 1.打開文件 位於自動導入的模塊IO中,無需手動導入。 ``` f = open('D:\M\test.txt') ``` 若文件不存在,則報錯 ``` Traceback (most recent call last): File "d:\M\github\Python\Demo\t14.py ...
  • ```cpp #include #include #include #pragma comment( lib, "Winmm" ) static int counter = 0; static int64_t ticks_per_second; void __stdcall on_timer(HWN ...
  • 本系列博客將利用C++實現一系列數值演算法。數值演算法離不開矩陣,但是C++並未自帶矩陣這一對象,直接使用數組又會帶來諸多不便,因此我們需要做一些預備工作————編寫一個矩陣類,實現矩陣的基本功能。一般來說,讀者可以直接使用Eigen庫進行矩陣計算,從頭開始造輪子僅僅是為了滿足筆者個人的需要。 #一、成 ...
  • `PB`應用程式就是由許多共同協作完成特定任務的視窗組成的集合。 視窗在應用程式的開發工作中占有很大的比重,是非常重要的一個 `PB `對象 ### 一、視窗類型 ![視窗類型](https://img2023.cnblogs.com/blog/2381533/202307/2381533-2023 ...
  • 存在層次上 synchronized: Java的關鍵字,在jvm層面上 Lock: 是一個介面 鎖的釋放 synchronized: 1、以獲取鎖的線程執行完同步代碼,釋放鎖 2、線程執行發生異常,jvm會讓線程釋放鎖 Lock: 在finally中必須釋放鎖,不然容易造成線程死鎖 鎖的獲取 sy ...
  • # Spring 的依賴註入 @[toc] ## 每博一文案 ```tex "在千千萬萬個選擇里",我永遠選擇去做哪些我認為值得的事,我可能幹得很漂亮,也可能搞得一塌糊塗。 但沒關係,重要的是我為之努力過。”我們很難做好每件事,讓人生不留下任何遺憾,儘力而為就好“享受 生活的過程,接受結果。”人生是 ...
  • * Cobar(已經被淘汰沒使用了) * TDDL * 淘寶根據自己的業務特點開發了 TDDL (Taobao Distributed Data Layer) * 基於JDBC規範,沒有server,以client-jar的形式存在,引入項目即可使用 * 開源功能比較少,阿裡內部使用為主 * Myc ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...