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: 太感谢你了
大约 2 年之前 回复
sxwws
sxwws   2016.05.06 16:20

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

qq_29484347
qq_29484347 回复sxwws: 怎么改呢?我把arrysort类改成static的就运行成功了
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
JAVA outer(外部)类和Inner(内部)类
JAVA外部类和内部类纪念一个不规范 操作 易错的书写带来的小小bug起初以为这个类是很少用到的 后来发现因为自己的变成习惯的不好 还是经常发生的。。。刚开始写的时候,始终记者一个文件一个公有类  所以类中有类的习惯是经常发生的然后之前是这样的错误:错误原因:No enclosing instance of type fuxi is accessible. Must qualify the all...
没有任何类型 Test1 的外层实例可访问。必须用类型 Test1 的外层实例(例如,x.new A(),其中 x 是 Test1 的实例)来限定分配。
在main方法中创建类Person,视为内部类,可以直接new Person,在main方法外创建的类,需要先实例化一个外层的对象A,再通过A.new来实例类Person package new_start1; public class Test1 { class Person { public String name; public int age; public Person
Java编程思想笔记
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富的快捷键 快捷键 加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl
问题:无法使用实例引用来访问成员,请改用类型名来限制它。
先说问题哈:如下图1号处总是报:无法使用实例引用来访问成员,请改用类型名来限制它。其中CtrlCan为ControlCAN的实例。当按指引所示做后确实OK了,如图中2位置处,至少不报错了,但心中还是不理解,经过网上查发现有人遇到这个问题了,但是下面没有解决的方式。极其好奇。。。经多次尝试后发现当把定义中的const去掉后,一切都是那么的美好了。后经结论推原因发现:实例化的作用是对新实例分配内存,而...
Java中如何调用匿名内部类
我们都知道,在开发中,有时不想写太多的代码,于是乎就用匿名的类不类,但有时我们的开发中要访问到匿名类不类的方法,当然,访问的方法有很多,但要是下面的一个例子呢? public class Demo { public static void main(String[]args){ //我想在这里调用Sy这个类 } class Sy{ public void show(){
泛型中的自限定类型
自限定类型强制泛型当做其自己的边界参数来使用。 package a; /** * Created by msc on 2017/1/15. */ class SelfBounded>{ T element; SelfBounded set(T arg){ element=arg; return this; } T get(){
Java泛型 类型变量的限定
有时候,类和方法需要对类型变量加以约束,比如你有一个方法,你只希望它接收某个特定类型及其子类型作为参数。 下面就举一个方法限定接收参数的类型的例子来说明如何限定类型变量。 首先有几个简单的辅助类: package generic; public class Person extends Animal { private String name; public Person(Strin
Java泛型类型限定和通配符类型限定
泛型类型变量的限定 泛型的基础知识可以参考其他教程。 如果在方法前指定了,那么就是说,方法的这个泛型类型和类定义时的泛型类型无关,这个特性让泛型方法可以定义在普通类中而不是泛型类中。 我们都知道,泛型中可以限定类型变量必须实现某几个接口或者继承某个类,多个限定类型用&分隔,类必须放在限定列表中所有接口的前面。例如: import java.io.Serializable; /**
C#类访问修饰符
微软官方文档http://msdn.microsoft.com/zh-cn/library/wxh6fsc7(VS.80).aspx访问修饰符是一些关键字,用于指定声明的成员或类型的可访问性。访问修饰符有四个:public protected internal private声明的可访问性 含义 public 访问不受限制。 protected 访问仅限于包含类或从包含类...
JAVA——泛型限定(占位符)
?通配符。也可以理解为占位符。 泛型的限定: ?extends E: 可以接受E类型或者E的子类型。上限 ?super E: 可以接收E类型或者E的父类型。下限 import java.util.*; class GenericDemo6 { public static void main(String[] args) { ArrayListal = n