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

    结果:

  • 相关阅读:
    我的安全测试面试_自问自答,不亦乐乎
    Linux Shell 网络层监控脚本(监控包括:连接数、句柄数及根据监控反馈结果分析)
    netstat监控大量ESTABLISHED连接与Time_Wait连接问题
    详解 Spotlight on MySQL监控MySQL服务器
    详解 Spotlight on Unix 监控Linux服务器
    某听书网站系统漏洞,利用抓包拼接方式获取网站资源
    不懂得使用工具的测试不是好测试
    【好书摘要】性能优化中CPU、内存、磁盘IO、网络性能的依赖
    性能调优从哪里入手
    报文解析,从请求报文详细讲到响应码
  • 原文地址:https://www.cnblogs.com/yewook/p/12362902.html
Copyright © 2011-2022 走看看