Java中的statis用法

static变量:

按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。两者的区别是:

1)对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问。

2)对于实例变量,每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。

 

静态方法:

静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员方法),只能访问所属类的静态成员变量和成员方法。因为实例成员与特定的对象关联!

静态变量通常是在类级别上声明的,它们在整个程序运行期间只存在一次,不会因为创建类的对象而实例化多次。如果你需要在Spring框架中对静态变量进行初始化或者管理,并直接通过`set`方法,而是涉及到依赖注入(Dependency Injection,DI)的概念。 在Spring中,对于像静态变量这样的单例资源,可以这样做: 1. **使用@Configuration**:首先,你需要将包含静态变量的类标记为Spring的配置类(`@Configuration`),这会让Spring能够扫描并管理这个类。 ```java @Configuration public class MyConfig { @Value("${myStaticVariable}") private static String myStaticVariable; // 使用@Value注解从外部属性文件注入值 // 或者,如果需要更复杂的注入逻辑,可以使用@Bean @Bean public static MyClass withInjectedStatic(MyDependency dependency) { MyClass instance = new MyClass(); instance.setMyDependency(dependency); return instance; } } ``` 2. **使用@Autowired**:如果你想让Spring自动管理静态变量的注入,可以在静态变量上使用`@Autowired`注解,但是需要注意的是,静态变量不能直接被`@Autowired`修饰,你需要提供一个公共访问方法来获取它。 ```java public class MyClass { private static final MyDependency myDependency; static { myDependency = new MyDependency(); // 默认构造函数注入 // 或者,如果你需要使用setter注入 SpringApplication.getApplication().getEnvironment().getPropertySources() .stream() .filter(source -> "myDependency".equals(source.getName())) .findFirst() .ifPresent(source -> setMyDependency(new MyDependency(source.getProperty("dependencyValue")))); } // 提供一个getter方法供外界设置 public static void setMyDependency(MyDependency dependency) { ... } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值