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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈柏伊 初级黑马   /  2013-3-28 13:50  /  3278 人查看  /  10 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈柏伊 于 2013-4-7 16:57 编辑

静态代码块为什么不能被继承?

点评

如果问题未解决,请继续追问,如果问题解决了,请将帖子分类改为已解决,谢谢  发表于 2013-3-29 07:06

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

10 个回复

倒序浏览
静态代码块,在类加载的时候,只执行一次,进行一些准备工作,
回复 使用道具 举报
静态代码块是类中的一段代码,随着类的加载而加载,只执行一次,优先于主函数,用来给类进行初始化的。继承是体现类与类之间存在所属关系的一种方式。可以看看视频在理解一下

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

回复 使用道具 举报
当编译时,.class字节码文件就加载到了内存,主函数所属的类先加载到内存,所以静态代码块先被执行,当主函数中创建person对象时

这时person类的字节码文件也加载到内存中,然后初始化Person类。

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

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
你好 楼主

对象的初始化顺序:首先执行父类静态的内容,父类静态的内容执行完毕后,接着去执行子类的静态的内容,当子类的静态内容执行完毕之后,再去看父类有没有非静态代码块,如果有就执行父类的非静态代码块,父类的非静态代码块执行完毕,接着执行父类的构造方法;父类的构造方法执行完毕之后,它接着去看子类有没有非静态代码块,如果有就执行子类的非静态代码块。子类的非静态代码块执行完毕再去执行子类的构造方法。总之一句话,静态代码块内容先执行,接着执行父类非静态代码块和构造方法,然后执行子类非静态代码块和构造方法。

注意:子类的构造方法,不管这个构造方法带不带参数,默认的它都会先去寻找父类的不带参数的构造方法。如果父类没有不带参数的构造方法,那么子类必须用supper关键子来调用父类带参数的构造方法,否则编译不能通过。

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
继承是一个对象直接使用另一个对象的属性和方法。

静态块最终是写到类或接口初始化方法里面的,不能被继承,静态方法才可以被继承

回复 使用道具 举报
王杰123 发表于 2013-3-28 15:44
你好 楼主

对象的初始化顺序:首先执行父类静态的内容,父类静态的内容执行完毕后,接着去执行子类的静态的 ...

你好,谢谢你的回答,很全面,受教了
回复 使用道具 举报
静态代码块。静态的随着类的加载而加载,静态代码块他是没名字的,他是随着类的加载完这静态代码块里面的代码紧跟着就执行完了

特点:随着类的加载而执行,只执行一次,并优先于主函数。主函数有名字,主函数是被调用才执行,静态代码块不需要被调用,直接执行因为他没有名字,随着类的加载就执行了
用于给类进行初始化的。这个用的少,一般是对象初始化多


代码:

class StaticCode
{

        StaticCode()
        {
                System.out.println("b");
        }

        static    静态代码块是给类初始化的
        {
                System.out.println("a");
        }


        {       构造代码块是给对象初始化的
                System.out.println("c");  
        }

        StaticCode(int x)        构造函数是给对应对象初始化的
        {
                System.out.println("d");
        }
        public static void show()
        {
                System.out.println("show run");
        }
}

回复 使用道具 举报
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
回复 使用道具 举报
黄玉昆 发表于 2013-4-5 08:18
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢

怎么改成以解决呀?
回复 使用道具 举报
陈柏伊 发表于 2013-4-6 21:50
怎么改成以解决呀?

http://bbs.itheima.com/thread-42978-1-1.html
请看看这个吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马