CodeGym /Java Blog /Toto sisi /Java 變量
John Squirrels
等級 41
San Francisco

Java 變量

在 Toto sisi 群組發布
在本文中,我們將向所有 Java 學習者解釋什麼是 Java 變量以及如何使用它們。

什麼是Java變量

Java 中的變量可以被認為是一個盒子。這個“盒子”有一定的大小:分配給它的內存。分配多少內存取決於變量的類型,但我們稍後會討論這個問題。同時,框本身的大小在創建後不能更改,但內容可以。盒子可能是空的。您可以向其中“插入”一些值,然後提取並放入其他一些值。由此可見,變量是Java程序執行過程中存儲數據值的字段。這個盒子有重要的特點:
  • 它總是只能包含一個值(或者可以為空,在這種情況下它將包含默認值),
  • 它有一個數據類型。它的大小取決於數據的類型,以及為它分配位置的內存的哪個特定區域(它位於何處)。
Java 中的變量 - 1

如何聲明變量

要在 Java 中聲明變量,您需要指定其類型和名稱。這是聲明三個變量的示例:

int myInt;
String s;
Object variableName;
這裡intStringObject是數據類型,myIntsvariableName是變量名。數據類型一定要根據程序的需要來選擇,而且最好選擇一個名字,讓人一目了然。當然,對於初學者來說並沒有那麼嚴格,但是在大型項目中,像's'這樣的變量名會損害代碼的可讀性。因此,最好習慣於以一種從一開始就清楚它們的用途的方式命名變量。當然,在合理範圍內。

如何初始化變量

當你聲明一個變量時,你就為它分配了內存。初始化就是你把某個值“放入”到“盒子”中。這可以在變量聲明期間或之後立即完成。此外,變量的值可以在程序執行期間更改。例子:

public class VariableTest {
    public static void main(String[] args) {
        int myInt = 5;
        String s;
        s = "init";
        System.out.println(s);
        s = s+5;
        System.out.println(s);
    }
}
在這裡,我們在一行中聲明並初始化了 myInt變量,立即為其分配內存(每個 int 數字 32 位),為其命名,然後將值 5 放入分配的內存中。然後我們聲明我們正在為字符串s分配內存空間,並且已經有一個單獨的命令將值“init”放入其中。之後,我們打印出字符串並更改變量s的值。在這個程序中,我們打印出了這些行,如果你運行它,你會看到以下結果:
初始化初始化5

Java中變量的數據類型:原始和非原始

Java 中變量的數據類型分為兩組:
  • 原始數據類型包括byteshortintlongfloatdoublebooleanchar
  • 非原始數據類型,例如StringArraysClasses
下面是一個使用變量的例子:

public class VariableTest {
   public static void main(String[] args) {

       int myInt = - 5;               // integer (whole number)
       float myFloat = 2.718281828459045f;    // Floating point number
       char myLetter = 'a';         // character
       boolean myBool = true;       // boolean
       String myText = "Hero";     // String
       System.out.println(myInt + " " +
               myFloat +" " + myLetter + " " +  myBool + " " + myText);
       Student myStudent = new Student("Walker","Johnny", "Kyle", null);
      
   }
}
intcharbooleanfloat是原語。字符串是非原始的。myStudent變量呢?這是用戶創建的類Student的對象。它的創建只是為了說明非原始變量的工作。它們在 Java 中佔多數,因為在這種編程語言中幾乎所有東西都是對象。為了便於理解,這裡是Student類的代碼:

import java.util.Date;

public class Student {
   String surname;
   String name;
   String secondName;
   Long birthday; // Long instead of long is used by Gson/Jackson json parsers and various orm databases

   public Student(String surname, String name, String secondName, Date birthday ){
       this.surname = surname;
       this.name = name;
       this.secondName = secondName;
       this.birthday = birthday == null ? 0 : birthday.getTime();
   }

   @Override
   public int hashCode(){
       //TODO: check for nulls
       //return surname.hashCode() ^ name.hashCode() ^ secondName.hashCode() ^ (birthday.hashCode());
       return (surname + name + secondName + birthday).hashCode();
   }
   @Override
   public boolean equals(Object other_) {
       Student other = (Student)other_;
       return (surname == null || surname.equals(other.surname) )
               && (name == null || name.equals(other.name))
               && (secondName == null || secondName.equals(other.secondName))
               && (birthday == null || birthday.equals(other.birthday));
   }
}

Java 中的變量類型:局部變量、實例變量和靜態變量

Java 中存在三種不同類型的變量,我們將它們列舉如下:
  1. 局部變量
  2. 實例變量
  3. 靜態變量

局部變量

在方法體內聲明的變量稱為局部變量。此外,局部變量在構造函數和塊中聲明。您只能在創建局部變量的方法、構造函數或塊中使用局部變量,而類中的其他方法甚至不知道該變量的存在。因此,局部變量是在方法、構造函數或塊進入時創建的,一旦方法、構造函數或塊不起作用,變量就會被銷毀。不能使用static關鍵字定義局部變量。更重要的是:您不能對局部變量使用訪問修飾符。這是一個例子:

public class VariableTest {
   public static void main(String[] args) {
       System.out.println(myMethod("C plus "));
   }
           private static String myMethod(String myString) {
       String myOtherString = "plus";
       return myString + myOtherString;
   }
}
這裡myOtherString是一個局部變量。您不能從其他方法使用它,但myMethod。局部變量不能有默認值。如果程序中至少有一個局部變量沒有被初始化,程序將無法正常運行。讓我們對前面的一個示例做一個小改動,並“忘記”初始化myBool變量:

public class VariableTest {
   public static void main(String[] args) {

       int myInt = - 5;               // integer (whole number)
       float myFloat = 2.718281828459045f;    // Floating point 
       char myLetter = 'a';         // character
       boolean myBool;       // boolean
       String myText = "Hero";     // String
       System.out.println(myInt + " " +
               myFloat +" " + myLetter + " " +  myBool + " " + myText);
       Student myStudent = new Student("Walker","Johnny", "Kyle", null);

   }
}
如果我們嘗試運行該程序,它會拋出一個錯誤:
錯誤:(10, 50) java: 變量 myBool 可能尚未初始化

實例變量

在類內部但在任何方法、構造函數或塊的主體之外聲明的變量稱為實例變量。實例變量是在使用new關鍵字創建對象時創建的。它在對像被銷毀時被銷毀。它不能聲明為靜態的,但您可以對實例變量使用訪問修飾符。實例變量對於類中的所有方法、構造函數和塊都是可見的。通常實例變量是私有的,但您可以更改子類的可見性。與局部變量相反的實例變量具有默認值。對於所有數字原始類型,默認值為 0,對於布爾值,默認值為 false,對於對象引用,默認值為 null。可以在聲明期間或在構造函數中分配值。這是一個例子:

//instance variable example
public class Employee {

   // here we have a public instance variable. It is visible for this class and child classes
   public String name;

   //this instance variable is private so it’s visible for the Employee class only. You can use setters and getters to get it
   private double salary;

   public Employee (String empName) {
       name = empName;
   }

   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }

   public double getSalary() {
       return salary;
   }

   public void setSalary(double employeeSalary) {
       salary = employeeSalary;
   }

   public static void main(String args[]) {
       Employee employee = new Employee("Johnny");
       employee.setSalary(1500);
       System.out.println("name = " + employee.getName());
       System.out.println("salary = " + employee.getSalary());
   }
}

靜態變量

聲明為靜態的變量稱為靜態變量。Java 允許您在方法、構造函數或塊之外聲明此類變量。它不能是本地的,它們屬於類,而不是實例。這意味著靜態變量的單個副本一旦創建並在類的所有實例之間共享。當類加載到內存中時,靜態變量的內存分配只會發生一次。它們可以具有任何可見性,但通常它們被聲明為公開的。它們也有默認值,例如實例變量。

public class Box
{
   public void add(int data)
   {
       Storage.sum = Storage.sum + data;
       Storage.count++;
   }

   public void remove(int data)
   {
       Storage.sum = Storage.sum - data;
       Storage.count--;
   }
}

public class Storage
{
   public static int count = 0;
   public static int sum = 0;
}
在上面的示例中,我們創建了一個單獨的Storage類,將 count 和 sum 變量移入其中,並將它們聲明為靜態。公共靜態變量可以從任何程序方法訪問(而不僅僅是從一個方法)。 為了鞏固您所學的知識,我們建議您觀看我們的 Java 課程中的視頻課程
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION