zoukankan      html  css  js  c++  java
  • java中static关键字

    public class StaticDemo {
        /*
        * (1)特点:
    
            1、static是一个修饰符,用于修饰成员。(成员变量,成员函数)static修饰的成员变量 称之为静态变量或类变量。
    
            2、static修饰的成员被所有的对象共享。
    
            3、static优先于对象存在,因为static的成员随着类的加载就已经存在。
    
            4、static修饰的成员多了一种调用方式,可以直接被类名所调用,(类名.静态成员)。
    
            5、static修饰的数据是共享数据,对象中的存储的是特有的数据。
          (2)成员变量和静态变量的区别:
    
            1、生命周期的不同:
    
            成员变量随着对象的创建而存在随着对象的回收而释放。
    
            静态变量随着类的加载而存在随着类的消失而消失。
    
            2、调用方式不同:
    
            成员变量只能被对象调用。
    
            静态变量可以被对象调用,也可以用类名调用。(推荐用类名调用)
    
            3、别名不同:
    
            成员变量也称为实例变量。
    
            静态变量称为类变量。
    
            4、数据存储位置不同:
    
            成员变量数据存储在堆内存的对象中,所以也叫对象的特有数据。
    
            静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。
    
          (3)静态使用时需要注意的事项:
    
            1、静态方法只能访问静态成员。(非静态既可以访问静态,又可以访问非静态)
    
            2、静态方法中不可以使用this或者super关键字。
    
            3、主函数是静态的
        *
        *
        * */
    
        //修饰变量
        //用static修饰的变量是属于该类的 不属于某个对象。
        private static String name; //可以通过类名直接调用
        private String username;
    
        /*静态变量在类第一次被载入时执行*/
        static {
            name = "mozhi";
        }
    
        //应用在类上
        public static class InnerClass {
            public InnerClass(){
                System.out.println("静态内部类构造方法");
            }
    
            public void innerMethod(){
                System.out.println("静态内部类方法");
            }
        }
    
        public class InnerClassNoStatic{
            public InnerClassNoStatic(){
                System.out.println("非静态内部类");
            }
            public void innerMethodNoStatic(){
                System.out.println("非静态内部类方法");
            }
        }
    
        //应用在方法上
        public static void staticMethod(){
            System.out.println("静态方法可以通过类名直接调用");
        }
        public void commonMethod(){
            System.out.println(username+","+name);
            System.out.println("实例类后才可以调用到");
        }
    
        public static void main(String[] args) {
            /*可以通过StaticDemo类名直接创建静态内部类*/
            StaticDemo.InnerClass innerClass = new StaticDemo.InnerClass();
            innerClass.innerMethod();
    
            /*须通过外部实例创建非静态内部类*/
            StaticDemo demo = new StaticDemo();
            StaticDemo.InnerClassNoStatic innerClassNoStatic = demo.new InnerClassNoStatic();
    
            System.out.println("-----------------------------");
    
            StaticDemo.staticMethod(); //demo.staticMethod(); 效果一样
            demo.commonMethod();
    
            System.out.println("----------------");
            demo.setUsername("yewook");
    
            System.out.println(StaticDemo.name);
            StaticDemo.name = "123";
            System.out.println(demo.username);
            demo.commonMethod();
        }
    
    
        public String getUsername() { return username; }
    
        public void setUsername(String username) { this.username = username; }
    }

    结果:

  • 相关阅读:
    lintcode-135-数字组合
    如何下载网页上的视频?
    tree
    lintcode-512-解码方法
    前端 启动项目内存溢出
    导入txt和导出txt文件
    webStorm 2018.3.2永久破解方法
    前端导出功能
    定时器刷新机制 setInterval react
    getFieldsValue,getFieldValue,validateFields,resetFields,getFieldDecorator的用法;
  • 原文地址:https://www.cnblogs.com/yewook/p/12362902.html
Copyright © 2011-2022 走看看