黑马程序员技术交流社区
标题:
关于静态代码块和构造代码块
[打印本页]
作者:
糯米酿酒
时间:
2013-7-20 18:50
标题:
关于静态代码块和构造代码块
什么时候用静态代码块,什么时候用构造代码块,他们最主要的作用是什么?
作者:
xscn
时间:
2013-7-20 19:19
静态代码块定义在类中,随类的加载而执行,优先于主函数执行并且只执行一次,用来给类进行初始化。
当类中的方法都被静态了化,并且构造方法被private了,但是是我们不能在将这个类实例化,然而又想让类增加一些属性,就可以使用静态代码块
构造代码块定义在类中,可以给所有对象进行初始化,只要建立对象就会运行优先于构造函数。
构造代码块实际上就是不同对象共性的初始化方式,当类有共同成员变量或共同的方法时,可以通过构造代码块对其进行初始化,这样可以减少代码的重复。
作者:
yangchao313
时间:
2013-7-20 20:47
1、静态代码块的执行:
public class StaticTest {
static
{
System.out.println("hello,world!");
System.exit(0);
}
public static void main(String[] args)
{
System.out.println("main");
}
}
在这段代码中,StaticTest类一加载,首先就执行了static代码块,虽然这里有main函数,只是这段代码的入,通过Eclipse的断点测试,根本就没有执行到就结束了,这里的main函数就是为了让代码能够执行才有的。
2、构造代码块的执行:
public class StaticTest {
static
{
System.out.println("静态代码块!");
//System.exit(0);
}
{
System.out.println("构造代码块!");
}
public static void main(String[] args)
{
StaticTest st = new StaticTest(); //在对象一建立的时候就调用
System.out.println("主函数!");
}
}
在这段代码中,有一个构造代码块,这个代码块是在对象一建立的时候就调用,在函数体中,他的执行时间是看对象是什么时候建立的。
3、总结:静态代码块是在类一被加载的时候就执行,如果在静态代码块中加入System.exit(0);语句,则会直接结束这个程序,不会再执行main函数中的语句。而构造代码块则不同,因为要先建立对象,再调用代码块中的语句,所以main函数是肯定要执行的。
作者:
妖在北城
时间:
2013-7-20 23:45
搞那么麻烦干什么。静态代码块随着类的加载而加载,随着类的结束而终止。
构造代码块 每次new一个对象就运行一次。new一次运行一次 new一次运行一次。
作者:
云游天下
时间:
2013-7-21 00:31
我刚问过这个问题 呵呵 这样你比较易于理解
静态代码块:用于给类初始化,类加载时就会被加载执行,只加载一次。
构造代码块:用于给对象初始化的。只要建立对象该部分就会被执行,且优先于构造函数。
构造函数: 给对应对象初始化的,建立对象时,选择相应的构造函数初始化对象。
创建对象时,三者被加载执行顺序:静态代码块--->构造代码块--->构造函数
//利用代码进行测试 例题:06--06:StaticCodeDemo.java
class Person
{
private String name;
private int age=0;
private static String country="cn";
Person(String name,int age)
{
this.name=name;
this.age=age;
}
static
{
System.out.println("静态代码块被执行");
}
{ System.out.println(name+"..."+age); }
public void setName(String name)
{
this.name=name;
}
public void speak()
{
System.out.println(this.name+"..."+this.age);
}
public static void showCountry()
{
System.out.println("country="+country);
}
}
class StaticDemo
{
static
{
System.out.println("StaticDemo 静态代码块1");
}
public static void main(String[] args)
{
Person p=new Person("zhangsan",100);
p.setName("lisi");
p.speak();
Person.showCountry();
}
static
{
System.out.println("StaticDemo 静态代码块2");
}
}
输出结果:
StaticDemo 静态代码块1
StaticDemo 静态代码块2
静态代码块被执行
null...0 //构造代码块
lisi...100 //speak()
country=cn //showCountry()
作者:
张强1
时间:
2013-7-21 01:08
静态代码块定义在类中,随类的加载而执行,优先于主函数执行并且只执行一次,用来给类进行初始化。
当类中的方法都被静态了化,并且构造方法被private了,但是是我们不能在将这个类实例化,然而又想让类增加一些属性,就可以使用静态代码块
构造代码块定义在类中,可以给所有对象进行初始化,只要建立对象就会运行优先于构造函数。
构造代码块实际上就是不同对象共性的初始化方式,当类有共同成员变量或共同的方法时,可以通过构造代码块对其进行初始化,这样可以减少代码的重复。
作者:
糯米酿酒
时间:
2013-7-21 11:19
总而言之,静态代码块是随类的加载而加载,且优先于主函数,而构造代码块是随对象的建立而加载,优先于构造函数。静态代码块的使用:类中的方法都为static类型,构造函数为private时;构造代码块:创建的对象有共同的初始化时,,可以提高代码的复用性。
作者:
薛鹏鹏
时间:
2013-7-21 12:07
静态代码块与构造代码块在初始化中的加载顺序不一样,静态代码块定义在类中,随类的加载而执行,优先于主函数执行并且只执行一次,用来给类进行初始化。初始化的步骤:
1.调用.class
2.static代码块初始化
3.默认初始化
4.显示初始化
5.构造代码块初始化
6.构造函数初始化
作者:
杨兴庭
时间:
2013-7-21 12:30
静态代码块基本上很少用的。。。除非有一些代码要在当类一加载的时候就需要使用。。。比如main方法
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2