A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李方 中级黑马   /  2012-12-29 05:43  /  1394 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看了那么多天视频,也反复看了那几天的视频,现在也有点不太明白构造函数,构造代码块,静态代码块的应用,求教高手能不能通俗的讲解一哈来自: Android客户端

4 个回复

倒序浏览
构造函数的作用是给对象进行初始化,即在函数中建立对象,对象一建立,就会调用与之相对应的构造函数;当类中没有定义构造函数时,JVM会默认给该类加上一个空参数的构造函数;
构造代码块的作用是给该类的所有对象进行初始化,对象一建立,就运行,而且优先于构造函数运行
静态代码块,在不创建对象的情况下,只要类加载,这种代码是主动执行的是在项目启动的时候就初始化用的
回复 使用道具 举报
构造函数是给与之对应的对象初始化用的,新对象的创建是离不开它的,没有它无法创建对象,没写构造函数的话会默认有个空参数的构造函数。

构造代码块是给所有对象初始化用的,有对象了就会执行,优先于构造函数执行。

静态代码块是给类进行初始化用的,随着类的加载执行,并且只执行一次。
回复 使用道具 举报
本帖最后由 张会文 于 2012-12-29 20:52 编辑

这样说会不会简单一点
1、在使用一个类前,虚拟机需要从外部加载这个类文件,加载完毕后,有一部分代码会自动执行,包括静态代码块,创建对象时才会执行构造函数。
2、构造代码块:在构造函数的{}中出现的,作用是决定构造方法实现的功能。一个类中可以有重载的构造函数,也对应多个代码块,创建对象实例时用到哪个构造方法就调用哪个代码块,如果没有实例化对象,那么只有静态代码块被执行
3、静态代码块和类相关,因为在程序的一次运行过程中,类只会被加载一次,所以一个类的静态代码块也不会执行两次,这样就可以在外部改变静态代码块。
所以要想让代码一定在类加载的时候就运行,那么放在静态代码块中,
而在实例会对象的时候再运行就放在构造代码块中。

public class Test {
static{
  System.out.println("静态代码被执行");
}
public Test() {
  System.out.println("构造代码被执行");//不会被执行,除非实例化一个Test对象
}
public static void main(String[] args) {

}
}
回复 使用道具 举报
看作用范围和作用时间:
作用时间从先到后:静态代码块(加载类时),构造代码块(创建对象时给所有成员变量初始化),构造函数(创建对象时根据需要初始化)

作用范围:
静态代码块:类一加载时就运行,相当于作用于整个类
构造代码块:可以给所有新创建的对象初始化
构造函数:对单个新对象根据需要初始化
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马