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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张运恒 中级黑马   /  2013-7-21 19:11  /  852 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张运恒 于 2013-7-22 16:16 编辑

静态代码块  构造代码块  构造函数  对于初学者的总是让我搞混淆, 求大神来个比较直观的例子 比较容易记住的窍门

评分

参与人数 1黑马币 +3 收起 理由
杨兴庭 + 3

查看全部评分

3 个回复

倒序浏览

  1. /*


  2. 区别:

  3. 1、静态代码块:它是随着类的的加载而执行,类一加载,静态代码块就会执行,并且只执行一次
  4. 2、构造代码块:是用于给对象进行初始化,对象一建立,构造代码块就会运行
  5. 3、成员代码块:是类对象在调用的类的方法的时候,才会执行。
  6. 4、所以静态代码块比构造代码块先执行,构造代码块比构造函数先执行,构造函数比成员代码块先执行;

  7. */



  8. class StaticCode{
  9. int num=1;

  10. //建立构造函数
  11. StaticCode(){
  12.   System.out.println("third");
  13. }

  14. //建立静态代码块
  15. static{
  16.   System.out.println("first");
  17. }

  18. //建立构造代码块
  19. {
  20.   System.out.println("second");
  21. }

  22. //建立一个show()方法
  23. public static void show(){
  24.   System.out.println("show  run");
  25. }
  26. }
  27. class Demo1{
  28. public static void main(String[] args){
  29. StaticCode sc= new StaticCode();
  30.   System.out.println("调用成员了……");
  31.   sc.show();
  32. }
  33. }

  34. /*
  35. 输出结果:
  36. first
  37. second
  38. third
  39. 调用成员了……
  40. show  run


  41. 从输出结果看到:先是静态代码块,然后是构造代码块,然后是构造函数,最后才是类的成员函数。从new一个对象
  42. 可以看出,对象一建立,就迅速执行了这些程序。

  43. */
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1 很给力!

查看全部评分

回复 使用道具 举报
class A
{
        //静态代码块,
        static
        {
                System.out.println("这是类A中的静态代码块");
        }
       
        //        构造代码块
        {
                System.out.println("这是类A中的构造代码块");
        }
       
        // 无参构造函数
        public A()
        {
                System.out.println("这是A类的构造函数");
        }

        // 带有形参的构造函数
        public A( int a)
        {
                System.out.println("这是A类的构造函数"+" a="+a);
        }
       
        //定义A类中一个普通的方法show()
        public void show()
        {
                System.out.println("这是A类中的show方法");
        }

        //定义A类中一个静态的方法static_show()
        public static void static_show()
        {
                System.out.println("这是A类中的static_show方法");
        }
}

class  Test2
{
        static
        {
                System.out.println("这是主函数中的静态代码块");
        }

        {
                System.out.println("这是主函数中的构造代码块");
        }

        public static void main(String[] args)
        {
                System.out.println("------main 函数开始执行-------");
                new A();
                System.out.println("---------------");
                A a=new A(3);
                System.out.println("---------------");
                A.static_show();
                a.show();
               
        }
}


解释:先执行了主函数中的静态代码块,然后主函数中的main函数再执行,主函数中的main中是new A() 这句话,先执行A中的静态代码块,然后执行构造代码块,在执行了A的构造函数,可是当执行A a =new A();时候,却没有再执行静态代码块,而是直接执行了构造代码块,和构造函数,这就说明,静态代码块 随着类的加载而执行,只执行一次,并优先于主函数。

这是我自己改编的一个小程序,你可以看看,希望对你理解这几个问题有帮助。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
//静态代码块,如下代码是以类关键字代码形式写的
        static
        {

        }
//构造函数,方法名于函数名是一致的
class A
{              
        // 无参构造函数
       A()
        {
               
        }

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马