本帖最后由 HM马明宇 于 2013-4-1 22:21 编辑
问题在注释里:- /**
- * 近日对类中方法的加载有些疑问:
- * 通过实践发现,方法无论是否静态,皆可调用(编写时)在其位置之下的方法
- * 不过,据我所知程序是按照从上往下的顺序进行执行的(循环等特殊条件除外)
- * 那么,问题就来了(当然,类的加载顺序是先加载静态对象(变量和函数)再加载非静态对象的(变量和函数))
- *
- * 首先我们知道通过静态方法中不能使用非静态对象
- * 据此我可以推断方法中的方法体在加载时肯定也要被检验
- * 但是为何(普通静态都一样)方法1可以调用方法2?
- * 按照程序的执行顺序,(此处以静态方法举例)虽然静态方法2也是静态方法,但是其位置在方法1之下啊
- * 加载到方法1的时候,在平常看来方法2还没加载,为什么这样不报错?
- * 类中同种(即要么都静态,要么都不静态)方法的的加载是一个什么机制?
- */
- class Test {
- /**
- * 普通方法1
- */
- void pumethod1() {
- this.pumethod2();// 普通方法中,方法1可以调用方法2
- }
- /**
- * 普通方法2
- */
- void pumethod2() {}
- /**
- * 静态方法1
- */
- static void method1() {
- /**
- * 此处在编译中会报错,因为加载本静态方法(method1())时,
- * 还没有加载下面这个非静态方法,所以编译报错,
- * 由此可判断, 编译时方法中的方法体也是要经过检验的
- */
- pumethod1();
- method2();// 静态方法中,方法1可以调用方法2
- }
- /**
- * 静态方法2
- */
- static void method2() {}
- }
复制代码 |