```java public class ExampleVariable2 { static int num = 0; // 宣告靜態變數(可視為類別內的全域變數) int mynum = 0; // 物件變數 static String mystr1; String mystr2; public static void main(String[] args) { // 因為程式執行的順序是由上而下,所以只能取用成功宣告後的變數 // System.out.println(number); //順序錯誤,無法讀取這個變數 int number = 1; // 區域變數 if (number < 10) { // 括號A // 局部變數 newScope 的作用區域,只存在於這括號A與B之間 int newScope = 2; System.out.println(newScope); // 印出同一個作用域內的局部變數,ok System.out.println(number); // 印出執行順序之前宣告的變數,ok System.out.println(num); // 印出全域變數,ok // int number = 1; //錯誤,同名變數已經被宣告過了 // System.out.println(mynum); //無法直接印出物件變數,需先實例化類別 } // 括號B // 這個位置讀取不到括號內的 newScope,因為變數被作用域隔開了 // System.out.println(newScope); int newScope = 2; // 因為宣告在不同作用域,所以可以宣告同名的變數 System.out.println(number); // 印出執行順序之前宣告的區域變數,ok System.out.println(num); // 印出全域變數,ok // System.out.println(mynum); //無法直接印出物件變數,需先實例化類別 int num = 3; //區域變數優先順序大於靜態變數及物件變數,所以可以宣告同名變數 System.out.println(num); //印出 3 ExampleScope scope = new ExampleScope(); System.out.println(scope.mynum); // 可印出物件變數,因為已經實例化類別 //對於未賦值的物件變數及靜態變數,程式會給予預設值 System.out.println(mystr1); System.out.println(scope.mystr2); test(); // 呼叫靜態方法 test scope.test2(); // 呼叫方法 test2 } public static void test() { // 區域變數 insideMethod 這個變數的作用區域,只在於這方法內 int insideMethod = 3; System.out.println(insideMethod); // 印出同一個作用域內的區域變數,ok System.out.println(num); // 呼叫後,印出全域變數,ok // System.out.println(mynum); //無法直接印出物件變數,需先實例化類別 } public void test2() { // 可直接印出物件變數,不需先實例化類別,因兩者都非 static System.out.println(mynum); int mynum = 3; //區域變數優先順序大於靜態變數及物件變數,所以可以宣告同名變數 System.out.println(mynum); //印出 3 } } ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up