Static 静态的
关键字:被语言赋予特殊含义的单词 使用时全部小写
static 用来修饰类的属性,方法,代码块和内部类
static修饰成员变量后,成员变量变成静态变量
public class Pig { String name; /** * variety是Pig类共有的都是猪 * 使用static修饰后变成类变量,类变量只有一份,所有static修饰的变量也只有一份 */ static String variety="猪"; //成员方法中可以访问成员变量,还可以访问静态变量 public void PigTest(){ System.out.println(name); System.out.println(variety); } public static void PigStatic(){ //System.out.println(name); /* 静态类的方法只能访问静态成员变量,不能使用非静态成员变量 静态方法是类的,优先于对象加载 */ System.out.println(variety); } }
public class PigTest { public static void main(String[] args) { Pig z= new Pig(); z.name="猪猪"; System.out.println(z.variety); Pig.variety ="狗";//静态的变量在内存中只有一份,建议使用类名调用 System.out.println(Pig.variety);//静态方法 通过类名调用 Pig x= new Pig(); x.name="狗狗"; System.out.println(x.variety); }
运行结果:
猪 狗 狗
static修饰的在内存中只有一份
被修饰后,会随着类的加载而加载,优先于对象存在
会被所有对象共享
public class selltick { static int tick = 11;//票数只有一份,使用static修饰 public static void SellTick(){ tick-=1; System.out.println(tick); } public static void main(String[] args) { selltick.SellTick(); selltick.SellTick(); } }
运行结果:
10 9
代码块定义在类中,类似一个没有名称的方法
package com.ff.javaopp.day02; public class Demo { static int num; /* 实例块:与成员方法类似 属于对象的 每次在创建对象时调用 先于构造方法执行 */ { System.out.println("实例块1"); } { System.out.println("实例块2"); } /* 静态块:属于类 类加载时执行,只加载一次,多个静态块按顺序执行 */ static { System.out.println("静态块1"); } static { System.out.println("静态块2"); } public static void main(String[] args) { System.out.println(Demo.num); new Demo(); } }
运行结果:
静态块1 静态块2 0 实例块1 实例块2