Java初始化顺序

教鞭 2017-10-08 10:01:37
在测试初始化先后顺序时,加入了泛型,得到的结果颠覆认知。
我明明先执行的Qiu a = new Qiu();怎么会先执行static HuiYi ?!
-----------输出结果--------------
static block Qiu
static HuiYi
block Qiu
Qiu
block Qiu
Qiu

block HuiYi
HuiYi

------------------程序------------
package fanxing01;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

//回忆泛型知识点
class Qiu{
static{
System.out.println("static block Qiu");
}
{
System.out.println("block Qiu");
}
Qiu(){
System.out.println("Qiu");
}
protected int set(Integer a){
return 1;
}
protected void set(Double a){
// return 1;
}
}
//class Qiu2 extends Qiu{
// private void set(Integer a){
//
// }
//}
public class HuiYi<T> extends Qiu{
static{
System.out.println("static HuiYi");
}
HuiYi(){
System.out.println("HuiYi");
}
{
System.out.println("block HuiYi");
}
public void set(T a){
System.out.println(a);
}
public static<T> void setFromA2B(Collection<T> arr1,Collection<? super T> arr2){
for(T o : arr1){
arr2.add(o);
}
System.out.println(arr2);
}
public static void main(String[] args) {
Qiu a = new Qiu();
HuiYi<Integer> b = new HuiYi<>();

}
}
...全文
297 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_29529805 2017-11-09
  • 打赏
  • 举报
回复
静态块代码类加载的时候一起执行的,建议你看看http://www.cnblogs.com/wateriness/p/4531676.html
  • 打赏
  • 举报
回复
类加载的时候就会执行静态代码块 public static void main(String[] args) { //Qiu a = new Qiu(); //HuiYi<Integer> b = new HuiYi<>(); } 把两句代码注释掉之后执行程序还是会输出static语句

2,100

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧