黑马程序员技术交流社区
标题:
静态初始化疑问[
[打印本页]
作者:
李文肖
时间:
2011-10-9 14:40
标题:
静态初始化疑问[
class Cup{
Cup(int marker){
System.out.println("cup("+ marker +")");
}
void f(int marker){
System.out.println("f("+marker+")");
}
}
class Cups{
static Cup cup1;
static Cup cup2;
static {
cup1 = new Cup(1);
cup2 = new Cup(2);
}
Cups() {
System.out.println("Cups()");
}
}
public class JingTai {
public static void main(String[] args){
System.out.println("Inside main()");
Cups.cup1.f(99);
}
}
输出结果为
Inside main()
cup(1)
cup(2)
f(99)
为什么没输出Cups()
谢谢
作者:
林国锋
时间:
2011-10-9 14:57
你没有new Cups()实例
public static void main(String[] args){
System.out.println("Inside main()");
Cups cups = new Cups(); // 要实例化
Cups.cup1.f(99); // 这里只是调用Cups里面的静态方法,不会实例化该对象
}
作者:
王春艳
时间:
2011-10-9 14:58
修改后:
class Cup{
Cup(int marker){
System.out.println("cup("+ marker +")");
}
void f(int marker){
System.out.println("f("+marker+")");
}
}
class Cups{
static Cup cup1;
static Cup cup2;
static {
cup1 = new Cup(1);
cup2 = new Cup(2);
}
void Cups() { //方法没返回值的时候
System.out.println("Cups()");
}
}
public class JingTai {
public static void main(String[] args){
System.out.println("Inside main()");
Cups.cup1.f(99);
Cups c = new Cups();
c.Cups(); //你的程序根本没调用怎么会输出呢
}
}
修改后输出结果:
Inside main()
cup(1)
cup(2)
f(99)
Cups()
作者:
黄治文
时间:
2011-10-9 15:02
Cups()是一个无参的构造方法,你并没有使用该无参构造方法实例化一个对象,当然不会输出了
作者:
张雷
时间:
2011-10-9 15:28
类装载步骤
在Java中,类装载器把一个类装入Java虚拟机中,要经过三个步骤来完成:装载、链接和初始化,其中链接又可以分成校验、准备和解析三步,除了解析外,其它步骤是严格按照顺序完成的,各个步骤的主要工作如下:
装载:查找和导入类或接口的二进制数据;
链接:执行下面的校验、准备和解析步骤,其中解析步骤是可以选择的;
校验:检查导入类或接口的二进制数据的正确性;
准备:给类的静态变量分配并初始化存储空间;
解析:将符号引用转成直接引用;
初始化:激活类的静态变量的初始化Java代码和静态Java代码块。
初始化类中属性是静态代码块的常用用途,但只能使用一次。
Cups.cup1.f(99);
通俗的讲
静态代码块在出现这个类的类名的时候就执行; 就是类被点名就执行。
只有用到类的内容时,类才会被加载。
而你并没有创建这个类的对象。也没用到里面的内容。
所以这个类没有被加载
而 静态代码块 在出现这个类的类名的时候就执行; 就是类被点名就执行。
所以就只执行 静态代码块里面的。
static {
cup1 = new Cup(1);
cup2 = new Cup(2);
}
cup1 = new Cup(1);
cup2 = new Cup(2);
这一个类用到了new,也就是用到了 构造有参函数
Cup(int marker){
System.out.println("cup("+ marker +")");
}
new 了 2次 所以加载2次
输出
cup(1)
cup(2)
然后.
cup1.f(99);
调用 方法
输出
f(99)
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2