Java-Static静态类的使用场景

static关键字在Java中用于修饰静态变量、静态方法、静态代码块等,它使得这些成员在类加载时就初始化,并在整个类的生命周期中共享。静态变量存储在permgen或MethodArea区域,减少了对象创建的需要。静态方法不能访问非静态成员,而静态代码块常用于一次性加载数据。此外,static还可用于创建静态内部类和静态包导入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、关于static的特点:

static是修饰静态的标识符,使用得当,能提高程序的运行性能,并且简洁程序结构。

它有五种使用场景:变量、方法、代码块、内部类、包内导入;并且程序启动,首先执行包含static修饰符的内容,且只执行一次。它可以当作字典数据,全局变量,来使用;

        1、static变量:类加载它加载。类消失它小时,它的存在可用减少对对象的创建。存储在perm gen区域;使用场景:类中全局定义static变量,该类的所有方法都可以使用,减少代码冗余和频繁创建对象;注意点:类中的静态变量是一个整体,共享给所有对象,一个对象对其值改动,那么所有该静态变量都会跟着变动,牵一发而动全身;

--字典数据
private static final String appType = "phone";
--类全局定义:日志采集
private static Logger LOGGER = LogFactory.getLoggger(MyClass.class);


--最终打印出来的是最后一次赋值结果;
public class TestStaticDemo {
    private static int age;

    public static void main(String[] args) {
        TestStaticDemo td =new TestStaticDemo();
        td.age =20;

        TestStaticDemo td1 =new TestStaticDemo();
        td1.age =30;

        System.out.println(td.age);//30
        System.out.println(td1.age);//30
    }
}

        2、static方法:静态方法其成员也是静态的;且无法使用对象的关键字,如this、super、也无法通过关键字访问对象资源,因为静态成员的级别高于对象;但:非静态方法可访问(静态方法、非静态方法)。存储在Java独立的内存空间的方法区(Method Area);使用场景:定义一个静态方法表示

public class Student{
    private String name;
    private static String oldName;
    private static String newName;
    
    public static String getName(){
        String aa = name;//直接报错,因为静态方法,访问不了 非静态类下的非静态成员;
        return a;
    }
    
    public static String getNameTwo(){
        String aa = oldName;//访问成功,因为oldName是静态的;
        return a;
    }
}
--典型例子比较:

--直接定义为静态方法
public static int min(int a, int b);

--创建类的对象来实现,创建对象会占用java的堆内存,如果使用频繁,会内存溢出
int min = YourClass.min(1, 2);

        3、   static代码块:static代码块在加载一个类的时候最先执行,且只执行一次;使用场景:平常工作中,遇到读取配置文件、服务器参数、冷数据的加载、字典数据等等,这个时候可以使用static代码块,避免重新查询数据或创建对象。只需一次办卡,终身会员制;

public class TestStaticDemo {
    public static void main(String[] args) {
        System.out.println("初始化2");
    }
    static {
        System.out.println("初始化1");
    }
}
//打印结果:初始化1  初始化2

        4、static内部类:一个内部类,加上static,成为static内部类;static只能修饰内部类,不能修饰顶级类;使用场景不广泛;

public static void main(String[] args) {
    //创建静态内部类实例    
    StaticInnerClass staticInnerClass = new StaticInnerClass();    
    //调用静态内部类方法    
    staticInnerClass.getMessage();    
    //创建静态内部类实例    
    StaticCouter.StaticInnerClass staticInnerClass1 = new staticCouter.StaticInnerClass();    
    //调用静态内部类方法
    staticInnerClass1.getMessage();
    //创建普通内部类实例
    StaticCouter.NormalInnerClass normalInnerClass = new StaticCouter().new NormalInnerClass();
    //调用普通内部类方法
    normalInnerClass.getMessage();
}

        6、static包导入:使用场景:在工作中遇到多次关键字需要导入类,然后发现他们的命名空间一致,这个时候可以直接 如:import java.util.*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值