thingking in java2.11练习(3)

题目:找出含有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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值