作者:wasw100
网址:http://www.wasw100.com/java/java_static_time.html
先放一个引用:http://www.iteye.com/topic/11003
引用
其实我想事实是这样的:
一个类的运行,JVM做会以下几件事情 1、类装载 2、链接 3、初始化 4、实例化;而初始化阶段做的事情是初始化静态变量和执行静态方法等的工作。所以,当Class.forName(args[0],true,off.getClass().getClassLoader());中的true变为false的时候,就是告诉JVM不需再load class之后进行initial的工作。这样,将initial的工作推迟到了newInstance的时候进行。所以,static块的绝对不是什么“只是在类被第一次实体化的时候才会被仅仅调用一次”,而应该是在类被初始化的时候,仅仅调用一次。
有上面的引用可知,static块在类加载的时候执行,但是什么时候类加载? 首先明确不是在类加载的时候执行,可以像写jdbc的时候:
Class.forName("com.mysql.jdbc.Driver");
这样就会加载并初始化程序,但不实例化,具体可以参考:
http://tech.it168.com/j/d/2007-01-09/200701091303176.shtml
jdbc只需加载并初始化,无需实例化。
在javaApi中有:
newInstance 实例化
创建此 Class 对象所表示的类的一个新实例。如同用一个带有一个空参数列表的 new 表达式实例化该类。如果该类尚未初始化,则初始化之。
可见初始化可以在Class.forName(第二个参数为true)的时候进行,或者在第一次实例化的时候,如果没有初始化先初始化。
--EOF--
分享到:
相关推荐
在调用FB或FC时,你可以设定Inout变量的初始值,然后在块内部,这个值可能被修改,并在块执行结束后返回给调用者。这种变量类型常用于需要在调用前后更新或处理的值。 3. Out参数:Out参数是单向输出变量,只能由...
1. 首先执行静态代码块 `static { ... }`,打印出 "调用userSay静态方法" 和 "进入静态构造代码块"。 2. 其次执行实例代码块 `{ System.out.println("进入代码块"); }`,打印出 "进入代码块"。 3. 最后执行 `main` ...
System.out.println("静态代码块执行"); // 初始化静态变量 } } ``` 2. 构造器代码块: 构造器代码块,也称为初始化块,不包含`static`关键字。每当创建一个类的新实例时,这些代码块就会被执行。它们可以与构造...
在C#编程中,了解如何计算代码片的执行时间对于性能优化和理解代码效率至关重要。本文将深入探讨如何实现这一目标,以及相关的知识点。 首先,要精确测量代码执行时间,我们可以利用C#中的`Stopwatch`类。`...
静态变量在类加载时就已经初始化完毕,而Spring Bean的初始化通常发生在应用程序启动过程中,两者的时间点不同步。因此,直接在静态变量上使用`@Value`会导致注入失败,并且在编译或运行时出现警告或错误信息。 ###...
当类被加载时,静态初始化块会按照它们在代码中的顺序执行一次。 2. 静态初始化块可以用于更复杂的初始化逻辑,比如读取配置文件来初始化静态变量。 五、静态导入 1. Java允许使用`import static`语句导入类的...
静态代码块由`static`关键字修饰,它们在类加载时执行,且只执行一次。静态代码块通常用于初始化静态变量,可以包含输出语句,但不能直接访问非静态成员。如果有多个静态代码块,会按照它们在源码中的顺序依次执行。...
每当执行流进入一个新的代码块,该代码块中的自动变量就会被创建并初始化,一旦执行流离开这个代码块,这些变量就会被销毁。 #### 三、存储类修饰符详解 - **auto**:`auto`关键字主要用于在函数体内声明变量,...
这些变量在声明时由操作系统动态分配内存空间,这个空间仅在当前块执行期间有效。一旦块执行完毕,操作系统会回收这个空间,释放内存。因此,Temp变量的生命周期与调用它的块紧密相关。 在递归调用的情况下,例如一...
当一个方法或代码块被`synchronized`修饰时,同一时间只能有一个线程访问它,从而强制执行顺序。 ```java public class SynchronizedOrder { private synchronized void printOrder(String name) { for (int i = ...
功能块是一种结构化编程元素,它包含了一组输入、输出和局部变量,用于执行特定的功能。FB可以看作是一个黑盒子,输入参数传递数据给FB,FB根据内部算法处理这些数据,并通过输出返回结果。FB可以在程序的不同位置...
Java中的`static`关键字是一个非常重要的概念,它在编程中扮演着多种角色。本文将全面解析`static`关键字的用途、...在实际编程中,要根据需求选择合适的时间和地点使用`static`,以避免可能引入的复杂性和潜在的问题。
B)round 执行 1 次时间片轮转操作,其方法为运行高优先级队列的第 1 个,再降低其优先级,插入到相应的队列中 C)ps 查看当前进程状态 D)sleep 命令将进程挂起 E)awake 命令唤醒 1 个被挂起的进程 F)kill 命令杀...
在实际项目中,配置文件(如`配置LyzListener.txt`)通常用于存储定时任务的参数,比如执行时间。这样,我们可以通过读取配置文件来动态调整定时任务的设置,而无需修改代码。可以使用`java.util.Properties`类加载...
被static修饰的代码块,我们称之为静态代码块,静态代码块会随着类的加载一块执行,而且他可以随意放,可以存在于该类的任何地方。 三、static的局限 static确实是存在诸多的作用,但是它也存在一些缺陷。 1. 它...
Java提供了`synchronized`关键字来实现线程同步,确保同一时刻只有一个线程执行特定代码块。 - **死锁**:如果两个或多个线程相互等待对方释放资源,就会发生死锁。避免死锁的关键是避免循环等待。 - **线程安全**:...
STA主要分为两种分析方式:**基于路径的分析(Path-Based Analysis)** 和 **基于块的分析(Block-Based Analysis)**。 - **Path-Based Analysis**: 这种方法着重于单独分析电路中的每一条路径,并根据输入信号...
Java 实现等待所有子线程结束后再执行一段代码的方法 Java 是一种多线程编程语言,多线程编程可以提高程序的运行效率和响应速度,但是它也带来了许多挑战,如线程之间的通信、同步和死锁等问题。在 Java 中,实现...
下面是一个简单的使用`Stopwatch`类计算程序执行时间的步骤: 1. **创建实例**:首先,你需要创建一个`Stopwatch`对象,如`System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();`。 2. **开始...
2. **性能提升**:由于任务栈空间在编译时确定,启动时即可初始化,减少了启动时间,提高了系统响应速度。 3. **代码可预测性**:静态任务在代码编译阶段就能完全确定,增强了软件的可预测性和可靠性。 在实现静态...