从Java的Hello,World!说到Static Block
2011-05-09 18:57 会被淹死的鱼 阅读(862) 评论(0) 编辑 收藏 举报一般最常见的HelloWorld是这样的
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
public class Hello {
static {
System.out.println("Hello, World!");
}
public static void main(String[] args) {
}
}
上述两个的运行结果都是
Hello, World!
静态块会在main函数运行前被执行, 从下面的例子, 我们可以看出他们的执行顺序
public class Hello {
static {
System.out.println("Hello, World from static block!");
}
public static void main(String[] args) {
System.out.println("Hello, World from main!");
}
}
执行结果如下:
Hello, World from static block!
Hello, World from main!
我们可以看到, 是static块在类加载的时候就执行了.
你也可以在static块输出了HelloWorld之后就退出, 不会执行main方法
public class Hello {
static {
System.out.println("Hello, World from static block!");
System.exit(0);
}
public static void main(String[] args) {
System.out.println("Hello, World from main!");
}
}
输出结果为
Hello, World from static block!
深入static block
这个static block是在类第一次加载的时候运行, 请看下面的例子, Hello和Hello2两个类, Hello2中引用了Hello的main方法.
public class Hello {
static {
System.out.println("Hello, World from static block!");
}
public static void main(String[] args) {
System.out.println("Hello, World from main!");
}
}
static和main中分别输出一句话
public class Hello2 {
public static void main(String[] args) {
Hello.main(args);
Hello.main(args);
}
}
我们来运行Hello2的main方法, 输出结果如下
Hello, World from static block!
Hello, World from main!
Hello, World from main!
我们可以看到在第一次运行Hello.main的时候, static block运行了, 第二次运行Hello.main的时候, static block没有执行
我们修改一下Hello2
public class Hello2 {
public static void main(String[] args) {
try {
Class.forName("Hello");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
加载Hello类, 输出如下
Hello, World from static block!
如果在加载Hello类后, 再运行Hello的main方法了
public class Hello2 {
public static void main(String[] args) {
try {
Class.forName("Hello");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Hello.main(args);
Hello.main(args);
}
}
输出结果如下
Hello, World from static block!
Hello, World from main!
Hello, World from main!
这说明, static block是在第一次加载类的时候执行的. 在实际开发中, 这经常用来加载数据库的JDBC驱动.
MySQL的JDBC驱动中有这样一段代码
// Register ourselves with the DriverManager
static {
try {
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
作者:icejoywoo
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
短网址: http://goo.gl/ZiZCi