前言:
而今我们对“java静态和动态是什么意思”都比较注意,看官们都需要剖析一些“java静态和动态是什么意思”的相关资讯。那么小编在网上网罗了一些对于“java静态和动态是什么意思””的相关知识,希望同学们能喜欢,看官们快快来了解一下吧!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学习内容黑马程序员Java视频教程从入门到精通(完整版)超千万下载量