由于代码重用度很高,所以会使用方法来进行封装,便于调取使用。
例子:
class ArrayDemo{
public static void main(String[] args){
//定义数组
int[] arr = {25,99,78,98,87};
//需求:遍历数组
// for(int x=0;x<arr.length;x++){
// if(x==arr.length-1){
// System.out.println(arr[x]);
// }else{
// System.out.print(arr[x]+",");
// }
// }
printArray(arr);
}
public static void printArray(int[] arr){
for(int x=0;x<arr.length;x++){
if(x==arr.length-1){
System.out.println(arr[x]);
}else{
System.out.print(arr[x]+",");
}
}
}
}
但是,当printArray方法不是静态方法时,调用会出现"错误:无法从静态上下文中引用非静态方法printArray(int[])",解决办法有两个,
第一,在main方法下写:
ArrayDemo ad = new ArrayDemo();
ad.printArray(arr);//main方法下调用自身对象调用,但是比较麻烦,因为先要创建对象
第二个办法就是:
创建一个ArrayTool的类,然后在main方法下进行调用
class ArrayTool {
//把构造方法私有,外界就不能在创建对象了
private ArrayTool(){}
public static void printArray(int[] arr) {
for(int x=0; x<arr.length; x++) {
if(x == arr.length-1) {
System.out.println(arr[x]);
}else {
System.out.print(arr[x]+", ");
}
}
}
}
在main方法下,直接
//方法改进为静态后,就可以直接通过类名调用
ArrayTool.printArray(arr);//这个比较好,因为只要加载类,就可以进行调用,省去创建对象的操作。
若在同一个文件夹下,ArrayDemo类与ArrayTool类都没有编译,但是ArrayDemo中的main方法调用了ArrayTool类,只需直接编译ArrayDemo类就可以了,因为编译器会自动对调用类,即ArrayTool类进行编译,方便执行,免除编译重复操作。
注意:在该类有静态方法时,是可以不用构造(即 new)就可以对类中方法进行调用,但是也可以利用构造函数进行构造(原因是:一个类不写构造函数,会自动添加一个默认无参的构造函数,所以,外界才能调用构造函数),为了把构造方法封住,不让使用者调用其构造方法,我们可以把构造方法变为显式,加入private权限,只允许本类内部进行访问。
即:private ArrayTool(){}