`

static块的作用及何时被执行

 
阅读更多

一般情况下,如果有些代码必须在项目启动的时候就要被执行,这种情况上就需要使用静态代码块,这种代码是主动执行的,写个例子看看static块什么时候被执行

静态代码块就是在类加载的时候运行,并且只加载一次,通常用在某些事情在类加载时运行,只需用一次的地方,比如jdbc链接数据库,还有一些工具类导入某些配置文件等等。
现在链接数据库都已被框架封装好,我用静态代码块更多的地方就是导入配置文件,或者给这个类的一个final属性赋值。

1.StaticTest

Java代码 收藏代码
  1. packagecom.test.statictest;
  2. publicclassStaticTest{
  3. /**构造方法*/
  4. publicStaticTest(){
  5. System.out.println("构造函数被执行了!");
  6. }
  7. /**静态代码快*/
  8. static{
  9. System.out.println("静态代码块被执行了!");
  10. //show();
  11. }
  12. /**静态方法*/
  13. publicstaticvoidshow(){
  14. System.out.println("静态方法被执行了!");
  15. }
  16. }

2.Main

Java代码 收藏代码
  1. packagecom.test.statictest;
  2. publicclassMain{
  3. publicstaticvoidmain(String[]args)throwsClassNotFoundException{
  4. Mainmain=newMain();
  5. //加载类
  6. Class.forName("com.test.statictest.StaticTest");
  7. Class.forName("com.test.statictest.StaticTest");
  8. }
  9. }

结果输出

静态代码块被执行了!

在测试类里我加载了2次StaticTest类,按理说"静态代码块被执行了!"这句话应执行二次,但只输出了一次。

再看看别的

Java代码 收藏代码
  1. packagecom.test.statictest;
  2. publicclassMain{
  3. publicstaticvoidmain(String[]args)throwsClassNotFoundException{
  4. Mainmain=newMain();
  5. //加载类
  6. Class.forName("com.test.statictest.StaticTest",true,Main.class.getClassLoader());
  7. //Class.forName("com.test.statictest.StaticTest");
  8. }
  9. }

结果:

静态代码块被执行了!

这两个语句是等价的,执行的结果相同。

Class.forName("com.test.statictest.StaticTest",true,Main.class.getClassLoader())中的true改为false,代表加载类的时候不初始化静态代码块的内容,只能在这个类被实例化的时候才能初始化

Class.forName(xxx.xx.xx)的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码块.

我们只是想加载这个驱动到JVM,并不需要实例化这个驱动,因此调用Class.forName(xxx.xxx.xx) 足够,如果你调用Class.forName(xxx.xxx.xxx).newInstance(),结果和调用Class.forName(xxx.xxx.xxx)是一样的,因为Class.forName(xxx.xxx.xxx).newInstance() 会首先加载驱动并创建实例,但是这个实例通常你决不会用到,所有你不需要创建它。


在一个类中有一段这样的代码
class ...
{
       static
       {
       .......
       ........
       ........
       }
}
也就是静态代码块,静态代码块在什么时候执行,哪位高手给我详细一点解释一下
在这个类第一次被调用或实例化的时候就会被执行。 
静态代码块只会执行一次,一般会用来初始化一些值,并且在所有对象中全局共享。

编译时执行,对象创建前就已执行 

凡是声明为static的语句(变量,方法,代码块),是在加载类的时候就执行的 

在类加载时执行,我的理解就是出现这个类的类名的时候就执行; 就是类被点名就执行。

java 静态代码块 静态方法

他们两者的区别是什么?有什么作用?

一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的.

两者的区别就是:静态代码块是自动执行的;
静态方法是被调用的时候才执行的.

作用:静态代码块可用来初始化一些项目最常用的变量或对象;静态方法可用作不创建对象也可能需要执行的代码.




分享到:
评论

相关推荐

    Java中的Static块与静态方法

    System.out.println("静态块执行"); staticVar = 10; } // 静态方法 public static void staticMethod() { System.out.println("静态方法调用"); } public static void main(String[] args) { // 在main...

    java中static作用

    如果 static 代码块有多个,JVM 将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。 静态变量和实例变量的区别 静态变量和实例变量是两种不同的变量类型。静态变量在内存中只有一个拷贝,...

    java中的static变量,方法,代码块

    `static`代码块,或称静态代码块,是在类初始化过程中执行的一段代码。不同于普通的代码块,静态代码块在类加载时由JVM自动执行,并且只执行一次。这意味着静态代码块常被用来初始化静态变量或执行类级别的操作。多...

    static在Java语言中的作用

    `static`关键字在Java语言中具有重要作用,主要用于定义静态成员变量、静态方法、静态代码块以及静态内部类等。使用`static`关键字可以使某些属性和方法独立于类的实例存在,从而达到节省资源、提高效率的目的。下面...

    static 在java中的作用

    ### static在Java中的作用 `static`是Java语言中的一个关键字,主要用来修饰类成员(变量、方法或代码块),其核心功能在于定义类级别的共享属性。通过使用`static`,可以实现对类属性和方法的共享访问,而无需创建...

    TIA博途中FB和FC块里的IN,Inout,Out的区别以及Static和Temp变量的用法.docx

    在调用FB或FC时,你可以设定Inout变量的初始值,然后在块内部,这个值可能被修改,并在块执行结束后返回给调用者。这种变量类型常用于需要在调用前后更新或处理的值。 3. Out参数:Out参数是单向输出变量,只能由...

    构造函数与静态块的执行顺序

    在探讨继承中子类与父类构造函数及静态块的执行顺序时,我们首先需要理解构造函数和静态块的基本概念及其在Java中的作用。构造函数主要用于初始化对象的状态,而静态块则是在类加载到内存中时执行的一段代码,通常...

    C/C++中static作用

    - **作用域**:尽管存储于全局数据区,静态局部变量的作用域仍限于其所在函数或代码块,超出范围则无法访问。 ##### 3、静态函数 静态函数是在其声明前添加`static`关键字的函数,这类函数只在其所在文件内可见,...

    要static还是不要static?

    本文将深入探讨 "static" 关键字的含义、用途以及何时选择使用或不使用它。我们将通过分析《要 static 还是不要 static?》这篇博客中的观点,结合具体的代码示例 `InnerInterfaceNotStaticTest.java` 来阐述这个...

    关于static关键字的总结

    static 关键字有两种情况下会被用到: 1. 只想为某特定数据分配一块内存空间,不需考虑创建多少对象,设置无需创建对象。 2. 不希望这个方法,与包含它的类的任何一个实例关联在一起,也就是说,不创建对象,一样...

    java static块和构造函数的实例详解

    Java static 块和构造函数是 Java 编程语言中两个非常重要的概念,它们在 Java 程序的执行过程中扮演着重要的角色。今天,我们将深入探讨 Java static 块和构造函数的实例详解,帮助大家更好地理解和掌握 Java 编程...

    final和static用法详解JAVA

    static 块是 Java 中的一种特殊的块,它用于在类加载时执行一些初始化操作。static 块只能访问 static 变量和其他 static 方法。 final 和 static 关键字是 Java 中两个重要的访问修饰符,它们可以帮助开发者更好地...

    Java static静态初始快

    当我们讨论“Java static静态初始化块”时,我们关注的是如何在类加载时执行特定的初始化代码。 首先,让我们理解`static`关键字的基本概念。`static`在Java中用于声明类变量或静态方法,这些变量和方法不需要创建...

    Java中的static关键字

    静态代码块的定义:不包含在任何方法体中,当类被加载时,自动执行静态代码块,而且只被执行一次,它的作用是:经常用于实现类属性的初始化。 在 Java 中,类装载器把一个类装入 Java 虚拟机中,要经过三个步骤来...

    java中static作用详解

    在Java编程语言中,`static`关键字扮演着至关重要的角色,它允许我们定义静态成员变量、静态方法和静态初始化块。这些静态元素具有以下几个关键特点: 1. **静态变量(Static Variables)**: - 静态变量是属于类...

    static的使用方法

    本篇文章将深入探讨`static`的使用方法、原理及其在代码块中的应用。 首先,我们要理解`static`修饰符的基本含义。`static`关键字用于声明类变量(也称为静态变量)和类方法(静态方法)。这些成员是与类本身相关联...

    继承与static精选例题

    这是因为`static`代码块会在类加载时执行,而类加载是先于任何对象创建的。 2. **创建Z实例**:之后执行`main()`方法,在`main()`方法中创建了一个`Z`类的实例。因为`Z`类继承自`X`类,所以在创建`Z`实例时会先...

    Java静态代码块作用及执行顺序解析

    Java静态代码块作用及执行顺序解析 Java静态代码块是Java语言中的一种特殊代码块,它们在类加载的时候执行,且只执行一次。它们通常用来初始化静态变量、设置静态变量的初始值等。静态代码块的作用域是整个类,而...

    Java静态初始化块和对象初始化块

    静态初始化块是以`static`关键字标识的代码块,它在类被加载到Java虚拟机(JVM)时执行,且只执行一次。静态初始化块常用于设置类级别的变量,或者执行只应执行一次的初始化操作。例如,如果一个类需要在程序运行前...

    C语言中static的作用.pdf

    1. 静态变量的存储期:当static关键字用于局部变量时,它使得变量具有静态存储期,意味着该变量的生命周期贯穿整个程序运行期间,而不是仅在声明它的函数或代码块执行时存在。静态局部变量会保留上一次函数调用时的...

Global site tag (gtag.js) - Google Analytics