• 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; }
    }

    结果:

  • 相关阅读:
    Nginx专题(二)-----虚拟主机、location规则、rewrite、负载均衡配置
    Nginx专题(一)-----简介
    springMVC自动转义问题
    Tomcat专题(三)-----Tomcat性能优化
    Tomcat专题(二)-----Tomcat源码、嵌入式Tomcat
    Tomcat专题(一)-----架构体系
    jvm性能调优(五)-----深入了解性能优化
    jvm性能调优(四)-----编写高效的java代码
    jvm性能调优(三)-----JVM的执行子系统
    jvm性能调优(二)-----垃圾回收、内存分配
  • 原文地址:https://www.cnblogs.com/yewook/p/12362902.html
Copyright © 2020-2023  润新知