Java static属性和静态代码块和构造方法等的执行顺序探讨
2015-06-29 21:49
746 查看
Java在它开始运行之前并非被完全加载,其各个部分仅在必需时才加载。
import java.awt.Color;
import smallbird.Tools;
public class Parent {
public static final String RG_CODE="025";
public static String CITY_NAME="南京";
public static Color COLOR_RED=new Color(255,0,0);
public static final Object obj=new Child();
static {
System.out.println("static code block."+Tools.getNowDate());
}
public Parent() {
System.out.println("Parent's Constructor."+Tools.getNowDate());
}
public void speak() {
System.out.println("Parent's speak.");
}
}
1、建议将一些常量声明为final static编译期常量。
若仅声明为static,打印Parent.CITY_NAME时会先执行静态代码块,而打印Parent.RG_CODE却不会。
public static final Color COLOR_RED=new Color(255,0,0); 引用类似这些非常数静态域时会执行static代码块,
2、使用.class来获得对类的引用不会初始化
3、先初始化静态属性,再执行静态代码块
System.out.println("test: "+new Parent());
执行结果:
Parent's Constructor.2015-06-29 22:06:55,577
Child's Constructor.
static code block.2015-06-29 22:06:55,578
Parent's Constructor.2015-06-29 22:06:55,578
test: basic.Parent@ae94e92
import java.awt.Color;
import smallbird.Tools;
public class Parent {
public static final String RG_CODE="025";
public static String CITY_NAME="南京";
public static Color COLOR_RED=new Color(255,0,0);
public static final Object obj=new Child();
static {
System.out.println("static code block."+Tools.getNowDate());
}
public Parent() {
System.out.println("Parent's Constructor."+Tools.getNowDate());
}
public void speak() {
System.out.println("Parent's speak.");
}
}
1、建议将一些常量声明为final static编译期常量。
若仅声明为static,打印Parent.CITY_NAME时会先执行静态代码块,而打印Parent.RG_CODE却不会。
public static final Color COLOR_RED=new Color(255,0,0); 引用类似这些非常数静态域时会执行static代码块,
2、使用.class来获得对类的引用不会初始化
3、先初始化静态属性,再执行静态代码块
System.out.println("test: "+new Parent());
执行结果:
Parent's Constructor.2015-06-29 22:06:55,577
Child's Constructor.
static code block.2015-06-29 22:06:55,578
Parent's Constructor.2015-06-29 22:06:55,578
test: basic.Parent@ae94e92
相关文章推荐
- javaapi中的排序
- Java实现栈和队列
- spring 源码解读与设计详解:8 Spring配置文件的读取与容器装配详析
- 如何从零开始学习Java语言
- spring 源码解读与设计详解: 7 BeanDefinitionParserDelegate深入解读
- Java基础总结之反射
- Spring-mvc传参数
- sphinx 中的注解,及java Annotation 总结
- Java学习03--变量的强制转换、字符运算
- Struts中的常量
- SAX读取xml文件的方法总结
- sh_Spring整合Hibernate
- scala与java对比学习(一)
- 【Spring MVC】spring mvc中相同的url请求返回不同的结果
- 【java0007】多线程卖票(一)
- 在Eclipse或者ADT中使用ButterKnifeZelezny,Android组件初始化从此变得简单易懂!!!!
- Java学习笔记(一)
- MyEclipse关闭异常
- Java学习笔记五(多线程)
- Java读书笔记四(集合类)