java static變量及函數


java以類為基礎,沒有游離在類之外單獨存在的變量。所以,c++中的全局變量,在java中應該是不存在的。java中有的是成員變量和成員方法。當成員前以static修飾時,即為靜態成員變量或靜態成員方法。

1. 訪問規則

  • static成員變量,可被static或非static方法訪問。
  • static成員變量,僅可通過類名訪問,不可通過類實例訪問。
  • static成員方法,僅可訪問static成員變量,無法訪問非static成員變量。
  • static成員方法,僅可通過類名訪問,不可通過類實例訪問。
  • 非static成員方法,僅可通過類實例訪問,不可通過類名訪問。
  • static成員變量和static成員方法,沒有this方法。即,不可以通過this.age或this.setAge()來訪問。
package com.javaPractise;

public class TestStatic {

    public String name;
    public static int age;
    public static String staticField = "靜態成員變量";

    public TestStatic(){
        System.out.println("無參構造函數Constructor of TestStatic");
    }

    public TestStatic(String myName, int myAge){
        this.name = myName;
        age = myAge;
        System.out.println("有參構造函數Constructor of TestStatic");

    }

    public static void setStaticField(String value){
        staticField = value;
        System.out.println("staticField: " + staticField);
    }

    public static void printStaticField(){
        System.out.println("staticField: " + staticField);
    }

    public void printNameAndAge(){
        //非靜態成員方法可訪問 靜態 和 非靜態 成員變量
        System.out.println("name: " + name + " age: " + age);
    }

    public static void setAge(int n){
        //靜態成員方法,僅可訪問靜態成員變量,不可訪問普通成員變量
        age = n;
//        name = "abc";
    }

    public static void printAge(){
System.out.println(
"age: " + age); } }
import com.javaPractise.TestStatic;

public class Main {

    public static void main(String[] args){
        System.out.println("age of TestStatic");
        System.out.println(TestStatic.age); //靜態成員可通過類名直接調用
        TestStatic.printAge();  //靜態方法可通過類名直接調用
        //TestStatic.printNameAndAge();  //非靜態方法不可通過類名直接調用

        TestStatic.printStaticField();
        TestStatic.setStaticField("haha");

        TestStatic testStatic1 = new TestStatic();
        System.out.println("name and age of testStatic1");
        testStatic1.printNameAndAge();  //非靜態成員僅通過類實例調用
        testStatic1.printAge();  //靜態方法可通過類實例調用
    }
}

2. 存放區域

static變量,存放在靜態存儲區;普通成員變量,存放在棧區;new出來的實例,存放在堆區;static final變量,屬於不可改變值的常量,存放在常量區。

 


免責聲明!

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



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