No enclosing instance of type Demo06 is accessible.

原创 2015年11月21日 11:43:30

先上图:
这里写图片描述
多么简单的一个小程序,确出现了一个看似“不可理解”的错误,实在令人捉急呀。。。。
No enclosing instance of type Demo06 is accessible. Must qualify the allocation with an enclosing instance of type Demo06 (e.g. x.new A() where x is an instance of Demo06).

错误提示:没有可访问的内部类的实例,必须分配一个合适的内部类的实例(如x.new A(),x必须是 Demo06的实例。)看着这句提示,是不是很着急,因为我已经用new实例化了这个类,为什么还不行呢?

看了看书,查了查资料,才发现问题的所在:

class 直接写的是动态的内部类,可是主程序是public static void main。
在Java中,类中的静态方法不能直接调用动态方法。只有将某个内部类修饰为静态类,然后才能够在静态类中调用该类的成员变量与成员方法。
所以,最简单的解决办法是将public class改为public static class.

public class Demo06 {
    public static class Person {
        String name;
        int age;
        public void tell(){
            System.out.println("姓名:"+name+",年龄:"+age);
        }
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Person person = null;       
        person = new Person();
//      Person person = new Person();
        person.name = "张三";
        person.age = 30;
        person.tell();
    }
}

小问题,牵扯出大问题!
这个要从java的内存机制去分析,首先当你New 一个对象的时候,并不是先在堆中为对象开辟内存空间,而是先将类中的静态方法(带有static修饰的静态函数)的代码加载到一个叫做方法区的地方,然后再在堆内存中创建对象。所以说静态方法会随着类的加载而被加载。当你new一个对象时,该对象存在于对内存中,this关键字一般指该对象,但是如果没有new对象,而是通过类名调用该类的静态方法也可以。

程序最终都是在内存中执行,变量只有在内存中占有一席之地时才会被访问,类的静态成员(变态和方法)属于类本身,在类加载的时候就会分配内存,可以通过类名直接去访问,非静态成员(变量和方法)属于类的对象,所以只有在类的对象禅师(创建实例)的时候才会分配内存,然后通过类的对象去访问。

在一个类的静态成员中去访问非静态成员之所以会出错是因为在类的非静态成员不存在的时候静态成员就已经存在了,访问一个内存中不存在的东西当然会出错。

那类是什么时候被加载呢?在需要调用的时候被加载。

版权声明:本文为博主辛苦整理文章,转载请注明出处:http://blog.csdn.net/shangguanyunlan

相关文章推荐

在外部类中创建内部类的对象时报错No enclosing instance of type Outside is accessible···的解决方

在学习内部类的时候自己写了一个内部类的代码试验了一下,代码如下public class Outside { public class Inner{ public void show(){ Sys...

Java出现No enclosing instance of type Test is accessible. Must qualify the allocation with an enclosin

最近研究LDA源代码时,里面涉及到Comparable方法的使用。以前用过这个排序方法,现在想回顾一下。以下是程序,感觉没问题啊,结果报错了:Exception in thread "main" ja...

Java编译时出现 No enclosing instance of type Main is accessible. Must qualify the allocation with an encl

今天在编译Java程序的时候出现以下错误: No enclosing instance of type Main is accessible. Must qualify the allocation ...

黑马程序员--No enclosing instance of type E is accessible.

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——- 过滤器设置成内部类还是外部类? 如果内部类设置成内部,就不能定义含参数的构造函数,程序的扩展...

No enclosing instance of type xxx is accessible 问题及解答,静态方法调用动态方法问题

问题描述编写Java代码验证:判别是否类的实例化对象的instanceof方法中, ,类名为instanceOfTest,在它的main方法中创建内部类的实例时,编译阶段出现错误,查看错误描述:Exc...

java解决 No enclosing instance of type XXX is accessible的问题

有些时候我们要把Activity的一些实现类移到java类里来实现,比如把写以下两个类: 在LifeCircle这个类中: public class LifeCircle { public...

Java中出现No enclosing instance of type XXX is accessible问题

Java编写代码过程中遇到了一个问题,main方法中创建内部类的实例时,编译阶段出现错误,查看错误描述: Multiple markers at this line  - The value ...

Java出现No enclosing instance of type ImageViewer is accessible. Must qualify the allocation with an

菜鸟刚开始学Java,看《Java核心技术 卷1 基础知识 (第9版)》-在按照编译写书上一个例子时,由于书上的源代码不是很完整,写完之后发现编译器报错,编译时出现:No enclosing in...
  • Mr_Pu
  • Mr_Pu
  • 2015年08月08日 17:43
  • 569

验证参数传递引发的Java编译错误“No enclosing instance of type XXX is accessible" 及匿名内部类

1.为了验证实参和形参的区别,运行下面代码: public class ArgPassTest {     public class MyObject { //此行用public没有报错    ...

No enclosing instance of type Excrise is accessible. Must qualify the allocation with an enclosing i

转载自:转载内容 最近在看Java,在编译写书上一个例子时,由于书上的代码只有一部分,于是就自己补了一个内部类。结果编译时出现:No enclosing instance of ty...
  • SCGH_Fx
  • SCGH_Fx
  • 2017年03月30日 13:12
  • 384
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:No enclosing instance of type Demo06 is accessible.
举报原因:
原因补充:

(最多只允许输入30个字)