2 qq 29484347 qq_29484347 于 2016.05.06 16:03 提问

JAVA必须使用类型的外层实例来分配限定?

package test;

public class Simple {
public static void main(String[] args)
{
int[]arry={3,56,46,33,112,32,48,45,21,88,64,32,7,88,64};
arrysort as= new arrysort();
arry=as.sort(arry);
for(int i=0;i<arry.length;i++)
{
System.out.println(arry[i]);
}
}
class arrysort
{
public int[] sort(int[]arry)

{
int size=arry.length-1;
boolean swaps;
do{
swaps=false;
for(int i=0;i {if(arry[i]>arry[i+1])
{int temp=arry[i];
arry[i]=arry[i+1];
arry[i+1]=temp;
}
}
size--;
}while(swaps);
int[]sortresult=new int[size];
sortresult=arry;
return sortresult;
}
}

}

arrysort as= new arrysort()就是在main中创建一个对象时报错:没有任何Simple类型的外层实例可用访问,必须使用类型simple的外层实例来限定分配。
为什么创建arrysort类的对象是出错了啊?

2个回答

fk002008
fk002008   2016.05.06 16:37
已采纳

你可以把内部类看成一个整体,那么就如同你定义了Simple的一个成员一样。

请问static 修饰的main函数中能直接访问一个类的成员吗?
要访问该怎么弄呢?

必须提供一套这个getter和setter方法吧

所以你看成整体的内部类arrysort需要一个getter哦
比如
在Simple中定义

   public Arrysort getArrysort(){
 return new Arrysort();
   }
        ```
以上都是一个解决的方法

其实呢内部类本身可以看成是一个宿主类的成员的。整体法看他。

既然是内部类那么信息只共宿主类Simple使用。如果能在main函数中使用它那么也能在别处使用,内部还有什么意义呢。
内部使用,所以应该在Simple类中做一个排序的方法,只不过这个方法的实现由这个内部类完成哦
这样外部调用这个方法就可以了吗
何必非要在main函数中调用内部类呢

其次,你可以把这个内部类定义成static的
static class arrysort

这样他就是一个工具了,可以直接在main函数中使用的

至于这个内部类和宿主类之间变量共享访问的问题你可以看看Java编程思想。


如有帮助还请采纳
qq_29484347
qq_29484347 回复lambda-fk: 太感谢你了
一年多之前 回复
sxwws
sxwws   2016.05.06 16:20

因为你定义的arrysort类是Simple类的内引类。如果编译后,你会通过class的名字就可以发现这2个类之间是有关系的。

qq_29484347
qq_29484347 回复sxwws: 怎么改呢?我把arrysort类改成static的就运行成功了
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!