Java如何访问initialize()方法内定义的数组到salutations()方法中
问题原因
Java中方法内部定义的变量属于局部变量,作用域仅限当前方法内部,方法执行结束后局部变量就会被回收销毁,因此其他方法无法直接访问另一个方法内部定义的局部变量,这就是你触发报错的根本原因。
解决方案
下面给出最常用的两种实现方案:
方案1:将数组提升为类的成员变量(最适配你的场景)
把需要跨方法访问的数组定义为类的全局成员变量,在initialize方法中完成赋值,其他方法就可以直接访问。
参考代码:
// 类内部、方法外部定义成员变量 private String[] salutations; private String[] verses; private String[] closing; public void initialize() { salutations = new String[]{"greetings", "hello", "good afternoon"}; verses = new String[]{"we hope you are having a good Christmas", "we wish you a merry x-mas", "we wish you a good new year"}; closing = new String[]{"", "b", "c"}; } public void salutations(){ int i = 1; // 直接用数组下标访问即可,无需使用Array.get反射方法 String x = salutations[i]; System.out.println(x + " "); }
注意:使用时需要先调用initialize方法完成数组初始化,再调用salutations方法,否则会报空指针异常。
方案2:通过方法返回值传递数组
如果你不想使用成员变量,可以修改initialize方法的返回值,把需要的数组返回给调用方使用。
参考代码:
// 方法返回salutations数组 public String[] initialize() { String[] salutations = new String[]{"greetings", "hello", "good afternoon"}; String[] verses = new String[]{"we hope you are having a good Christmas", "we wish you a merry x-mas", "we wish you a good new year"}; String[] closing = new String[]{"", "b", "c"}; return salutations; } public void salutations(){ int i = 1; // 调用initialize方法获取数组 String[] salutations = initialize(); String x = salutations[i]; System.out.println(x + " "); }
该方案的缺点是每次调用salutations都会重新执行initialize初始化数组,适合不需要复用初始化结果的场景。
额外代码优化建议
你的原代码中存在两处可优化的点:
- 不需要使用
Array.get()方法访问数组元素,Java原生支持数组名[下标]的直接访问方式,性能更好、可读性更高 System.out.println(+x+" ");中的前置+是冗余语法,可以直接删除
内容的提问来源于stack exchange,提问作者barkingdavetron
相关产品推荐
相关产品推荐

