qq_38002646
2017-03-21 08:26
采纳率: 100%
浏览 848
已采纳

有谁能帮忙,理解一下这段代码的输出,在eclipse下运行有输出,没看懂输出

package StaticTests;

class StaticSuper{
static {
System.out.println("super static block");
}
StaticSuper(){
System.out.println("super constructor");
}
}
public class StaticTests extends StaticSuper {
static int rand;
static{
rand=(int)(Math.random()*6);
System.out.println("static block "+ rand);
}
StaticTests(){
System.out.println("constructor");
}
public static void main(String[] args){
System.out.println("in main");

StaticTests st = new StaticTests();
}
}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • 苦乐斋主 2017-03-21 08:29
    已采纳
     static {
    System.out.println("super static block");
    }
    static{
    rand=(int)(Math.random()*6);
    System.out.println("static block "+ rand);
    }
    
    

    static是静态的,只要类加载就会执行这部分代码块

    点赞 评论
  • 雾朦胧 2017-03-21 08:43

    static代码块是在类加载的时候就执行的,且父类是先于子类加载,先输出父类的静态代码块,然后执行子类的代码块,接下来就看main方法里的代码,构造方法只有在创建对象的时候才会被调用,创建那个类的对象才执行那个类的构造方法,创建子类的对象不会执行父类的构造方法

    点赞 评论
  • crazy_monky 2017-03-21 08:53

    1.static静态模块表示只要类加载(意思是说只要用到关于此类的任意东西)都会先执行该类的静态模块。
    2.extends继承的特性,子类实例化时会先执行父类的构造方法再执行本类的构造方法,类加载时也会先加载父类,再加载子类。
    这个结果应该是:
    super static lock(先执行父类的静态模块)
    static block + rand(再执行本类的静态模块)
    in main(该语句在实例化之前,理应先执行)
    super constructor(执行父类的构造方法)
    constructor(执行本类的构造方法)

    点赞 评论
  • qq_38002646 2017-03-21 08:53

    public static void main中,static是理解为静态的变量还是静态的类???

    点赞 评论
  • myibu 2017-03-21 09:16

    static是Java语言中表示静态的关键词,当用static声明类的成员方法时,这个成员方法对应的字节码文件会被Java解释器java.exe优先加载到内存中执行。public static void main中的static表示一个静态的方法,因为main方法总是程序的入口,所以public static void main总是不变的

    点赞 评论

相关推荐 更多相似问题