java static變量及函數

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

1. 訪問規則c++

  • 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變量,屬於不可改變值的常量,存放在常量區。this

相關文章
相關標籤/搜索