- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个类(class)学生是
package org.ahmed;
public class Student {
public Student() {
// TODO Auto-generated constructor stub
System.out.println("Generated constructor");
}
static { // static block
System.out.println("Hello world static");
}
{ // insance block
System.out.println("Hello world non static");
}
}
然后
public class Main {
public static void main(String[] args) throws ClassNotFoundException {
Class.forName("org.ahmed.Student"); // this line causing static block execution in Student class
// Student s; // this line doesn't execute the static block.
}
}
我知道通过使用 Class.forClass()
我们可以动态运行任何运行时类。但我对其他情况有一些疑问静态 block 。
如果我在 main
方法中使用 Class.forClass("org.ahmed.Student")
,那么它是执行 Student
的静态 block 。但是如果我声明 Student s
在main
方法不执行静态 block 。我想Class.forClass("ClassName")
等同于用变量声明类姓名。
最佳答案
加载一个类(JLS§5.3,我认为是JLS§5.4)和初始化一个类(JLS§5.5)是有区别的。默认情况下,Class.forName
会同时执行这两项操作,尽管有 an override you can use。这让您可以控制是否初始化该类。
只是声明一个Student
变量不会初始化类。事实上,即使引用 Student.class
也不会初始化该类。您必须执行一些操作来触发初始化,例如使用 new
、getstatic
、putstatic
或 invokestatic
的操作与类的字节码操作(但有关详细信息,请参阅 §5.5 的链接,还有其他初始化类的东西)。
例如,如果您给 Student
一个公共(public)字段:
public static String foo = "bar";
...然后在 Main.main
中你做了:
System.out.println(Student.foo);
... 将触发类的初始化。
关于java class.forClass() 与类声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40781063/
我有一个类(class)学生是 package org.ahmed; public class Student { public Student() { // TODO Aut
我只想测试 @FacesConverter 功能并卡在 forClass-atrribute 上 - 它不起作用 - 这是我的示例: 转换器类: @FacesConverter(forClass =
我有一个简单的复合组件,它必须呈现一个 inputText。当输入值并按下 commandButton 时,抛出以下异常: java.lang.IllegalArgumentException: Ca
我正在学习spring和hibernate,我使用IDEA编辑我的项目,它说无法解析“DetachedCriteria criteria = new DetachedCriteria.forClass
我安装了 OmniFaces 1.6,并创建了带注释的类 @FacesConverter(forClass=MyClass.class) 在 GlassFish 中的项目部署期间,我有几个磨损: IN
我安装了 OmniFaces 1.6,并创建了带注释的类 @FacesConverter(forClass=MyClass.class) 在 GlassFish 中的项目部署过程中,我有几个问题: I
我是一名优秀的程序员,十分优秀!