java的static,你知多少?

static不利于对类的精细化控制

在Java中,static的变量是和class绑定在一起的,也就是说在垃圾回收的过程中,除非class被回收掉,那么static的变量不会被垃圾回收。因此,在通常情况下,为了节约内存,降低GC压力,Java应用程序中不应该存在太多的static的属性(static final的编译期常量除外,当然也不能过大)。

哪些情况可以使用静态方法?

  • 使用static方法来暴露类的构造工厂方法,比如String.valueOf(), LocalDateTime.now();
  • 方法以后不会再修改和迭代。一些工具方法比如 Math.max(),单例,工厂模式等;
  • 如果一个方法所有状态都可以封闭在栈内,变量不会逃逸到方法外(也就是说是无状态的),这样保证了方法的线程安全,所以可以使用static;

statci有什么用?

在一个类中包含域和方法;但是有了 static 这个修饰符之后,域和方法又可以再次进行更细的划分。

  • 被 static 修饰的域,称之为「类域」,不被修饰的域叫做「实例域」
  • 被 static 修饰的方法,称之为「类方法」,不被修饰的方法叫做「实例方法」
It is because the object is not required to call a static method. If it were a non-static method, JVM creates an object first then call main() method that will lead the problem of extra memory allocation.

以上一段话,是Java官方对static的官方说明,翻译成大白话就是:

因为对象不需要调用静态方法。如果是一个非静态方法,JVM首先创建一个对象,然后调用main()方法,这会导致额外的内存分配问题。

不难理解,如果没有static修饰符的时候,每次创建对象都会在内存中为类中的每一部分分配空间,这样将浪费大量的内存空间,我们知道相比于硬盘空间容量而言。内存的空间小的可怜,显得很宝贵,因此static的引入巧妙的解决了节省内存的作用。其实在Java的语言设计中,有很多设计也都是为了能够节省内存,比如说最常见的JVM内存回收机制,畅想未来,如果我们的内存空间动不动就会像硬盘的空间那么大,也许那时的编程语言将会变得更加简单!

以上就是对Java中static的原理讲解

最后分享一些java框架上的收藏,各位老兄,有帮助可以卷一卷

分布式架构

Zookeeper+Dubbo:Dubbo快速入门,Java分布式框架必会的教程

Springcloud:SpringCloud从小白到精通教程

Skywalking:java基础教程全面的深入学习Skywalking

服务器中间件

Rabbitmq:RabbitMQ全套教程,RabbitMQ消息中间件到实战面试

Rocketmq:RocketMQ系统精讲,电商分布式消息中间件,硬核揭秘双十一

Kafka:Kafka深入浅出,快速玩转分布式发布订阅消息系统

Mycat:Kafka深入浅出,快速玩转分布式发布订阅消息系统

Redis:Redis入门到精通,Java企业级解决方案必看

MongoDB:java必备基础教程-MongoDB基础入门到高级进阶

Apollo分布式:轻松入门Apollo分布式配置中心-服务中间件

服务器技术

Tomcat:Java进阶教程Tomcat核心原理解析

容器技术

Docker:Docker容器化技术,从零学会Docker教程

Kubernetes:Kubernetes(K8S)超快速入门教程

猜你喜欢

转载自blog.csdn.net/m0_57290404/article/details/125263891