黑马程序员技术交流社区

标题: 由静态代码块引出的考试题小结 [打印本页]

作者: 安路凤    时间: 2012-5-5 13:54
标题: 由静态代码块引出的考试题小结
class StaticCode
{
        int num=2;
        StaticCode()//空参构造函数 - 给对应函数初始化
        {
                System.out.println("B");
        }
        static      //静态代码块 - 给类初始化,优先于任何对象,类一加载就存在了
        {
                System.out.println("A");
        }
        {           //构造代码块 - 给所有对象初始化 优先于构造函数,对象一创建就存在
                System.out.println("c"+this.num);      //可以访问非静态
        }
        StaticCode(int x)//构造函数 - 给对应函数初始化
        {
                System.out.println("D");
        }
        public static void show()//静态成员方法
        {
                System.out.println("show run");
        }
}

public class StaticCodeDemo {

                public static void main(String[] args) {
                new StaticCode(4);  //加载StaticCode类
                               
               
        }
        }
运行结果为 :
A
c2
D
大家是不是觉得基础知识很重要呢,否则又怎么知道谁先谁后呢...
由此可以加深领悟类、对象、静态代码块、代码块在内存中存在的先后顺序

作者: 赵玮_Tom    时间: 2012-5-5 14:09
替凤姐总结一下{:soso_e113:},类加载过程中,各种代码的执行顺序:
1.类加载过程中,静态代码块最先执行,而且只执行一次(静态代码块的作用是为整个类初始化)
2.构造代码块执行,可执行多次(为所有对象初始化)
3.相应参数类型的构造函数执行(如果构造函数中采用this调用了其他构造函数,会先执行被调用的构造函数)
注:静态方法也会随着类的加载而加载,但静态函数需要被类或对象调用时才会执行。(本例中未打印“show run”的原因。“加载”不同于“执行”!)
作者: 安路凤    时间: 2012-5-5 14:14
赵玮_Tom 发表于 2012-5-5 14:09
替凤姐总结一下,类加载过程中,各种代码的执行顺序:
1.类加载过程中,静态代码块最先执行, ...

hia hia hia  
总结的很给力哦!!
看来我要加强总结这个技能咯!!:lol
作者: It's_Zero    时间: 2012-5-12 22:43
静态代码块 >   构造代码块  >    构造函数   (构造代码块运行需要new 对象才会运行)
作者: 黑马-王建雨    时间: 2012-5-13 11:13
凤姐 大爱
作者: 逄焕玮    时间: 2012-5-13 12:35
毕老师在视频6.7节中帮我们总结的

对象的初始化过程

Person p = new Person("SCH",10);
这句话做的事情如下:

①因为new用到了Person.class类文件,所以会先找到Person.class类文件并加载到内存中
②执行该类中的static代码块(如果有的话),给Person.class类进行初始化
③在堆内存中开辟空间,分配内存地址
④在堆内存中建立对象的特有属性,并对其进行默认初始化
⑤对属性进行显式初始化
⑥对对象进行构造代码块初始化
⑦对对象进行对应的构造方法初始化
⑧将③中分配好的内存地址赋值给栈内存中的引用变量p
作者: 黑马张立国    时间: 2012-5-13 13:00
应该是这样的吧
静态代码块 > 主函数 > 构造代码块 >  构造函数
(没有主函数,静态代码块一样运行,运行完后就报错)。。。
例如:
class Demo{
static{
System.out.println("haha");
}
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2