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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值