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变量,属于不可改变值的常量,存放在常量区。

 

posted @ 2019-05-17 16:44  myLittleGarden  阅读(10310)  评论(0编辑  收藏  举报