看的李刚《疯狂java讲义》,里面讲内部类的地方感觉有点散而且不全,看完之后还是不十分清楚到底怎么用,于是自己写了个程序测试了一下。看如下代码,即可知道外部类和内部类+静态成员和非静态成员之间的相互调用规则。

Java的外部类和内部类+静态变量和非静态变量的组合关系

Java的外部类和内部类+静态变量和非静态变量的组合关系

 运行结果如下:

Java的外部类和内部类+静态变量和非静态变量的组合关系

总结如下:

 

注意: 当如下出现报错:“无法从静态上下文中引用非静态时”,问题在于非静态方法或者非静态变量所属的类可能没有被实列化。因为要使用非静态方法,必须实例化它所属的类。

例如:将第40行代码改成inter2.StaticInter();

Java的外部类和内部类+静态变量和非静态变量的组合关系

编译:

 Java的外部类和内部类+静态变量和非静态变量的组合关系

原因是StaticInter()虽然是属于静态内部类,但它自身是非静态方法(实例方法),不能通过内部类类名.非静态方法来调用该方法。

正确做法是将非静态方法所属的类(不管所属类是静态类还是非静态内部类)实例化,即创建所属类的对象,然后再调用该非静态方法。

 

相关文章:

  • 2019-08-17
  • 2022-12-23
  • 2022-02-18
  • 2022-12-23
  • 2021-11-16
  • 2022-12-23
  • 2021-09-18
  • 2021-07-02
猜你喜欢
  • 2021-10-24
  • 2022-12-23
  • 2021-10-04
  • 2021-11-19
相关资源
相似解决方案