Java static关键字,使用场景

在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——

猜你喜欢

转载自blog.csdn.net/weixin_46022868/article/details/112756869