静态嵌套类不能使用print

时间:2016-07-20 11:11:37

标签: java inner-classes

我有一个静态嵌套类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()方法内部工作时,无法理解这个

4 个答案:

答案 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_

这不起作用,因为控件永远不会出现在线上。除非你在函数内定义它并使用你创建的对象来调用它,或者使用静态块,它不需要对象来调用它或初始化块,它将不起作用。我希望有帮助