最近一在回顾Java中的一些知识,这里跟大家一起学习一下静态代码块,和构造代码块。
首先,代码就是巴拉巴拉一些定义呀,赋值啊,运算的一些java代码,用两个大括号括起来,就变成了神奇的代码块
{ a=3; } static{ b=4; }
就像上面那个样子。
括号加了static修饰就变成了静态代码块,大家记住哦,只要加了static这个东西只后,后面那个东东就是静态的,而且只能操作静态的东东。
比如静态方法,静态变量,静态指针,当然java里没有指针。
然后我用了一个小代码去理解这两个概念,上代码
class Man{ private String name = "X"; private int age; private static boolean isMan ; public void showMan(){ System.out.println(name); System.out.println(age); } public static void showManStatic(){ System.out.println(isMan); } { //代码块1 System.out.println("--------block 1--------"); age = 10; showMan(); } public String getName(){ return name; } public int getAge(){ return age; } Man(){ System.out.println("creator"); name = "Seeee"; } static { //静态代码块 ,只能操作静态成员 isMan System.out.println("我是静态代码块1"); //showMan(); 这个很重要,showMan是普通成员函数,不是静态的,所以不能用 showManStatic(); //这个就可以哦 System.out.println("isMan"+isMan); isMan = true; } {//代码块2 System.out.println("--------block 2--------"); age = 12; showMan(); } {//代码块3 System.out.println("--------block 3--------"); age = 13; showMan(); } static { //静态代码块2 System.out.println("我是静态代码块2"); } } class Test{ public static void main(String[] args){ Man m = new Man(); System.out.println(m.getName()); System.out.println(m.getAge()); } } /////////////////////////////////////////////下面是结果 我是静态代码块1 false isManfalse 我是静态代码块2 --------block 1-------- X 10 --------block 2-------- X 12 --------block 3-------- X 13 creator Seeee 13
神奇吧,static代码块首先被调用,而且只能调用静态方法和静态成员变量,记住,这一堆东西都是静态的哦。
然后才是普通代码块,估计是因为经常被人用于对象初始化吧,所以也叫构造代码块,而且顺序跟上下顺序一样,1到2再到3,静态也是这样,最后才是开始构造对象。
这玩意咋理解,其实我也不大了解,如果有大神知道的话,能告诉小弟。
原文:http://www.cnblogs.com/mulog/p/5698416.html