我有一个静态嵌套类StatClass,文件名是Example.java
class OuterClass
{
public static class StatClass
{
System.out.println("Hello"); // This line doesn't work
void pow()
{ System.out.println("Hello W");}
}
}
public class Example
{
public static void main(String[] args)
{
OuterClass.StatClass statInner1 = new OuterClass.StatClass();
statInner1.pow();
}
}
第一个println语句不能在静态嵌套类中工作,即如果删除它然后程序编译,虽然println语句在pow()方法内部工作时,无法理解这个
答案 0 :(得分:4)
与普通班级一样,你不能只在一个班级中加入语句。你可以将它放在这样的初始化块中:
{
System.out.println("Hello");
}
或者在构造函数或方法中。无论你想要什么。
答案 1 :(得分:1)
到目前为止,我只是将这两个答案联合起来:
一个选项是静态块
(map (fn [[k v]]
(into {:path k}
(map #(vector (keyword (str "sizeon" (:date %)))
(:size %))
v)))
(group-by :path data))
;;({:path "first", :sizeon1 "1 gb", :sizeon3 "0.9 gb"}
;; {:path "second",
;; :sizeon1 "500 mb", :sizeon2 "700 mb",
;; :sizeon3 "400 mb", :sizeon5 "900 mb"})
主要区别在于JVM如何执行块。在第一种情况下,它在类初始化期间执行一次。然后输出将是:
您好 你好W 你好W
另一个选项是初始化块,在这种情况下,代码将在类的每个实例化上执行。
class OuterClass
{
public static class StatClass
{
static {
System.out.println("Hello"); // This line doesn't work
}
void pow()
{ System.out.println("Hello W");}
}
}
public class Example
{
public static void main(String[] args)
{
OuterClass.StatClass statInner1 = new OuterClass.StatClass();
statInner1.pow();
OuterClass.StatClass statInner2 = new OuterClass.StatClass();
statInner2.pow();
}
}
然后输出将是:
Hello Hello W Hello Hello W
答案 2 :(得分:0)
以下声明是不可行的方法
System.out.println("Hello"); // This line doesn't work
您必须将这些语句包装在静态块中,如下所示
static{
System.out.println("Hello"); // This line will work
}
此块将在JVM
创建静态实例时执行。
答案 3 :(得分:0)
_childDocuments_
这不起作用,因为控件永远不会出现在线上。除非你在函数内定义它并使用你创建的对象来调用它,或者使用静态块,它不需要对象来调用它或初始化块,它将不起作用。我希望有帮助