zoukankan      html  css  js  c++  java
  • 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变量,属于不可改变值的常量,存放在常量区。

  • 相关阅读:
    设计模式之美学习-接口隔离原则(七)
    设计模式之美学习-里式替换原则(六)
    设计模式之美学习-开闭原则(五)
    设计模式之美学习-设计原则之单一职责(四)
    设计模式之美学习-如何进行面向对象设计(三)
    ffmpeg 从内存中读取数据(或将数据输出到内存)
    CImage 对话框初始化时候显示透明 PNG
    RTMPdump(libRTMP) 源代码分析 9: 接收消息(Message)(接收视音频数据)
    RTMPdump(libRTMP) 源代码分析 8: 发送消息(Message)
    RTMPdump(libRTMP) 源代码分析 7: 建立一个流媒体连接 (NetStream部分 2)
  • 原文地址:https://www.cnblogs.com/sunada2005/p/10882158.html
Copyright © 2011-2022 走看看