我用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方法时
//回答请写明原因,因为我对这个比较困惑,采纳加分。 展开
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方法时
//回答请写明原因,因为我对这个比较困惑,采纳加分。 展开
5个回答
展开全部
静态代码块中的代码
会在它所在的类第一次被加载到内存时执行
所以此题选择C
这是java中强制性就这么规定的,没有为什么
jvm装载类的过程如下
在Java中,类装载器把一个类装入Java虚拟机中,要经过三个步骤来完成:装载、链接和初始化,其中链接又可以分成校验、准备和解析三步,除了解析外,其它步骤是严格按照顺序完成的,各个步骤的主要工作如下:
装载:查找和导入类或接口的二进制数据;
链接:执行下面的校验、准备和解析步骤,其中解析步骤是可以选择的;
校验:检查导入类或接口的二进制数据的正确性;
准备:给类的静态变量分配并初始化存储空间;
解析:将符号引用转成直接引用;
初始化:激活类的静态变量的初始化Java代码和静态Java代码块。
初始化类中属性是静态代码块的常用用途,但只能使用一次。
所以只要这个类被加载到内存,静态代码块就会执行,和你是否创建了这个类的对象无关
会在它所在的类第一次被加载到内存时执行
所以此题选择C
这是java中强制性就这么规定的,没有为什么
jvm装载类的过程如下
在Java中,类装载器把一个类装入Java虚拟机中,要经过三个步骤来完成:装载、链接和初始化,其中链接又可以分成校验、准备和解析三步,除了解析外,其它步骤是严格按照顺序完成的,各个步骤的主要工作如下:
装载:查找和导入类或接口的二进制数据;
链接:执行下面的校验、准备和解析步骤,其中解析步骤是可以选择的;
校验:检查导入类或接口的二进制数据的正确性;
准备:给类的静态变量分配并初始化存储空间;
解析:将符号引用转成直接引用;
初始化:激活类的静态变量的初始化Java代码和静态Java代码块。
初始化类中属性是静态代码块的常用用途,但只能使用一次。
所以只要这个类被加载到内存,静态代码块就会执行,和你是否创建了这个类的对象无关
展开全部
C. 第一次将StaticTest类型装载进内存时
静态代码块、静态构造函数都是在第一次装在类的时候执行的,且只执行一次
静态代码块、静态构造函数都是在第一次装在类的时候执行的,且只执行一次
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
应该选C
static 与类相关,当第一次访问静态变量或实例化的时候,static静态变量和代码块等就会被初始化,且仅有一次,多对象共享
static 与类相关,当第一次访问静态变量或实例化的时候,static静态变量和代码块等就会被初始化,且仅有一次,多对象共享
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
静态代码块会优先执行,在将StaticTest类型装载进内存时就执行了,然后以后每新建个对象,就执行一次
选C
选C
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2015-07-06
展开全部
选C
static {
System.out.println("Hi there");
}
是独立出来的相当于全局变量 也就是这个类加载就会执行存在了static也可以修饰变量道理一样的 只不过你这个是执行的输出语句而不是赋值语句
static {
System.out.println("Hi there");
}
是独立出来的相当于全局变量 也就是这个类加载就会执行存在了static也可以修饰变量道理一样的 只不过你这个是执行的输出语句而不是赋值语句
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询