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

——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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值