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; } }
结果: