我用java写了一个程序,不知道哪里有问题,请各位帮忙看看,谢谢 10

publicclassStaticTest{static{System.out.println("Hithere");}publicvoidprint(){System.... public class StaticTest {
static {
System.out.println("Hi there");
}
public void print() {
System.out.println("Hello");
}
public static void main(String args []) {
StaticTest st1 = new StaticTest();
st1.print();
StaticTest st2 = new StaticTest();
st2.print();
}
}

什么时候字符串“Hi there”会输出
A. 永远都不会输出 B. 创建st1和st2时
C. 第一次将StaticTest类型装载进内存时 D. 显示调用print方法时
//回答请写明原因,因为我对这个比较困惑,采纳加分。
展开
 我来答
lionheart1988
2015-07-06 · TA获得超过6445个赞
知道大有可为答主
回答量:5772
采纳率:72%
帮助的人:2461万
展开全部
静态代码块中的代码
会在它所在的类第一次被加载到内存时执行
所以此题选择C
这是java中强制性就这么规定的,没有为什么

jvm装载类的过程如下
在Java中,类装载器把一个类装入Java虚拟机中,要经过三个步骤来完成:装载、链接和初始化,其中链接又可以分成校验、准备和解析三步,除了解析外,其它步骤是严格按照顺序完成的,各个步骤的主要工作如下:
装载:查找和导入类或接口的二进制数据;
链接:执行下面的校验、准备和解析步骤,其中解析步骤是可以选择的;
校验:检查导入类或接口的二进制数据的正确性;
准备:给类的静态变量分配并初始化存储空间;
解析:将符号引用转成直接引用;
初始化:激活类的静态变量的初始化Java代码和静态Java代码块。
初始化类中属性是静态代码块的常用用途,但只能使用一次。

所以只要这个类被加载到内存,静态代码块就会执行,和你是否创建了这个类的对象无关
samismiling
2015-07-06 · 知道合伙人软件行家
samismiling
知道合伙人软件行家
采纳数:1340 获赞数:5604

向TA提问 私信TA
展开全部
C. 第一次将StaticTest类型装载进内存时
静态代码块、静态构造函数都是在第一次装在类的时候执行的,且只执行一次
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
query999
2015-07-06 · 超过58用户采纳过TA的回答
知道小有建树答主
回答量:139
采纳率:100%
帮助的人:106万
展开全部
应该选C

static 与类相关,当第一次访问静态变量或实例化的时候,static静态变量和代码块等就会被初始化,且仅有一次,多对象共享
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
游川螺柱
2015-07-06 · TA获得超过180个赞
知道小有建树答主
回答量:691
采纳率:0%
帮助的人:140万
展开全部
静态代码块会优先执行,在将StaticTest类型装载进内存时就执行了,然后以后每新建个对象,就执行一次
选C
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2015-07-06
展开全部
选C
static {
System.out.println("Hi there");
}
是独立出来的相当于全局变量 也就是这个类加载就会执行存在了static也可以修饰变量道理一样的 只不过你这个是执行的输出语句而不是赋值语句
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式