Java ------ static 关键字

一、什么是 static 关键字

           在前面的复习当中,有多次用到 static 关键字,并且也知道了它是创建静态变量或静态方法的必要条件,但是却也不理解,设置静态变量的目的是什么?

           在 java 中有没有 static 的区别是很大的,有没有被 static 修饰的变量或方法在 JVM 虚拟机中所放置的区是不一样的:

            但了解完这些之后,又产生了一个新的问题,为什么 static 的所修饰的代码段要放在方法区内,它的作用是什么?

                 先了解为什么之前,先介绍一下方法区的作用: 方法区的作用是放置一些数据,这些数据有一个特点-------一个程序,都能去调用这个区中的数据,并且方法区放置的数据类型有: 常量、运行时常量池、静态变量、类信息, 简而言之方法区就是放置一些不会改变数据的代码段。

            了解完 static 的基本概念,再想想既然 static 存在于方法区,那么 static 中的数据是可以被调用的,那 static 的数据是在什么创建的呢?和对象的创建哪一个早一点? 

             在上图中可以看到在栈区有一个 main 的静态方法,然后才去创建新的对象,所以 静态方法的创建比对象的创建要早,并且要补充的是,在方法区中的数据(常量、静态变量等)都是在类加载的过程中被创建出来的

二、什么时候使用静态变量

           也就是问方法是什么时候定义为静态的?

                  方法描述的是动作,当所有的对象执行这个动作的时候,最终产生影响一样的,那么这个动作不再属于某一个对象的动作了,可以将这个动作提升为类级别的动作,模板级别的动作。

                  其实静态变量的使用是对类的再细分,对不同对象的相同变量进行整合成一,这样可以在创建多个对象的过程中不会重复创建相同的变量,达到减少占用内存存储空间的问题。

三、静态代码块的作用是什么?用在哪?

          1、和具体的需求相结合,例如在项目中要求在类加载的时刻/时机执行代码完成日志的纪录;

          2、静态代码块是 java 为程序员准备一个特殊的时刻,若希望在此刻执行特殊的程序,就可以使用静态代码块;

          3、通常在静态代码块中完成预备工作,先完成数据的准备工具,例如:初始化连接池,解析 XML 配置文件等; 

原文地址:https://www.cnblogs.com/evething-begins-with-choice/p/12671438.html