黑马程序员技术交流社区

标题: 多态中,静态方法和非静态方法的加载问题 [打印本页]

作者: 丁朋    时间: 2012-7-16 10:21
标题: 多态中,静态方法和非静态方法的加载问题
多态中,静态方法和非静态方法的加载问题
class fu
{
    public method1(){}
    public method2(){}
    public static method3(){}
}

这三个方法的加载顺序是按照从上往下写下来的顺序还是static的先加载。还有public static 可以写成 static public吗?
作者: 全海波    时间: 2012-7-16 10:32
不能static public 这样写?绝对不行
作者: 黄昆    时间: 2012-7-16 10:33
class fu
{
     public method1(){}
     public method2(){}
     public static method3(){}
}
首先楼主的代码书写就有问题。
一般方法必须要有返回值类型,没有返回值类型时,要用void。
只有构造函数才没有返回值类型也不可以写void而构造函数的名称要和类的名称一致。
静态成员随着类的加载而加载到方法区中,至于一般函数,只有在调用到该函数时,该函数才加载。
这些在基础视频上毕老师都讲的很清楚,希望楼主认真看视频并做好笔记。

作者: 程潇    时间: 2012-7-16 10:35
本帖最后由 jeffreyno1 于 2012-7-16 10:51 编辑

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



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

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

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

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




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2