静态使用
下面建立ArrayTool的对象使用这些工具方法,对数组进行操作。要从两方面入手:因为静态修饰的内容有成员变量和函数。
public class Demo24 { public static void main(String[] args) { } } class ArrayTool{ public int getMax(int[] arr){ int max=0; for(int x=1;x<arr.length;x++){ if(arr[x]>arr[max]){ max=x; } } return arr[max]; } public int getMin(int[] arr){ int min=0; for(int x=1;x<arr.length;x++){ if(arr[x]<arr[min]){ min=x; } } return arr[min]; } public void selectSort(int[] arr){ for(int x=0;x<arr.length -1;x++){ for(int y=x+1;y<arr.length;y++){ if(arr[x]>arr[y]){ swap(arr, x, y); } } } } public void bubbleSort(int[] arr){ for(int x=0;x<arr.length-1;x++){ for(int y=0;y<arr.length-x-1;y++){ if(arr[y]>arr[y+1]){ swap(arr, y, y+1); } } } } public void swap(int[] arr,int a,int b){ int temp=arr[a]; arr[a]=arr[b]; arr[b]=temp; } public void printArray(int[] arr){ System.out.print("["); for(int x=0;x<arr.length;x++){ if(x!=arr.length -1){ System.out.print(arr[x]+" "); } else { System.out.print(arr[x]+"]"); } } } }
在另一个java文件中调用上面定义的工具类,如下:
public class Demo25 { public static void main(String[] args){ int[] arr={7,4,5,2,8}; ArrayTool tool=new ArrayTool(); int max=tool.getMax(arr); System.out.println(max); int min=tool.getMin(arr); System.out.println(min); tool.bubbleSort(arr); tool.printArray(arr); } }
运行结果为:
8
2
[2 4 5 7 8]
虽然可以通过建立ArrayTool的对象使用这些工具方法,对数组进行操作。
发现了问题:
1、对象是用于封装数据的,可是ArrayTool对象并未封装特有数据。
这时就考虑,让程序更严谨,是不需要对象的。可以将ArrayTool中的方法都定义成静态(static)的,可以通过类名直接调用即可。2、操作数组的每一个方法都没有用到ArrayTool对象中的特有数据。
上面程序就可以改变为:
public class Demo24 {
public static void main(String[] args) {
}
}
class ArrayTool{
public static int getMax(int[] arr){
int max=0;
for(int x=1;x<arr.length;x++){
if(arr[x]>arr[max]){
max=x;
}
}
return arr[max];
}
public static int getMin(int[] arr){
int min=0;
for(int x=1;x<arr.length;x++){
if(arr[x]<arr[min]){
min=x;
}
}
return arr[min];
}
public static void selectSort(int[] arr){
for(int x=0;x<arr.length -1;x++){
for(int y=x+1;y<arr.length;y++){
if(arr[x]>arr[y]){
swap(arr, x, y);
}
}
}
}
public static void bubbleSort(int[] arr){
for(int x=0;x<arr.length-1;x++){
for(int y=0;y<arr.length-x-1;y++){
if(arr[y]>arr[y+1]){
swap(arr, y, y+1);
}
}
}
}
public static void swap(int[] arr,int a,int b){
int temp=arr[a];
arr[a]=arr[b];
arr[b]=temp;
}
public static void printArray(int[] arr){
System.out.print("[");
for(int x=0;x<arr.length;x++){
if(x!=arr.length -1){
System.out.print(arr[x]+" ");
}
else {
System.out.print(arr[x]+"]");
}
}
}
}
在另一个java文件中调用上面定义的工具类,如下:
public class Demo25 {
public static void main(String[] args){
int[] arr={7,4,5,2,8};
/*
ArrayTool tool=new ArrayTool();
int max=tool.getMax(arr);
System.out.println(max);
int min=tool.getMin(arr);
System.out.println(min);
tool.bubbleSort(arr);
tool.printArray(arr);
*/
//此刻是不需要创建对象
int max=ArrayTool.getMax(arr);
System.out.println(max);
int min=ArrayTool.getMin(arr);
System.out.println(min);
ArrayTool.bubbleSort(arr);
ArrayTool.printArray(arr);
}
}
运行结果为:
8
2
[2 4 5 7 8]
将方法都静态后,可以方便的使用,但是该类还是可以被其它程序建立对象的。
为了更严谨,强制让该类不能建立对象。
可以通过将构造函数私有化完成。
程序修改如下:
public class Demo24 {
public static void main(String[] args) {
}
}
class ArrayTool{
private ArrayTool() {//将构造函数私有化
}
public static int getMax(int[] arr){
int max=0;
for(int x=1;x<arr.length;x++){
if(arr[x]>arr[max]){
max=x;
}
}
return arr[max];
}
public static int getMin(int[] arr){
int min=0;
for(int x=1;x<arr.length;x++){
if(arr[x]<arr[min]){
min=x;
}
}
return arr[min];
}
public static void selectSort(int[] arr){
for(int x=0;x<arr.length -1;x++){
for(int y=x+1;y<arr.length;y++){
if(arr[x]>arr[y]){
swap(arr, x, y);
}
}
}
}
public static void bubbleSort(int[] arr){
for(int x=0;x<arr.length-1;x++){
for(int y=0;y<arr.length-x-1;y++){
if(arr[y]>arr[y+1]){
swap(arr, y, y+1);
}
}
}
}
private static void swap(int[] arr,int a,int b){//没有必要让用户知道,可以私有化
int temp=arr[a];
arr[a]=arr[b];
arr[b]=temp;
}
public static void printArray(int[] arr){
System.out.print("[");
for(int x=0;x<arr.length;x++){
if(x!=arr.length -1){
System.out.print(arr[x]+" ");
}
else {
System.out.print(arr[x]+"]");
}
}
}
}