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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郭军亮 中级黑马   /  2013-5-8 10:04  /  2072 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 郭军亮 于 2013-5-8 23:41 编辑

class StaticCode
{
        
        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");
        }
}

class StaticCodeDemo
{
        static
        {
                //System.out.println("b");
        }
        public static void main(String[] args)
        {
                new StaticCode(4);//a c d
        }
        static
        {
                ///System.out.println("c");
        }
}

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

12 个回复

倒序浏览
一个是静态块 static {},一个是实例块 {},静态块用于初始化静态变量,实例块用于初始化 成员变量
回复 使用道具 举报
  {
                System.out.println("c"+this.num);
  }
这个是构造代码块,构造代码块是给所有对象初始化,对象一建立就运行
静态代码块是优先于对象存在的,
顺序:静态代码块->构造代码块->构造函数
回复 使用道具 举报
static 是静态代码块 随着类的加载而执行,只执行一次。下边那个代码块是构造代码块,只要创建对象就会执行

点评

新人 需要鼓励  发表于 2013-5-8 11:38

评分

参与人数 1技术分 +1 收起 理由
刘胜寒 + 1

查看全部评分

回复 使用道具 举报
一个是静态代码块,在类加载的时候执行,一个是构造代码块,或者说匿名构造函数;在创建对象的时候执行;
打个比方说:小明妈妈生小明的例子。。
小明在被怀上的时候,是不是得去先办好准生证,在生下来的时候是不是得去办身份证。
办准生证就是静态代码块执行,
小明生下来去办身份证就得去办身份证;就是构造代码块。。
说的有点恶心啊。。。希望能帮到你。。。

回复 使用道具 举报
静态代码块:static{}   随着类的加载而执行,且只执行一次;用于对类进行初始化;若它与main方法处于同一个类中,则优先于main函数执行;
构造代码块:{}  当创建对象时被执行,重点要注意成员变量初始化顺序:默认初始化,显式初始化,构造代码块初始化,构造方法初始化;
成员变量的最终值是最终初始化所赋予的值;
回复 使用道具 举报
静态代码块。
格式:
static
{
        静态代码块中的执行语句。
}

特点:随着类的加载而执行,只执行一次,并优先于主函数。用于给类进行初始化的。

class StaticCode
{
        
        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");
        }
}

class StaticCodeDemo
{
        static
        {
                //System.out.println("b");
        }
        public static void main(String[] args)
        {
                new StaticCode(4);//a c d
        }
        static
        {
                ///System.out.println("c");
        }
}
回复 使用道具 举报
static
         {
                 System.out.println("a");
         }
这是静态代码块,随着类的加载而执行,只执行一次,用于给类进行初始化的。
     {
                 System.out.println("c"+this.num);
         }
这是构造代码块,创建对象时即被执行,它是给对象初始化的。
回复 使用道具 举报
class StaticCode
{
      
        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");
        }//这是静态方法。调用它有两种方式,一种是用类名.show()调用,还有一种是创建对象调用。
}

假如还不理解可以回复我

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
第一个大括号中的的是静态代码块,它随着类加载进内存而执行,仅执行一次。第二个大括号中的是代码块,在每一次类的实例化时都会执行。
回复 使用道具 举报
这个问题不是解决了嘛,为什么还不改一下呢!
回复 使用道具 举报
问题如果以解决,请及时修改分类,否则继续提问问,谢谢合作!(不要嫌我烦,我感觉也挺烦躁的。这是我的责任啊)
回复 使用道具 举报
有static的叫静态代码块,是给类初始化的,什么都没有的那个叫构造代码块,是给所有对象初始化的,和类名一样的叫构造函数,是给对应对象初始化的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马