您的位置:首页 > 职场人生

黑马程序员——Java错误笔记——static

2015-05-31 14:00 330 查看
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

问题的由来:

笔者今天做了一道练习题如下:

需求:编写程序接收键盘输入的5个数,装入一个数组,并找出其最大数和最小数

笔者是这样做的:

`import java.io.*;

import java.util.*;

class Test5

{

public static void main(String[] args)

{

//将输入数存入数组

Scanner in = new Scanner(System.in);

int[] arr = new int[5];

for (int i=0;i< arr.length ;i++ )

{

arr[i]=in.nextInt();

}

//求最大数

maxArr(arr);

System.out.println(maxArr(arr));

//求最小数

minArr(arr);

System.out.println(minArr(arr));

}
public  int maxArr(int[], arr)
{
int max = arr[0];
for (int i=1;i<arr.length ;i++ )
{
if (arr[i]>max)
{
max = arr[i];
}
}

return max;
}
public  int minArr(int[] arr)
{
int min = arr[0];
for (int i=1;i<arr.length ;i++ )
{
if (arr[i]<min)
{
min =arr[i];
}
}
return min;
}


}

`

编译时出现:



于是发现了一处错误:maxArr方法里面参数中多加了个逗号。

解决掉之后,又出现这样的情况:



这里是重点:

static:

用static修饰的方法称为静态方法,修饰变量则为静态变量,又分别叫做类方法或者类变量。

静态方法中不能直接调用非静态方法。因为非静态方法不是独立存在的,它是依附于对象存在——即只有申明了对象,才能通过对象调用。而静态方法则可以直接通过类名调用,而不需要申明对象。因此直接引用非静态方法就会出错。

比如常见的main方法都是静态的,必须由static修饰,因此在main方法里调用类的其他非静态方法,都是需要先申明对象,才能用。否则就会出现引用非静态方法的错误。

要解决这个问题,可以去除一般方法的static关键字(如果是main方法,则不能去掉static)。另外一种方法就是把需要引用的方法也设置成静态方法。

所以问题代码的解决方法就是将public int maxArray(int[] arr)改为

public static int maxArray(int[] arr),编译成功。

不过笔者也试了另一种比较麻烦的方法,不推荐使用。就是在main函数中新建Test5类的子类对象,用子类对象调用maxArray方法,代码如下:

Test5 t = new Test5();
t.maxArray(arr);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: