thingking in java2.11练习(3)

来源:互联网 发布:淘宝直通车点击 编辑:程序博客网 时间:2024/06/05 06:05

题目:找出含有ATypeName的代码段,将起改写成完整的程序,然后编译,运行。

含有ATypeName的代码段在书本25面,是以下两句代码:
class ATypeName {/* Class body goes here */}
ATypeName a = new ATypeName();

根据昨天所学,一个java程序想要运行,必须有一个main。
代码如下:

public class ATypeName {    public static void main(String[] args) {        ATypeName a = new ATypeName();    }}

不过,当笔者尝试用另一种写法时,却出错了

public class test2_3 {    public static void main(String[] args) {        ATypeName A = new ATypeName();    }    class ATypeName {    }}

编译器报错:无法从静态上下文中引用非静态方法this
我们知道,程序运行先加载的是所有静态对象,而main又是所有静态对象里第一个被加载的,由于ATypeName()对象属于test2_3()对象,此时
test2_3()对象还未实例化,自然找不到它的内部类ATypeName()。要想解决这个问题,有两种方法,一种是给ATypeName()加上static。这时程序就能顺利运行。另一种就是先实例化test2_3()对象,再实例化ATypeName(),代码如下:

 ATypeName A = new test2_3().new ATypeName();

同样的道理,静态方法中同样不能调用非静态方法和非静态变量,要想调用,要先实例对应的类再调用。
这里因为涉及到内部类的问题,所以显的有些复杂,关于内部类暂不深究。
以上。

0 0
原创粉丝点击