关于Java的返回值有关问题:太奇怪了!

关于Java的返回值问题:太奇怪了!!!
今天没事复习了一下Java基础知识,发现一个大问题!!
两段代码
class Demo
{
public static void main(String [] args)
{
System.out.println(printx());
}

public static int printx()
{
int i=1;
return i;
}

}

这个程序i能正常返回,打印出值;
public static int FindMin(int[] array)
{
int MinOfArray=array[0];
for(int j=0;j<array.length;j++)
{
if(array[j]<MinOfArray)
MinOfArray=array[j];
}
return MinOfArray;
}

这个程序在main中调用会出现NULLPOINTEREXCEPTION 
我实在有点搞不明白。。。???
------解决思路----------------------
public static int FindMin(int[] array) {
    int MinOfArray=array[0];
    for(int j=0;j<array.length;j++) {
        if(array[j]<MinOfArray)
        MinOfArray=array[j];
    }
    return MinOfArray;
}
这个方法改一下
public static int FindMin(int[] array) {
    /* 不管你对调用方多么有信心,你都应该对传进来的参数做检查,应该对方法的执行做保证。抛出异常可以在出现问题时更容易定位,另外,如果你的array里肯定都是正整数,也可以通过return -1;的方式来告诉调用方这个方法执行出现了问题。 */
    if (array == null 
------解决思路----------------------
 array.length == 0) {
        throw new IllegalArgumentException("invalid argument array: " + array);
    }
    /* 这是前面做了array.length肯定大于0的检查了,你可以让minOfArray = array[0],但更好的方式是先赋一个极大值,这样即使没有检查,也不会出现数组越界。 */
    int minOfArray = Integer.MAX_VALUE; //局部变量通常首字母小写
    for(int j=0;j<array.length;j++) {
        if(array[j]<minOfArray)
        minOfArray=array[j];
    }
    return minOfArray;
}

------解决思路----------------------
引用:
Quote: 引用:

public static int FindMin(int[] array) {
    int MinOfArray=array[0];
    for(int j=0;j<array.length;j++) {
        if(array[j]<MinOfArray)
        MinOfArray=array[j];
    }
    return MinOfArray;
}
这个方法改一下
public static int FindMin(int[] array) {
    /* 不管你对调用方多么有信心,你都应该对传进来的参数做检查,应该对方法的执行做保证。抛出异常可以在出现问题时更容易定位,另外,如果你的array里肯定都是正整数,也可以通过return -1;的方式来告诉调用方这个方法执行出现了问题。 */
    if (array == null 
------解决思路----------------------
 array.length == 0) {
        throw new IllegalArgumentException("invalid argument array: " + array);
    }
    /* 这是前面做了array.length肯定大于0的检查了,你可以让minOfArray = array[0],但更好的方式是先赋一个极大值,这样即使没有检查,也不会出现数组越界。 */
    int minOfArray = Integer.MAX_VALUE; //局部变量通常首字母小写
    for(int j=0;j<array.length;j++) {
        if(array[j]<minOfArray)
        minOfArray=array[j];
    }
    return minOfArray;
}

话说方法执行完毕后,栈内的局部变量就会消失,为什么还能返回给主调函数,在C或C++时,我总是十分注意不要返回局部变量,难道在Java中没有这个问题吗?


千万不要用C++的思想来看Java,很多C++不能做的Java却可以,我理解你说的不返回局部变量,因为在C++里面函数结束之后局部变量就无法使用了,但Java不存在这个问题。

比如,可以这么写:


    public int getSQLCount(String sql) throws Exception {
        conn = DBManager.getConnection();
        QueryRunner qr = new QueryRunner();
        Long countValue = (Long) qr.query(conn, sql, new ScalarHandler(1));
        int count = countValue.intValue();
        DBManager.closeConnection();
        return count;
    }