关于对像创建??

九分石人
  • 8

这样不可以吗??

package one;
public class One extends Exception {
    static String[] a = null;
    public static void main(String[] args) {
        // TODO 自动生成的方法存根    
        two(a);
    }
    public static void two(String[] a) {
        for (int i = 0; i < 5; ++i) {
            a[i] = new String();
        }
        for (int k = 0; k < 5; ++k) {
            String h = tostring(k);
            a[k] = h;
        }
    }
    private static String tostring(int k) {
        // TODO 自动生成的方法存根
        String s = "k";
        return s;
    }
}

求大神指点??

回复
阅读 1.3k
2 个回答
✓ 已被采纳

String[] a = null,然后你将 a 传入 two(),而在 two() 中并没有检查 a 是否为 null,也没有对其进行初始化就直接使用了 a[i],所以肯定是空指针异常。

two() 在这里从逻辑上判断应该是对 a 进行初始化,那其实可以在一开始加上 a = new String[5](根据循环判断容量是 5。或者可以加个逻辑判断在 anull 的时候初始化为 5

if (a == null) {
    a = new String[5];
}

另外,没有必要先初始化为一个空字符串再对其赋值,所以第一个使用 i 作为循环变更的循环是多余的,除了浪费堆空间,什么作用都没有。

还有第二个循环中的 h 作为一个中间变量,在这里也是完全不需要的,直接对 a[k] 赋值 tostring() 的结果就好。


tostring(k) 中的参数 k 在代码中完全没起到作用,如果你代码中的 "k" 本意是想把 k 转换成字符串,应该使用 Integer.toString(k)


最后还要提的是,注意命名语义化,比如 two() 其实似乎应该命名为 init()initilize()

刚看一点,没看完。你a一开始是null,调用a[i]不久nullPointerException了?起码a=new String[5]啊。

你知道吗?

宣传栏