class C()
{
num =4;
int[] a = new int[5];
}
如果我打电话给C ,在新课程中
C c1 = new C();
我怎样才能使用数组... ??
答案 0 :(得分:2)
通常不建议允许直接访问来自不同类的变量。你应该做的是这样的事情:
public class C
{
private int num = 4;
private int[] a = new int[5];
public int[] geta()
{
int[] arr = new int[a.length];
System.arraycopy(a, arr, 0, a.length)
return arr;
}
}
public class Foo
{
.
.
.
C c = new C();
int[] nums = c.geta();
}
This帖子可以帮助您了解更好的getter和setter
编辑:感谢您的评论rsp。
答案 1 :(得分:2)
为您的班级提供一个访问者(getter)方法,让它制作一个数组的防御性副本。
public int[] getA(){
return Arrays.copyOf(a, a.length);
}
现在另一个类可以c.getA()
来获取数组的副本(因此我们保护原始数组不被修改)。
答案 2 :(得分:0)
假设您在同一个包中使用它,那么只需要int [] arr = c.a;否则你必须公开C.a字段。
答案 3 :(得分:0)
简单方法: 公开。
艰难的道路:(更专业) 将其私有化并提供公共财产。
C c1 = new C();
c1.a[0] = 3;
// So on...
答案 4 :(得分:0)
一些解释:对类字段的默认访问是包访问。默认访问意味着不使用访问修饰符(public,private,..)。
答案 5 :(得分:0)
:一种。强>
c1.a
仅适用于属于同一包级别的那些类。
答案 6 :(得分:0)
由于您已将int [] a定义为构造函数中的局部变量,因此任何其他类或同一类的其他函数都无法访问它。也许你的意图是使它成为一个成员变量,即
public class C
{
public int[] a;
public int num;
public C()
{
a=new int[5];
num=42;
}
}
然后在其他地方你可以写:
C c=new C();
if (c.num==37) ... etc ...
可以说你可能想要获取getter和setter,而不是像其他一些人所说的那样公开变量。我不会在这里讨论公众成员与私人成员的相对优点。