黑马程序员技术交流社区
标题:
由静态代码块引出的考试题小结
[打印本页]
作者:
安路凤
时间:
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