社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
今天犯了个很蠢的错误,简单的代码如下:
import java.util.ArrayList;
import java.util.List;
public class BlankTest {
public static void main(String[] args){
System.out.println("类的容器的大小:"+A.a.size());
A newa=new A();
System.out.println("实例的容器的大小:"+newa.a.size());
}
}
class A{
public static List<String> a;
public A(){
a=new ArrayList<>();
}
static {
a=new ArrayList<>();
a.add("adc");
a.add("def");
}
}
输出如下:
本来以为输出会是类和对象的容器大小都是2,其实真正的输出是类的容器大小是2,实例对象的容器大小为0.预测与实际有出入的原因是我设置了一个构造方法,由于构造方法是在static块后进行的,new一个新实例后容器a的大小又变成0了。
我这样写的本意是虽然这个容器属性默认为空,但是我使用默认构造方法得到一个实例后,就能得到一个非空的容器,但是其实静态块里的a=new ArrayList<>();
已经防止了访问空容器。我真的是个龙鸣哈哈哈。修改方法也很简单,就是把构造方法删掉就可以了。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!