Java Basics Part 6/20 - Variable Types
目錄
變量就是存儲數據的。每個變量都有一個特定的類型,這個類型決定了變量在內存中的大小以及分佈情況、決定了變量的取值範圍、決定了有哪些可以操作變量的方法。
使用變量之前,必須先聲明:
data type variable [ = value][, variable [= value] ...] ;
聲明和初始化舉例:
int a, b, c; // Declares three ints, a, b, and c.
int a = 10, b = 10; // Example of initialization
byte B = 22; // initializes a byte type variable B.
double pi = 3.14159; // declares and assigns a value of PI.
char a = 'a'; // the char variable a iis initialized with value 'a'
三種變量類型:
- 局部變量
- 實例變量
- 類/靜態變量
局部變量
- 在方法、構造器和塊中聲明的變量是局部變量
- 進入方法、構造器或者塊中時,局部變量被創建,離開就銷燬
- 訪問控制修飾符不能用於局部變量
- 僅在聲明的方法、構造器或者塊中可見
- 局部變量存儲在棧中
- 局部變量沒有默認的初值
舉例:
如下, 局部變量 age,定義在 pupAge() 方法中,作用於僅限這個方法中。
public class Test{
public void pupAge(){
int age = 0;
age = age + 7;
System.out.println("Puppy age is : " + age);
}
public static void main(String args[]){
Test test = new Test();
test.pupAge();
}
}
// output
Puppy age is: 7
舉例:
如下,沒有初始化局部變量 age,這會帶來編譯錯誤。
public class Test{
public void pupAge(){
int age;
age = age + 7;
System.out.println("Puppy age is : " + age);
}
public static void main(String args[]){
Test test = new Test();
test.pupAge();
}
}
// output
Test.java:4:variable number might not have been initialized
age = age + 7;
^
1 error
實例變量
- 實例變量在類中,方法、構造器或者塊的外面聲明
- 當堆中爲對象分配一片空間的時候,每個實例變量的存儲空間也都自動創建了
- 當對象被 new 出來的時候,實例變量就創建了。對象銷燬的時候,實例變量也就銷燬了
- 實例變量持有的值會被方法、構造器或者塊引用到
- 實例變量可以用訪問控制修飾符修飾
- 實例變量對類中的所有方法、構造器和塊均可見
- 實例變量都有默認值
- 在類中,直接使用變量名即可訪問實例變量
舉例:
import java.io.*;
public class Employee{
// this instance variable is visible for any child class.
public String name;
// salary variable is visible in Employee class only.
private double salary;
// The name variable is assigned in the constructor.
public Employee (String empName){
name = empName;
}
// The salary variable is assigned a value.
public void setSalary(double empSal){
salary = empSal;
}
// This method prints the employee details.
public void printEmp(){
System.out.println("name : " + name );
System.out.println("salary :" + salary);
}
public static void main(String args[]){
Employee empOne = new Employee("Ransika");
empOne.setSalary(1000);
empOne.printEmp();
}
}
// ooutput
name : Ransika
salary :1000.0
類/靜態變量
- 變量通過 static 關鍵字來修飾,在類中,但是在方法、構造器或者塊之外聲明
- 一個類只有一份,所有對象共享一個
- 除了用來做常量聲明之外,靜態變量很少用
- 靜態變量存儲在靜態內存區
- 程序啓動時,靜態變量被創建;程序結束後,靜態變量被銷燬
- 可見性與實例變量一樣,但是多數都是聲明成 public 的
- 都有默認值
- 變量被聲明爲 public static final 時,名稱都要是大寫的。如果不是定義成 public static final 的,那麼命名規則與實力變量和局部變量相同
舉例:
import java.io.*;
public class Employee{
// salary variable is a private static variable
private static double salary;
// DEPARTMENT is a constant
public static final String DEPARTMENT = "Development ";
public static void main(String args[]){
salary = 1000;
System.out.println(DEPARTMENT + "average salary:" + salary);
}
}
// output
Development average salary:1000
如果外部想要訪問靜態變量,那麼用這種方式:Employee.DEPARTMENT