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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

多态中,静态方法和非静态方法的加载问题
class fu
{
    public method1(){}
    public method2(){}
    public static method3(){}
}

这三个方法的加载顺序是按照从上往下写下来的顺序还是static的先加载。还有public static 可以写成 static public吗?

5 个回复

倒序浏览
不能static public 这样写?绝对不行
回复 使用道具 举报
class fu
{
     public method1(){}
     public method2(){}
     public static method3(){}
}
首先楼主的代码书写就有问题。
一般方法必须要有返回值类型,没有返回值类型时,要用void。
只有构造函数才没有返回值类型也不可以写void而构造函数的名称要和类的名称一致。
静态成员随着类的加载而加载到方法区中,至于一般函数,只有在调用到该函数时,该函数才加载。
这些在基础视频上毕老师都讲的很清楚,希望楼主认真看视频并做好笔记。

点评

说的很对。。。  发表于 2012-7-16 11:34

评分

参与人数 1技术分 +1 收起 理由
刘笑 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 jeffreyno1 于 2012-7-16 10:51 编辑

这个问题你提到了四个概念:多态、静态方法、非静态方法、加载顺序
可是题目中没有体现多态,只写了个父类。还有加载的问题,示例代码中只描述了一个类,没有程序入口,没有类的引用和对象的创建,也就不存在加载的问题,更谈不上加载顺序。


回复 使用道具 举报
1,静态代码块、构造代码块和构造函数的区别
                静态代码块:用于给类初始化,类加载时就会被加载执行,只加载一次。
                构造代码块:用于给对象初始化的。只要建立对象该部分就会被执行,且优先于构造函数。
                构造函数:  给对应对象初始化的,建立对象时,选择相应的构造函数初始化对象。               
          创建对象时,三者被加载执行顺序:静态代码块--->构造代码块--->构造函数
回复 使用道具 举报
本帖最后由 陆鹏 于 2012-7-16 11:52 编辑

内存中的执行顺序
      如  Person p = new Person();
类加载------>静态代码块------>静态成员------>开辟空间,分配地址(还未赋给变量)----->特有成员初始化(如赋值)------>构造代码块----->构造函数----->将地址赋给类类型变量。

补充一下,子父类中优先加载父类。static public 格式不对。

希望楼主自己按照这个方式多想想,自己在草稿上划出内存分别有几个区域,哪个区域优先,区域里的哪些成员优先,自然就明白了。

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

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