博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java报错:No enclosing instance of type learnJ is accessible.
阅读量:4074 次
发布时间:2019-05-25

本文共 841 字,大约阅读时间需要 2 分钟。

错误代码:

public class learnJ {	/**	 * 作者:XXX	 * 日期:2018.01.26	 * 内容:学习Java	 */	class Person{		int age ;		String name;		}	public static void main(String[] args) {		// TODO Auto-generated method stub		Person a = new  Person();		a.age = 1;		a.name = "xiaohuang";		System.out.println("a 的名称为:"+a.name+", a 的年龄为:"+ a.age);	}}

修改方法:

在Person内部类前面添加static,将内部类声明为静态内部类。

原理:

在Java中

(1)类的静态方法不能直接调用动态方法。
(2)类的静态方法不能初始化内部类(包括该类的内部类,和其他文件中的内部类)。
(3)类的静态方法可以初始化其他类文件中的类。
(4)类的静态方法可以初始化静态类(包括静态内部类)。

对象的生命周期:

(1)静态变量和静态方法的生命周期
静态变量和静态方法,在进程创建的时候就被创建了,而不是在对象创建的时候才被创建,并且其生命周期同该进程的生命周期一样长,其占用的系统资源是初始化进程申请资源的一部分。
(2)内部类的生命周期
如果是非静态的内部类,必须由一个已创建的实例去创建一个对应的内部类实例,才能开始其生命周期,但如果是静态的内部类,则可以直接创建。因为所有的静态对象,都在线程创建的时候就一起被创建了。

解释:

(1)静态方法在线程初始化的时候就被创建了,而这时候普通类都还没来的及初始化,因此不能调用它的内部类。
(2)而如果是静态类,记住一个原则——变量优先于方法被创建。因此静态方法自然就可以调用静态对象了。
(3)之所以可以在静态方法中调用普通类是因为我们可以手动初始化该普通类。

转载地址:http://muyni.baihongyu.com/

你可能感兴趣的文章
coursesa课程 Python 3 programming 统计文件有多少单词
查看>>
coursesa课程 Python 3 programming course_2_assessment_7 多参数函数练习题
查看>>
coursesa课程 Python 3 programming course_2_assessment_8 sorted练习题
查看>>
多线程使用随机函数需要注意的一点
查看>>
getpeername,getsockname
查看>>
所谓的进步和提升,就是完成认知升级
查看>>
如何用好碎片化时间,让思维更有效率?
查看>>
No.182 - LeetCode1325 - C指针的魅力
查看>>
Encoding Schemes
查看>>
带WiringPi库的交叉笔译如何处理二之软链接概念
查看>>
Java8 HashMap集合解析
查看>>
自定义 select 下拉框 多选插件
查看>>
linux和windows内存布局验证
查看>>
Linux常用统计命令之wc
查看>>
fastcgi_param 详解
查看>>
搞定Java面试中的数据结构问题
查看>>
React Native(一):搭建开发环境、出Hello World
查看>>
React Native(二):属性、状态
查看>>
JSX使用总结
查看>>
React Native(四):布局(使用Flexbox)
查看>>