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

 

结果:

 

posted @ 2020-02-25 17:48  yewook  阅读(213)  评论(0编辑  收藏  举报