静态块

静态块

静态块是当类加载的时候,对象进行初始化才会被执行吧?而不是说类加载了就会执行静态块吧。

比如:

public class a{
private static List<User> userData=new ArrayList();
}
static{
给userData集合添加信息的代码....
}
//获取集合对象
public static List<User> getUsers(){
   return userData;
}

在另外一个类中当
a.getUsers();调用的时候,只有先new,才会执行static的代码吧?
那如果
public class Test {
private static List list=null;
static {
list=new ArrayList();
list.add("你好啊");
System.out.println("静态代码块执行");
System.out.println(list);
}
public static List getList(){
return list;
}
}
这样的情况,只声明了,但是没有实例化new,而是在静态代码块执行了,也可以执行阿。

总结了下:

如果new的话,当jvm加载类的时候,肯定会执行初始化, 正常情况下, jvm加载类的时候都会对其进行初始化, 只有初始化完成了, static才会被执行, 对吧?不new也会被初始化,new肯定会被初始化; 是这个理吗

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,同学理解有一点偏差,静态代码块在类加载的时候执行,也就是是在创建对象之前执行。也就是说在项目初始时,静态代码块就已经加载完成了。

    静态块常用来执行类属性的初始化,如:可以将某些需要在创建对象之前就赋值的变量或集合静态块中进行书写,提前进行初始

祝学习愉快!

  • rock221 提问者 #1

    我之前理解的也是类加载的时候会先执行静态块,但是网上说类加载后初始化才会执行静态块,不初始化不执行阿。 

    2021-04-22 16:00:30
  • 好帮手慕小尤 回复 提问者 rock221 #2

    同学你好,1、同学可以了解一下类的初始化,类的初始化是完成程序执行前的准备工作。在这个阶段,静态的(变量,方法,代码块)会被执行。同时在会开辟一块存储空间用来存放静态的数据。初始化只在类加载的时候执行一次。

    2、综上所示,类在加载时会进行类初始化,从而执行静态代码块。

    祝学习愉快!

    2021-04-22 17:35:36
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师