关于Java的返回值有关问题:太奇怪了!
关于Java的返回值问题:太奇怪了!!!
今天没事复习了一下Java基础知识,发现一个大问题!!
两段代码
这个程序i能正常返回,打印出值;
这个程序在main中调用会出现NULLPOINTEREXCEPTION
我实在有点搞不明白。。。???
------解决思路----------------------
------解决思路----------------------
千万不要用C++的思想来看Java,很多C++不能做的Java却可以,我理解你说的不返回局部变量,因为在C++里面函数结束之后局部变量就无法使用了,但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;
}
------解决思路----------------------
千万不要用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;
}