国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

一文讀懂java變量類型

這篇具有很好參考價值的文章主要介紹了一文讀懂java變量類型。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

前言

在學(xué)習(xí)和使用Java編程語言時,理解變量類型是至關(guān)重要的基礎(chǔ)知識。Java是一種靜態(tài)類型語言,強(qiáng)調(diào)變量必須先聲明其類型,才能進(jìn)行后續(xù)操作。因此,對于初學(xué)者來說,了解Java中不同的變量類型及其特性是邁向編程成功的第一步。

本文旨在幫助大家快速、簡潔地了解Java的變量類型,從而提升對編程語言的理解和應(yīng)用能力。無論您是初學(xué)者還是有一定經(jīng)驗的開發(fā)者,我相信這篇文章將對您有所幫助。

在接下來的內(nèi)容中,我將全面涵蓋Java中的基本數(shù)據(jù)類型、引用數(shù)據(jù)類型以及如何聲明和使用不同類型的變量。通過清晰的說明、實例代碼和有趣的示意圖,我將簡化復(fù)雜的概念,使小伙伴們能夠輕松掌握并運(yùn)用Java的各種變量類型。

有哪些變量類型?

按照訪問權(quán)限劃分:

  • 局部變量:只在其所在的范圍內(nèi)有效
    1. 方法中的局部變量
  public void exampleMethod() {
      int num = 10; // 在方法內(nèi)部聲明并初始化局部變量num
      System.out.println(num); // 輸出結(jié)果為10
  }
  1. 構(gòu)造函數(shù)中的局部變量
 public class ExampleClass {
     public ExampleClass() {
         int num = 20; // 在構(gòu)造函數(shù)內(nèi)部聲明并初始化局部變量num
         System.out.println(num); // 輸出結(jié)果為20
     }
 }
  1. 代碼塊中的局部變量
 public void exampleMethod() {
     {
         int num = 30; // 在代碼塊內(nèi)部聲明并初始化局部變量num
         System.out.println(num); // 輸出結(jié)果為30
     }
 }
  1. for循環(huán)中的局部變量
 public void exampleMethod() {
     for (int i = 0; i < 5; i++) {
         int num = i; // 在for循環(huán)內(nèi)部聲明并初始化局部變量num
         System.out.println(num); // 輸出結(jié)果依次為0, 1, 2, 3, 4
     }
 }
  • 類變量:用關(guān)鍵字 static 在類中定義的變量,被所有對象共享,也稱為靜態(tài)變量
    1. 類方法中的類變量
 public class ExampleClass {
     private static int count; // 在類中聲明類變量count
 
     public static void incrementCount() {
         count++; // 在類方法中使用類變量count
     }
 
     public static void main(String[] args) {
         incrementCount(); // 調(diào)用類方法修改類變量count
         System.out.println(count); // 輸出結(jié)果為1
     }
 }
  1. 構(gòu)造函數(shù)中的類變量
 public class ExampleClass {
     private static int count; // 在類中聲明類變量count
 
     public ExampleClass() {
         count++; // 在構(gòu)造函數(shù)中使用類變量count
     }
 
     public static void main(String[] args) {
         ExampleClass obj1 = new ExampleClass(); // 創(chuàng)建對象實例,調(diào)用構(gòu)造函數(shù)
         ExampleClass obj2 = new ExampleClass(); // 創(chuàng)建另一個對象實例,調(diào)用構(gòu)造函數(shù)
         
         System.out.println(count); // 輸出結(jié)果為2,因為兩次構(gòu)造函數(shù)調(diào)用都修改了類變量count
     }
 }
 
  • 實例變量: 在類中定義的變量,每個對象都有自己的一份
    1. 在實例方法中使用實例變量
  public class ExampleClass {
      private int count; // 在類中聲明實例變量count
  
      public void incrementCount() {
          count++; // 在實例方法中使用實例變量count
      }
  
      public static void main(String[] args) {
          ExampleClass obj = new ExampleClass(); // 創(chuàng)建對象實例
          obj.incrementCount(); // 調(diào)用實例方法修改實例變量count
          System.out.println(obj.count); // 輸出結(jié)果為1,訪問對象實例的實例變量count
      }
  }
  1. 構(gòu)造函數(shù)中的實例變量
 public class ExampleClass {
     private int count; // 在類中聲明實例變量count
 
     public ExampleClass() {
         count = 10; // 在構(gòu)造函數(shù)中初始化實例變量count
     }
 
     public static void main(String[] args) {
         ExampleClass obj = new ExampleClass(); // 創(chuàng)建對象實例
         System.out.println(obj.count); // 輸出結(jié)果為10,訪問對象實例的實例變量count
     }
 }
  • 被 final 關(guān)鍵字 修飾的變量: 當(dāng)一個變量被 final 修飾時,它表示該變量是一個常量,一旦賦值后就不能再改變 ,因此final 修飾符可以用于實例變量、局部變量和方法參數(shù),但無法用于類(因為類無法被繼承)。
    1. final實例變量
 public class ExampleClass {
     private final int count; // 聲明一個 final 實例變量
 
     public ExampleClass() {
         count = 10; // 在構(gòu)造函數(shù)中為 final 實例變量賦值
     }
 
     public static void main(String[] args) {
         ExampleClass obj = new ExampleClass(); // 創(chuàng)建對象實例
         // obj.count = 20; // 錯誤!無法修改 final 實例變量的值
         System.out.println(obj.count); // 輸出結(jié)果為10
     }
 }
  1. final 局部變量
 public class ExampleClass {
     public static void main(String[] args) {
         final int number = 5; // 聲明一個 final 局部變量
         // number = 10; // 錯誤!無法修改 final 局部變量的值
         System.out.println(number); // 輸出結(jié)果為5
     }
 }

常規(guī)分類

  • 基本數(shù)據(jù)類型
    • 整數(shù)類型:byte、short、int、long
    • 浮點(diǎn)數(shù)類型:float、double
    • 字符類型:char
    • 布爾類型:boolean
  • 引用數(shù)據(jù)類型
    • 類:使用關(guān)鍵字 class 定義的自定義類型。
    • 接口:使用關(guān)鍵字 interface 定義的接口類型。
    • 數(shù)組:使用關(guān)鍵字 [] 創(chuàng)建的一組具有相同類型的數(shù)據(jù)元素。
  • 特殊類型
    • null 類型:表示變量不引用任何對象。
    • void 類型:表示方法沒有返回值。

如何聲明和使用

整數(shù)類型:

javaCopy Codebyte byteVariable = 127;
short shortVariable = 32767;
int intVariable = 2147483647;
long longVariable = 9223372036854775807L; // 注意:long類型的值后面需要加上"L"表示長整型

System.out.println(byteVariable);
System.out.println(shortVariable);
System.out.println(intVariable);
System.out.println(longVariable);

浮點(diǎn)數(shù)類型:

javaCopy Codefloat floatVariable = 3.14f; // 注意:float類型的值后面需要加上"f"表示單精度浮點(diǎn)數(shù)
double doubleVariable = 3.1415926535;

System.out.println(floatVariable);
System.out.println(doubleVariable);

字符類型:

javaCopy Codechar charVariable = 'A';
String stringVariable = "Hello";

System.out.println(charVariable);
System.out.println(stringVariable);

布爾類型:

javaCopy Codeboolean booleanVariable = true;

System.out.println(booleanVariable);

引用數(shù)據(jù)類型(類、接口、數(shù)組):

javaCopy Codeclass MyClass {
    // 類定義
}

interface MyInterface {
    // 接口定義
}

int[] intArray = {1, 2, 3, 4, 5}; // 創(chuàng)建一個整數(shù)類型的數(shù)組

MyClass myObject = new MyClass(); // 創(chuàng)建一個類的實例

MyInterface myInterface = new MyInterface() {
    // 匿名內(nèi)部類實現(xiàn)接口
};

特殊類型:

javaCopy CodeObject nullObject = null; // null類型

void myVoidMethod() {
    // void類型方法,無返回值
}

初始化位置、作用范圍

+---------------+-------------+-------------------+-----------------+
|   變量類型     | 初始化位置   |      作用范圍      |    變量類型      |
+---------------+-------------+-------------------+-----------------+
|  局部變量      | 方法、構(gòu)造   |   聲明所在的方法    | 基本類型或引用   |
|               | 函數(shù)或代碼   |   或代碼塊中可見    | 類型            |
|               | 塊          |                   |                 |
+---------------+-------------+-------------------+-----------------+
|  類變量        | 類中聲明     | 所有方法、構(gòu)造函數(shù)  | 基本類型或引用   |
|               |             | 和代碼塊都可訪問    | 類型            |
|               |             |                   |                 |
+---------------+-------------+-------------------+-----------------+
|  final 變量   | 聲明或構(gòu)造    | 與上下文相關(guān)       | 基本類型或引用    |
|               | 函數(shù)中初始化  |                  | 類型             |
+---------------+-------------+-------------------+-----------------+
|  實例變量      | 類中聲明     | 對象實例可訪問      | 基本類型或引用   |
|               |             |                   | 類型            |
+---------------+-------------+-------------------+-----------------+

他們的相同點(diǎn)和不同點(diǎn)

相同點(diǎn)

  1. 聲明位置:

    • 局部變量、類變量、final 修飾的變量和實例變量都是在類的內(nèi)部進(jìn)行聲明。
    • 它們都需要指定變量的類型和名稱。
  2. 訪問修飾符:

    • 局部變量、類變量、final 修飾的變量和實例變量都可以使用訪問修飾符來限制對其的訪問(例如,public、private、protected)。
  3. 變量類型:局部變量、類變量、final 修飾的變量和實例變量可以是任何基本類型或引用類型。

    不同點(diǎn)

    1. 初始化位置:
      • 局部變量:在方法、構(gòu)造函數(shù)或代碼塊中聲明,并且在使用前進(jìn)行初始化。
      • 類變量:在類中聲明,可以在聲明時初始化或在靜態(tài)代碼塊中初始化。
      • final 修飾的變量:可以在聲明時初始化或在構(gòu)造函數(shù)中初始化。
      • 實例變量:在類中聲明,可以在聲明時初始化或在構(gòu)造函數(shù)中初始化。
    2. 作用范圍:
      • 局部變量:只在其所在的方法、構(gòu)造函數(shù)或代碼塊中可見。
      • 類變量:整個類中的所有方法、構(gòu)造函數(shù)和代碼塊都可以訪問類變量。
      • final 修飾的變量:與其它變量類型類似,作用范圍取決于其所在的上下文。
      • 實例變量:每個類的實例(對象)都有自己的實例變量副本,只能通過對象進(jìn)行訪問。

總結(jié)

局部變量、類變量、被 final 關(guān)鍵字修飾的變量和實例變量在初始化位置和作用范圍上有所不同。

  • 它們都是在類的內(nèi)部進(jìn)行聲明,并且可以使用訪問修飾符來限制對其的訪問。

  • 變量類型可以是任何基本類型或引用類型。

    變量之間的 持久性和作用范圍的 大小關(guān)系(final可以是局部變量、實例變量或類變量 這里不做比較)

一文讀懂java變量類型,java學(xué)習(xí),平時學(xué)習(xí)記錄,java,python,開發(fā)語言

按作用范圍從小到大排序,可以按照以下順序:

  1. 局部變量:局部變量的作用范圍限制在聲明它的方法、構(gòu)造函數(shù)或代碼塊內(nèi)部。它們只能在聲明所在的范圍內(nèi)使用,超出范圍后就無法訪問。
  2. 實例變量:實例變量是定義在類中、方法之外的變量。每個類的實例都擁有自己的實例變量副本,在整個類的所有成員方法中都可以訪問和修改這些變量。
  3. 類變量(靜態(tài)變量):類變量屬于整個類而不是特定的實例。它們在類加載時被初始化,并且在整個類的所有實例之間共享相同的值。類變量可以通過類名直接訪問。

按持久性從小到大分類變量可以按照以下順序:

  1. 局部變量:局部變量的生命周期僅限于包含它們的方法、構(gòu)造函數(shù)或代碼塊的執(zhí)行過程。當(dāng)方法執(zhí)行完畢或代碼塊結(jié)束時,局部變量將被銷毀。
  2. 實例變量:實例變量屬于類的實例,并且在創(chuàng)建對象時被初始化。它們在對象被銷毀之前一直存在,即對象存在,實例變量也存在。
  3. 類變量(靜態(tài)變量):類變量屬于整個類而不是特定的實例。它們在類加載時被初始化,且在整個程序運(yùn)行期間都存在。即使沒有創(chuàng)建類的實例,類變量也可以被訪問。

與線程安全相關(guān)知識點(diǎn)

  • static 變量
    當(dāng)多個線程同時訪問和修改類變量時,可能會出現(xiàn)以下線程安全問題:

    1. 競態(tài)條件(Race Condition):如果多個線程同時對類變量進(jìn)行寫操作或讀寫操作,可能導(dǎo)致不可預(yù)測的結(jié)果。例如,一個線程正在修改類變量的值,而另一個線程同時在讀取該變量的值,可能導(dǎo)致讀取到不一致或過時的數(shù)據(jù)。
    2. 內(nèi)存可見性問題(Visibility Problem):當(dāng)一個線程修改了類變量的值后,其他線程可能無法立即感知到這個變化。這是因為每個線程都有自己的工作內(nèi)存,它們可能將類變量的副本保存在各自的工作內(nèi)存中。因此,其他線程可能仍然訪問的是舊值。
    3. 并發(fā)更新問題(Concurrent Update Problem):當(dāng)多個線程同時對類變量進(jìn)行修改時,可能會導(dǎo)致數(shù)據(jù)不一致性。例如,多個線程同時遞增一個類變量的值,最終結(jié)果可能不符合預(yù)期。
      如圖所示:
      一文讀懂java變量類型,java學(xué)習(xí),平時學(xué)習(xí)記錄,java,python,開發(fā)語言

    要解決類變量的線程安全問題,可以采取以下措施:

    1. 使用同步機(jī)制:通過使用關(guān)鍵字 synchronized 或使用鎖(如 ReentrantLock)來保證同一時間只有一個線程能夠訪問類變量,從而避免競態(tài)條件和內(nèi)存可見性問題。
    2. 使用原子操作:可以使用原子類(如 AtomicInteger)來執(zhí)行對類變量的原子操作,保證線程安全。
    3. 避免共享:如果類變量不需要共享,并且每個線程都需要擁有自己的副本,可以將類變量聲明為局部變量或?qū)嵗兞?,以避免線程安全問題。
      需要根據(jù)具體情況選擇適當(dāng)?shù)木€程安全措施,并在設(shè)計和編寫代碼時考慮到多線程環(huán)境下的并發(fā)訪問問題。
  • 局部變量

在局部變量中引用了一個對象,且該對象本身存在線程安全問題,那么在訪問該對象時仍然需要采取適當(dāng)?shù)耐酱胧员苊饩€程安全問題的發(fā)生。

例如:引入形參或者有返回值的情況下就會有線程安全問題
解決方法與上面類似,需要采取適當(dāng)?shù)耐綑C(jī)制。


相信有一定基礎(chǔ)的小伙伴已經(jīng)發(fā)現(xiàn)了,final關(guān)鍵字修飾的變量可以是 : 成員變量 類變量 局部變量
不過作者認(rèn)為final關(guān)鍵字修飾的變量比較特殊,就拿出來和其他變量一起介紹啦。文章來源地址http://www.zghlxwxcb.cn/news/detail-706789.html

到了這里,關(guān)于一文讀懂java變量類型的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 一文讀懂ElasticSearch中字符串keyword和text類型區(qū)別_elasticsearch text和keyword

    一文讀懂ElasticSearch中字符串keyword和text類型區(qū)別_elasticsearch text和keyword

    可以看到,這里的數(shù)據(jù)被ES分為了4個詞分別是“廣” ,“東”,“深”,“圳”。同樣,第二條數(shù)據(jù)也被分為了“廣” ,“西”,“南”,“寧”。這里可以理解為 keyword類型存儲的數(shù)據(jù)為“廣東深圳”(存儲未分詞的原始數(shù)據(jù)) text類型存儲的數(shù)據(jù)為“廣” ,“東”,“深

    2024年04月16日
    瀏覽(18)
  • 【單元測試】一文讀懂java單元測試

    【單元測試】一文讀懂java單元測試

    單元測試 是軟件開發(fā)中常用的一種測試方法,用于驗證代碼的單個功能單元是否按照預(yù)期工作。 測試方法: 白盒測試(White Box Testing):在白盒測試中,測試人員了解代碼的內(nèi)部結(jié)構(gòu)和實現(xiàn)細(xì)節(jié),編寫測試用例來覆蓋不同的代碼路徑和邏輯條件。 黑盒測試(Black Box Testing)

    2024年04月17日
    瀏覽(15)
  • | 一文讀懂ChatGPT中的強(qiáng)化學(xué)習(xí)

    原文:原創(chuàng) | 一文讀懂ChatGPT中的強(qiáng)化學(xué)習(xí) ChatGPT基于OpenAI的GPT-3.5創(chuàng)造,是InstructGPT的衍生產(chǎn)品,它引入了一種新的方法,將人類反饋納入訓(xùn)練過程中,使模型的輸出與用戶的意圖更好地結(jié)合。在OpenAI的2022年論文《通過人類反饋訓(xùn)練語言模型以遵循指令》中對來自人類反饋的強(qiáng)

    2024年02月02日
    瀏覽(23)
  • 【JAVA】數(shù)據(jù)類型與變量(主要學(xué)習(xí)與c語言不同之處)

    【JAVA】數(shù)據(jù)類型與變量(主要學(xué)習(xí)與c語言不同之處)

    ?作者簡介:大家好,我是橘橙黃又青,一個想要與大家共同進(jìn)步的男人???? ??個人主頁:橘橙黃又青-CSDN博客 目標(biāo): 1. 字面常量 2. 數(shù)據(jù)類型 3. 變量 在上節(jié)課 HelloWorld 程序中, System.Out.println(\\\"Hello World\\\") ; 語句,不論程序何時運(yùn)行,輸出的都是 Hello World,其實 \\\"Hello Wo

    2024年03月28日
    瀏覽(23)
  • Python學(xué)習(xí)筆記(2)--字面量,注釋,變量,數(shù)據(jù)類型,數(shù)據(jù)類型轉(zhuǎn)換,標(biāo)識符,運(yùn)算符

    Python學(xué)習(xí)筆記(2)--字面量,注釋,變量,數(shù)據(jù)類型,數(shù)據(jù)類型轉(zhuǎn)換,標(biāo)識符,運(yùn)算符

    傳送門==B站黑馬python入門教程 1.字面量 字面量 : 代碼中被固定寫的值 python常用的6種數(shù)據(jù)類型為 數(shù)字,字符串,列表,元組,集合,字典 目前基礎(chǔ)部分學(xué)習(xí) 字符串,整數(shù),浮點(diǎn)數(shù) 即可 字符串 :(文本),由任意數(shù)量的 字符 (示例:中文/英文/各類符號/數(shù)組)組成; 在 python 中,字符串需要用雙

    2024年02月11日
    瀏覽(97)
  • 【Java 并發(fā)編程】一文讀懂線程、協(xié)程、守護(hù)線程

    【Java 并發(fā)編程】一文讀懂線程、協(xié)程、守護(hù)線程

    在 Java 線程的生命周期一文中提到了 就緒狀態(tài)的線程在獲得 CPU 時間片后變?yōu)檫\(yùn)行中狀態(tài) ,否則就會在 可運(yùn)行狀態(tài) 或者 阻塞狀態(tài) ,那么系統(tǒng)是如何分配線程時間片以及實現(xiàn)線程的調(diào)度的呢?下面我們就來講講線程的調(diào)度策略。 線程調(diào)度是指系統(tǒng)為線程分配 CPU 執(zhí)行時間片

    2023年04月08日
    瀏覽(24)
  • opencv-python庫的安裝【一文讀懂】

    opencv-python庫的安裝【一文讀懂】

    ?? 版權(quán): 本文由【墨理學(xué)AI】原創(chuàng)首發(fā)、各位讀者大大、敬請查閱、感謝三連 ?? 聲明: 作為全網(wǎng) AI 領(lǐng)域 干貨最多的博主之一,?? 不負(fù)光陰不負(fù)卿 ?? opencv-python 庫的安裝 顧名思義,Python 代碼運(yùn)行需要依賴使用的 openCV 庫 pip install opencv-python -i https://pypi.doubanio.com/simple

    2024年02月08日
    瀏覽(27)
  • 一文讀懂強(qiáng)化學(xué)習(xí):RL全面解析與Pytorch實戰(zhàn)

    一文讀懂強(qiáng)化學(xué)習(xí):RL全面解析與Pytorch實戰(zhàn)

    在本篇文章中,我們?nèi)娑钊氲靥接懥藦?qiáng)化學(xué)習(xí)(Reinforcement Learning)的基礎(chǔ)概念、主流算法和實戰(zhàn)步驟。從馬爾可夫決策過程(MDP)到高級算法如PPO,文章旨在為讀者提供一套全面的理論框架和實用工具。同時,我們還專門探討了強(qiáng)化學(xué)習(xí)在多個領(lǐng)域,如游戲、金融、醫(yī)療

    2024年02月06日
    瀏覽(160)
  • 回歸算法全解析!一文讀懂機(jī)器學(xué)習(xí)中的回歸模型

    回歸算法全解析!一文讀懂機(jī)器學(xué)習(xí)中的回歸模型

    本文全面深入地探討了機(jī)器學(xué)習(xí)中的回歸問題,從基礎(chǔ)概念和常用算法,到評估指標(biāo)、算法選擇,以及面對的挑戰(zhàn)與解決方案。文章提供了豐富的技術(shù)細(xì)節(jié)和實用指導(dǎo),旨在幫助讀者更有效地理解和應(yīng)用回歸模型。 關(guān)注TechLead,分享AI全維度知識。作者擁有10+年互聯(lián)網(wǎng)服務(wù)架

    2024年02月05日
    瀏覽(15)
  • Python學(xué)習(xí)筆記(四):函數(shù)的定義、函數(shù)的返回值、None類型、函數(shù)說明文檔、函數(shù)的嵌套調(diào)用、局部變量、全局變量、global關(guān)鍵字

    Python學(xué)習(xí)筆記(四):函數(shù)的定義、函數(shù)的返回值、None類型、函數(shù)說明文檔、函數(shù)的嵌套調(diào)用、局部變量、全局變量、global關(guān)鍵字

    目錄 一、函數(shù)介紹 1. 函數(shù)是: 2. 使用函數(shù)的好處是: 二、函數(shù)的定義: 三、函數(shù)的參數(shù) 1.傳入?yún)?shù)的功能是: 2.函數(shù)的傳入?yún)?shù) - 傳參定義 3.注意事項: 4.練習(xí):測量體溫 四、函數(shù)的返回值 1.函數(shù)返回值的定義 2.None類型 五、函數(shù)說明文檔 六、函數(shù)的嵌套調(diào)用 七、變量的

    2024年02月05日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包