java什么时候声明static方法
1. 经常用到的方法,可以声明为static,在外部调用静态方法时,可以使用“类名.方法名”或者“对象名.方法名”的形式。这样省去了每次new对象的内存空间,因为非static方法,需要new对象才能调用此方法。但因此也产生多线程访问线程安全问题。比如:
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.*;
/**
* @version V1.0
* @ClassName: PoolUtil
* @Description: 初始化线程池
*/
@Slf4j
public class PoolUtil {
public static final int CORE_POOL_SIZE = Runtime.getRuntime().availableProcessors() * 2;
/**
*初始化线程池
* @param threadName: thread name
* @return
*/
public static ExecutorService initPoolExecutor(String threadName) {
ThreadFactory guavaFactory = new ThreadFactoryBuilder().setNameFormat(threadName).build();
ThreadPoolExecutor pool = new ThreadPoolExecutor(CORE_POOL_SIZE,
256,30L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<>(Integer.MAX_VALUE), guavaFactory);
pool.allowsCoreThreadTimeOut();
return pool;
}
}
只初始化一个线程池。
2.当一个方法或者变量需要在类加载器加载类的时候就被初始化,则声明为static。Static变量在项目启动时就分配内存,直到程序结束释放内存。static和const变量在项目启动时就已经分配内存了,而且方法调用之后也不会被释放。
class MyClass {
public final double differentValue = Math.random();
public static double sameValue = Math.random();
}
如上示例中,differentValue的值每次都变化,但是sameValue的值是相同的。
3.声明为static方法后,内存中就只有一份数据了。所以就要注意线程安全问题,就需要加同步处理。线程就会等待访问了,就会有线程安全问题。
读后有收获,小礼物走一走,请作者喝咖啡。

作者:楼兰胡杨
本文版权归作者和博客园共有,欢迎转载,但请注明原文链接,并保留此段声明,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2021-02-09 对象、类、包、组件、容器和框架的基本概念