Java基礎之:屬性與局部變量作用域


Java基礎之:屬性與局部變量作用域

簡單案例

class A{
    int age;    //屬性
    public void print(){
        System.out.println(age);
        String name = "小范";
        System.out.println(name);
    }
    
    public void show(){
        age = 10;
        // name = "小黃";    //這條語句是錯誤的,因為name的作用域僅在 print() 方法體中
    }
}

  

由上面案例我們可以看到,

全局變量:也就是屬性,作用域為整個類。例如 A類中的 age

局部變量:也就是除了屬性之外的其他變量,作用域為定義它的代碼塊中

特別注意:全局變量可以不賦值,直接使用,因為有默認值。局部變量必須賦值后,才能使用,因為沒有默認值。

 

細節說明

1) 屬性全局變量和局部變量可以重名,訪問時遵循就近原則。

例如:

class A{
    int age = 20;
    public void show(){
        int age = 10;
        System.out.println(age); // 這里輸出10
    }
}

2) 在同一個作用域中,比如在同一個成員方法中,兩個局部變量,不能重名。

例如:

class A{
    public void show(){
        int age = 10;
        int age = 20;   //不允許
    }
}

3) 全局變量,存儲在堆中。局部變量,存儲在棧中。

4) 全局變量,生命周期較長,伴隨着對象的創建而創建,伴隨着對象的死亡而死亡。

局部變量,生命周期較短,伴隨着它的代碼塊的執行而創建,伴隨着代碼塊的結束而死亡。即在一次方法調用過程中。【每調用一次方法,就開一個方法棧,這個是由操作系統決定的】

5) 作用域不同 全局變量:可以被本類使用,或其他類使用(通過對象調用) 局部變量:只能在本類中對應的方法中的作用域內使用

6) 修飾符不同 全局變量/屬性可以加修飾符 局部變量不可以加修飾符

7) 特別說明: 如果我們在方法中,是new 對象,比如 Person p = new Person(); p在方法中, 對象數據空間在堆中.., 如果p 沒有返回,則方法結束后,對象成為垃圾,被回收,如果返回給 其它方法,比如main , 則可以繼續使用。

 

 

Java自定義類步驟總結(OOP(oriented[面向] object[對象] programming[編程]))

/**
    1)  一個景區根據游人的年齡收取不同價格的門票。
    2)  請編寫游人類,根據年齡段決定能夠購買的門票價格並輸出
    3)  規則:年齡>18 , 門票為20元,其它情況免費。
    4)  可以循環從控制台輸入名字和年齡,打印門票收費情況, 如果名字輸入 n ,則退出程序。
​
*/
​
import java.util.Scanner;   
public class OOPClassWork
{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
​
        Person p = new Person();
        do{
            System.out.println("\n請輸入姓名(輸入\"n\"退出程序):");
            p.name = input.next();
            
            if(!"n".equalsIgnoreCase(p.name)){  //當姓名輸入n的時候  直接退出
                System.out.println("請輸入年齡:");
                p.age = input.nextInt();
                p.money(p.age); //計算門票
                p.print();
            }
        }while(!"n".equalsIgnoreCase(p.name));  //只要名字不是n 就一直循環的輸入
​
    }
}
​
class Person
{
    //OOP 編程思想:一個方法 盡量只完成一個動作,以便后期修改方法。
​
    String name;
    int age;
    int payMoney;   //韓老師思路
​
    //年齡>18 , 門票為20元,其它情況免費。
    public void money(int age){
        if(age > 18){
            payMoney = 20;
        }else{
            payMoney = 0 ;
        }
    }
​
    //輸出
    public void print(){
//      自己的思路  沒有定義payMoney屬性
//      System.out.printf("name:%S,age:%d,應付門票費:%d",name,age,money(age));
​
    //韓老師思路
        System.out.printf("%s的年齡是%d,應付門票費%d元。",name,age,payMoney);
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM