如果它的构造函数中的一个类包含一个int和一个数组..我如何在另一个类中使用该数组。

时间:2010-11-12 21:23:40

标签: java

class C()
{
  num =4;
  int[] a = new int[5];
}
如果我打电话给C

,在新课程中

C c1 = new C();

我怎样才能使用数组... ??

7 个答案:

答案 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,..)。

了解更多信息:Controlling Access to Members of a Class

答案 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,而不是像其他一些人所说的那样公开变量。我不会在这里讨论公众成员与私人成员的相对优点。