黑马程序员——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));
}
`
编译时出现:
于是发现了一处错误:maxArr方法里面参数中多加了个逗号。
解决掉之后,又出现这样的情况:
这里是重点:
static:
用static修饰的方法称为静态方法,修饰变量则为静态变量,又分别叫做类方法或者类变量。
静态方法中不能直接调用非静态方法。因为非静态方法不是独立存在的,它是依附于对象存在——即只有申明了对象,才能通过对象调用。而静态方法则可以直接通过类名调用,而不需要申明对象。因此直接引用非静态方法就会出错。
比如常见的main方法都是静态的,必须由static修饰,因此在main方法里调用类的其他非静态方法,都是需要先申明对象,才能用。否则就会出现引用非静态方法的错误。
要解决这个问题,可以去除一般方法的static关键字(如果是main方法,则不能去掉static)。另外一种方法就是把需要引用的方法也设置成静态方法。
所以问题代码的解决方法就是将public int maxArray(int[] arr)改为
public static int maxArray(int[] arr),编译成功。
不过笔者也试了另一种比较麻烦的方法,不推荐使用。就是在main函数中新建Test5类的子类对象,用子类对象调用maxArray方法,代码如下:
问题的由来:
笔者今天做了一道练习题如下:
需求:编写程序接收键盘输入的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);
相关文章推荐
- 2015实习求职总结
- 2015摩根士丹利(Morgan Stanley)实习电话面试
- 黑马程序员——集合框架详解
- 程序员面试内容
- 微软100题(45)几道雅虎面试题
- 微软100题(44)几道腾讯面试题
- 面试题22:栈的压入弹出序列
- 个人发展(职业规划)
- 面试题21:包含min函数的栈
- 面试题之final,finally和finalize的区别以及如果catch里面有return语句,请问finally里面的代码还会执行吗?
- 求职-如何伪装一份cs的简历
- [程序员短壁纸]2015年05月
- 黑马程序员——java面向对象-继承
- 黑马程序员——内部类
- 黑马程序员——OC 基础:实例变量修饰符,description方法和多态
- 面试题:将一个数用二进制打印输出…
- Andorid工程师的职业生涯
- 【黑马程序员】----java基础---面向对象
- 程序员的工作环境与效率
- 国外程序员整理的机器学习资源大全