读书人

static和非static解决方法

发布时间: 2012-01-28 22:06:14 作者: rapoo

static和非static

Java code
package com.simple.second;class First{    public First(){        aMethod();    }        public void aMethod(){        System.out.println("First");    }}public class Second extends First{    public  void aMethod(){        System.out.println("second");    }    public static void main(String args[]){        new Second();    }}

这个程序的运行结果是second
Java code
package com.simple.second;class First{    public First(){        aMethod();    }        public static void aMethod(){        System.out.println("First");    }}public class Second extends First{    public static void aMethod(){        System.out.println("second");    }    public static void main(String args[]){        new Second();    }}

这个程序的运行结果是first
请高手帮忙分析一下,具体是什么情况
或者说一下具体的编译执行过程

[解决办法]
aMethod();等价于this.aMethod();
第一个例子中重写的关系,所以输出second
实际上这里的this还是Second对象,你可以在aMethod()前面加上System.out.println(this.getClass());
再加上重写你应该可以明白
第二个静态方法是不存在重写关系的,没什么可说的,哪个类调用的就是哪个类的方法
[解决办法]
如一楼所说,static静态方法不override,所以从什么类中去访问,就是哪个类中的方法被绑定。

下面这个写法也蛮有意思的,楼主看看
Java code
class First{    public First(){        aMethod();    }        public static void aMethod(){        System.out.println("First");    }}public class Second extends First{    public Second(){        aMethod();    }        public static void aMethod(){        System.out.println("second");    }    public static void main(String args[]){        new Second();    }}
[解决办法]
mark
[解决办法]
Java code
1、首先类加载器加载.class文件。2、然后完成static初始化,如果有。3、为对象分配内存空间4、将分配的内存空间清零5、初始化类字段(数据成员)。按照定义的顺序依次初始化6、调用构造器的方法开始--->父类的静态代码--->子类的静态代码-->父类的非静态代码--->父类构造函数--->子类非静态代码--->子类构造函数--->完成
[解决办法]
Java code
//静态方法,至与类名相互联系,跟哪个对象无关,不存在继承这个概念class First{    public First(){        aMethod();    }//这是父类的构造方法,调用了父类的静态方法        public static void aMethod(){        System.out.println("First");    }}public class Second extends First{       public static void aMethod(){        System.out.println("second");    }//这是子类静态方法,没有被任何方法调用          public static void main(String args[]){        new Second();    }}class First{    public First(){        aMethod();    }        public void aMethod(){        System.out.println("First");    }}public class Second extends First{    public  void aMethod(){        System.out.println("second");    }//并非是静态方法,发生了重写        public static void main(String args[]){        new Second();    }}
[解决办法]
Java code
//静态方法,至与类名相互联系,跟哪个对象无关,不存在继承这个概念class First{    public First(){        aMethod();    }        public static void aMethod(){        System.out.println("First");    }}public class Second extends First{    //在这个地方你使用子类构造方法调用子类的静态方法,也同样会输出信息     public Second() {     aMethod();     }    public static void aMethod(){        System.out.println("second");    }      public static void main(String args[]){        new Second();    }} 


[解决办法]
很经典的案例
[解决办法]
其实我是来打酱油的哦~

读书人网 >J2SE开发

热点推荐