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

原创 2013年12月04日 17:57:51

今天在编译Java程序的时候出现以下错误:

No enclosing instance of type Main is accessible. Must qualify the allocation with an enclosing instance of type Main (e.g. x.new A() where x is an instance of Main).


我原来编写的源代码是这样的:

public class Main 
{
class Dog //定义一个“狗类”
{
private String name;
private int weight;
public Dog(String name, int weight) 
{
this.setName(name);
this.weight = weight;
}
public int getWeight() 
{
return weight;
}
public void setWeight(int weight) 
{this.weight = weight;}
public void setName(String name)
{this.name = name;}
public String getName() 
{return name;}
}
public static void main(String[] args)
{
Dog d1 = new Dog("dog1",1);

}
}

出现这个错误的时候,我一直不太理解。

在借鉴别人的解释之后才恍然大悟。

在代码中,我的Dog类是定义在Main中的内部类。Dog内部类是动态的内部类,而我的main方法是static静态的。

就好比静态的方法不能调用动态的方法一样。

有两种解决办法:

第一种:

将内部类Dog定义成静态static的类。

第二种:

将内部类Dog在Main类外边定义。


修改后的代码:

第一种:

public class Main 
{
	public static class Dog 
	{
		private String name;
		private int weight;
		public Dog(String name, int weight) 
		{
			this.setName(name);
			this.weight = weight;
		}
		public int getWeight() 
		{
			return weight;
		}
		public void setWeight(int weight) 
		{this.weight = weight;}
		public void setName(String name)
		{this.name = name;}
		public String getName() 
		{return name;}
	}
	public static void main(String[] args)
	{
		Dog d1 = new Dog("dog1",1);	
	}
}


第二种:

public class Main 
{
	public static void main(String[] args)
	{
		Dog d1 = new Dog("dog1",1);	
	}
}

class Dog 
{
		private String name;
		private int weight;
		public Dog(String name, int weight) 
		{
			this.setName(name);
			this.weight = weight;
		}
		public int getWeight() 
		{
			return weight;
		}
		public void setWeight(int weight) 
		{this.weight = weight;}
		public void setName(String name)
		{this.name = name;}
		public String getName() 
		{return name;}
}


Java中的嵌套类、内部类、静态内部类

嵌套类可以分为两种,静态的和非静态的,即静态嵌套类和非静态嵌套类。非静态嵌套类又叫做内部类(Inner Class)。我们通常所说的静态内部类其实是不严格的,严格的说应该叫做静态嵌套类(Static ...
  • sunqunsunqun
  • sunqunsunqun
  • 2015年06月14日 12:03
  • 3993

函数式编程--变量作用域

1,lambda表达式捕获变量 通常,我们希望能够在lambda表达式的闭合方法或类中访问其他的变量,比如下面的代码: public class Test { public void tes...
  • u011794238
  • u011794238
  • 2015年10月26日 09:58
  • 803

函数式编程--lambda表达式对比匿名内部类

从前面的整理中我们看出了,Lambda表达式其实是匿名内部类的一种简化,因此它可以部分取代匿名内部类。 1,Lambda表达式与匿名内部类存在如下相同点: 1),Lambda表达式与匿名内...
  • u011794238
  • u011794238
  • 2015年10月27日 16:00
  • 2621

Curator源码解析(三)访问接口分析

接着上一篇,将分析测试程序中的访问接口部分。 2调用ZooKeeper访问接口 初始化和启动分析完了,操作接口调用代码如下: String path = ZKPaths.makePath(PATH, ...
  • jiq408694711
  • jiq408694711
  • 2015年01月04日 23:17
  • 2915

SurfaceView 基础用法

本文总结了对SurfaceView的粗浅运用方法,通过它可以看到子线程也可去渲染一个View对象。...
  • azhengye
  • azhengye
  • 2016年01月14日 00:28
  • 2153

关于win7下 rvds的编译问题

前几天按照 http://blog.csdn.net/xqhrs232/archive/2010/05/14/5589662.aspx 中的破解方法进行了RVDS破解。但是在进行编译时出现...
  • suyanghaha
  • suyanghaha
  • 2014年04月02日 17:03
  • 232

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

在学习内部类的时候自己写了一个内部类的代码试验了一下,代码如下public class Outside { public class Inner{ public void show(){ Sys...
  • theEmperor
  • theEmperor
  • 2016年10月20日 16:06
  • 310

Android 编译工具升级到24后遇到的坑之V4包的Fragment

android.support.v4.app.Fragment版本升到24及更高后,修复了一些fragment的bug,例如显示隐藏问题,但是又改了一部分逻辑,显示隐藏问题请看这篇文章 http://...
  • hnsugar
  • hnsugar
  • 2017年04月25日 17:23
  • 1641

react3阶段学习笔记

------------------------------------------ 当我们需要获取某个节点,并改变其属性值或者其他针对性的操作时 现在节点中定义id属性,然后定以ref属性,...
  • yishu422
  • yishu422
  • 2017年05月22日 00:43
  • 1315

Linux内核编译选项-6

Firmware Drivers  ---> 固件就是你板上的BIOS、各种显卡芯片之类的已经固化好的记录某些特定数据的东西。 BIOS Enhanced Disk Drive calls de...
  • pkgfs
  • pkgfs
  • 2013年01月06日 10:02
  • 1399
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java编译时出现 No enclosing instance of type Main is accessible. Must qualify the allocation with an encl
举报原因:
原因补充:

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