【问题标题】:Java - How to access an array created in a void functionJava - 如何访问在 void 函数中创建的数组
【发布时间】:2014-01-27 20:16:14
【问题描述】:

感谢那些帮助我走到这一步的人。我做了一些改变。现在在方法 Method() 中分配 array1 的那一行出现错误。 (修改后的版本如下)

公共类 JavaApplication2 {

int[] array1;
public JavaApplication2()
{
}

public static void main(String[] args) {
    JavaApplication2 obj = new JavaApplication2();
    obj.method();
    System.out.print(obj.array1[1]);
}

public void method()
{
    array1 = {1,1,1,1,1,1};
}

}

【问题讨论】:

  • 理想的方法是让方法返回数组。

标签: java arrays void


【解决方案1】:

它们在同一个类中定义;但是它们是在方法中声明的,因此它们是局部变量。这意味着它们只存在于各自的方法中,特别是只存在于方法的单个调用中。本质上,它们会在方法退出时消失,并在每次调用方法时重新创建。

引用the tutorial

  • 局部变量 与对象在字段中存储其状态的方式类似,方法通常会将其临时状态存储在局部变量中。声明局部变量的语法类似于声明字段(例如,int count = 0;)。没有特殊关键字将变量指定为局部变量;该决定完全来自声明变量的位置——位于方法的左大括号和右大括号之间。因此,局部变量仅对声明它们的方法可见;课堂上的其他人无法访问它们。

您可能是说它们是字段(也称为实例变量),这意味着类的每个实例化对象都有自己的“个人”变量,该变量与“拥有”它的对象一起存在。字段在类内部但在方法外部声明。

public class JavaApplication2 {
    int[] array1; // variable declaration
                  // begins with the type of the variable

    public JavaApplication2() {}

    public void method() {
        array1 = {1,1,1,1,1,1}; // assignment
    }                           // begins with an identifier
}

通常,字段在构造函数期间初始化一次,因此您不必调用单独的方法来执行此操作。

public class JavaApplication2 {
    int[] array1;

    public JavaApplication2() {
        array1 = {1,1,1,1,1,1};
    }
}

【讨论】:

    【解决方案2】:

    这样做:

    public class JavaApplication2 {
        int array[];
    
        public static void main(String[] args) {
            JavaApplication2 obj = new JavaApplication2();
            obj.method();
            System.out.print(obj.array[1]);
        }
    
        public void method() {
            array = new int[]{1,1,1,1,1,1};
        }
    }
    

    您在类的构造函数中声明了一个数组,在 method() 方法中声明了一个数组。这些是局部变量,只能在该特定方法/构造函数中访问。您需要指定一个可以按照您尝试的方式访问的实例变量。

    【讨论】:

    • 您最好解释一下为什么您的答案有效。
    • 当我尝试这样做时,我在“array = {1,1,1,1,1,1}; 行收到“非法开始表达式警告”错误。有什么阻止它访问类中声明的数组,还是存在格式问题?
    【解决方案3】:

    您需要将array1 创建为类变量,以便整个类都可以访问它。作为一般的经验法则,两个括号 { } 之间的变量的范围最后一个它被初始化。在你的两个方法中,你在那些方法中初始化 array1,所以 array1 的范围只在那些方法中.

    把代码改成这样:

    public class JavaApplication2 {
    
        int[] array1;
    
        public JavaApplication2()
        {
        }
    
        public static void main(String[] args) {
            JavaApplication2 obj = new JavaApplication2();
            obj.method();
            System.out.print(obj.array1[1]);
        }
    
        public void method()
        {
            array1 = new int[]{1, 1, 1, 1, 1};
        }
    }
    

    最好将 array1[] 初始化为私有并有一个 getter 方法,如下所示:

    public class JavaApplication2 {
    
        private int[] array1;
    
        public JavaApplication2()
        {
        }
    
        public static void main(String[] args) {
            JavaApplication2 obj = new JavaApplication2();
            obj.method();
            System.out.print(obj.getArray1().[1]);
        }
    
        public void method()
        {
            array1 = new int[]{1, 1, 1, 1, 1};
        }
    
        public void getArray1()
        { 
            return array1;
        }
    }
    

    【讨论】:

    • 我在“array1 = {1,1,1,1,1,1};”这一行出现错误当我尝试运行它时......这就是为什么我首先按照我的方式声明它。知道如何解决吗?
    • 我在 array1 初始化中有错字,这可能是问题所在。我刚刚修好了,现在试试。如果它仍然不起作用,你会得到什么错误?
    • @beandaddyo 立即尝试。我在method() 方法中打错了数组的创建。
    【解决方案4】:

    因为它是空的,所以你没有初始化它。在 Method 内部,您正在初始化其他数组,而不是您要求的。

    【讨论】:

    • 你不能初始化(或访问)一开始就不存在的东西。
    • 没有回答吗?那么为何不?不明白。我无法评论faith的答案,但这会导致编译器错误。
    • 就行“System.out.print(obj.array[1]);” hi 要求未初始化的数组,thinking 要求 array1,因为它是一个字段。而什么是“第一名”?
    • 类中没有array1字段。因此你不能初始化它。
    • 什么array2?没有像array2这样的东西。用户已编辑帖子但无法使用。
    猜你喜欢
    • 2017-04-13
    • 1970-01-01
    • 2020-01-13
    • 2014-09-17
    • 2019-02-03
    • 2011-11-06
    • 2011-12-09
    • 2022-08-20
    • 2021-03-22
    相关资源
    最近更新 更多