在Java中,static关键字可以修饰 变量,方法,代码块和内部类。
修饰变量
static只能修饰全局变量,表示静态变量,它只属于类,而不属于该类的任何实例,也叫作类变量。
定义为:
class StaticTest{
public static String name = "涕笑三声";
}
静态变量访问方式: 类名调用和对象名调用。
调用方式实例:
public class StaticTestDemo {
public static void main(String[] args) {
//1、使用类名调用
System.out.println(StaticTest.name);
//2、使用对象名来调用
StaticTest test = new StaticTest();
System.out.println(test.name);
//修改变量
StaticTest.name = "张三";
System.out.println(test.name);
}
}
class StaticTest{
public static String name = "涕笑三声";
}
静态变量只有一个,一个类的多个实例操作的是同一个静态变量。
测试实例:
public class StaticTestDemo {
public static void main(String[] args) {
//1、打印 静态变量name 的值
System.out.println(StaticTest.name);
//2、创建一个实例test1修改 静态变量name 的值
StaticTest test1 = new StaticTest();
test1.name = "张三";
//3、创建一个实例test2打印静态变量name 的值,观察是否发生变化
StaticTest test2 = new StaticTest();
System.out.println(test2.name);
}
}
class StaticTest{
public static String name = "涕笑三声";
}
运行结果为:
涕笑三声
张三
可以观察到,创建的两个实例操作的是同一个值。
使用情况: 如果希望一个类的所有对象实例公共使用一个变量,并且全局调用可以声明静态变量。
使用例子: static一般与final一起使用较多,比如 Math类中的PI常量。
修饰方法
static修饰方法时,表示静态方法,它只属于类,而不属于该类的任何实例,也叫作类方法。
定义为:
class StaticTest{
public static void test(){
}
}
静态方法的调用方式与静态变量一样:类名调用和对象名调用。
注意:
- static不能与abstract一起修饰方法。
- 静态方法内不能直接访问类内的非静态方法和非静态变量。
- 静态方法不具备多态性
使用情况: 一个方法不需要访问对象状态,或只需要访问类的静态域。
使用例子: Math,Arrays,Collections等工具类中的静态方法。
修饰代码块
static修饰代码块时,表示静态代码块。静态代码块在类加载时执行,且只执行一次,静态代码块会先于代码块执行,执行后销毁。
定义为:
class StaticTest{
static {
System.out.println("涕笑三声");
}
}
使用情况: 如需要类加载时 初始化变量。
修饰内部类
static修饰内部类时,表示静态内部类。
定义为:
class StaticTest{
//静态内部类 Inner 属于外部类 StaticTest
public static class Inner{
}
}
静态内部类需要依靠外部类来创建
外部类中创建:内部类名 name = new 内部类名();
非外部类中创建:外部类名.内部类名 name = new 外部类名.内部类名();
创建实例:
public class StaticTestDemo {
public static void main(String[] args) {
//非外部类创建
StaticTest.Inner inner = new StaticTest.Inner();
}
}
class StaticTest{
public static void test(){
//外部类创建
Inner inner = new Inner();
}
public static class Inner{
}
}
注意:静态内部类不能访问外部类的数据。
使用情况:在内部类不需要访问外围类对象的时候, 应该使用静态内部类。
——THE END——