java中仅由{ }包裹的代码块的执行原理
今天写代码练手,发现了一个奇怪的问题。程序代码如下所示
main方法上面的一部分是由大括号包裹起来的,可以无障碍的顺利执行,现在可知代码块不是static的
我想请问各方大侠,这种直接由{ }包裹的无名代码块的执行原理,这代码块为何可以执行?
public class NodeTest {
Node node1=new Node("Monday");
Node node2=new Node("Tuesday");
Node node3=new Node("Wenseday");
Node node4=new Node("Friday");
{
node1.next=node2;
node2.next=node3;
System.out.println(node1.next.next.date);
System.out.println("-------------");
node1.next=node4;
node4.next=node2;
System.out.println(node1.next.next.next.date);
System.out.println("-----------------");
node4.next=node3;
node3.next=null;
System.out.println(node1.next.next.date);
}
public static void main(String[] args) {
NodeTest nt=new NodeTest();
}
}
class Node{
String date;
Node next;
public Node(String date){
this.date=date;
}
}
------解决方案--------------------楼上不要误导,静态代码块是有static关键字的。
比如:
static{
System.out.println("aaa");
}
而直接有大括号括起来的是在构建对象时会调用的,如
public class Test {
{
System.out.println("aaa");
}
public static void main(String[] args) {
new Test();
}
}
------解决方案--------------------http://yuyiming.iteye.com/blog/1260767