static关键字总结: 
       1,static 是一个修饰符,用于修饰成员(成员变量,成员方法),用static修饰的成员,将存储于方法区中 
       2,静态随着类的加载而加载,随着类的释放而消失,故静态是先于对象存在,且生命周期最长! 
       3,被所有的对象共享。调用方式:类名.静态成员 
       4,静态方法只能访问静态成员(静态中不可以出现this,super关键字) 
       5,静态存储的是共享的内容,所以可以节省内存空间,但同时,生命周期过长,访问出现局限性(只能访问静态) 
       6,每一个程序中都有共性的内容,可以将这些共性的内容独立抽取,封装,以便使用。。 
            【当功能内部没有访问到非静态数据(对象的特有数据,所谓对象特有的数据,就是随着对象的建立 
             而产生的特有的数据),那么该功能可以定义成静态的。】 
 
如下例: 
 
class ArrayTool{ //工具类 
 String name; 
 //所谓对象的特有数据,是指随着对象的建立而产生的特有数据,比如,人的姓名,性别,年龄, 
 private ArrayTool(){}//构造函数私有化,禁止创建对象 
 /** 
  *  
  * @param arr 
  * @return 
  */ 
 public static int getMax(int[] arr){ 
  //this.name = arr[1]; 类中的静态先于对象存在,不能使用this,super关键字 
  int max = 0; 
  for(int x=1;x<arr.length;x++){ 
   if(arr[max]<arr[x]){ 
    max = x; 
   } 
  } 
  return max; 
 } 
 /** 
  *  
  * @param arr 
  * @return 
  */ 
 public static int getMin(int[] arr){ 
  int min = 0; 
  for(int x=1;x<arr.length;x++){ 
   if(arr[min] > arr[x]){ 
    min = x; 
   } 
  } 
  return min; 
 } 
 /** 
  * 选择排序 
  * @param arr 
  */ 
 public static void selectSort(int[] arr){ 
  for(int x=0;x<arr.length-1;x++){ 
   for(int y=x+1;y<arr.length-1;y++){ 
    if(arr[x] >arr[y]){ 
     swap(arr,x,y); 
    } 
   } 
  } 
 } 
 /** 
  * 冒泡排序 
  * @param arr 
  */ 
 public static void bubbleSort(int[] arr){ 
  for(int x=0;x<arr.length;x++){ 
   for(int y=0;y<arr.length-x-1;y++){ 
    if(arr[y]>arr[y+1]){ 
     swap(arr,y,y+1); 
    } 
   } 
  } 
 } 
 /** 
  * 交换位置的函数 
  * @param arr 
  * @param x 
  * @param y 
  */ 
 private static void swap(int[] arr,int x,int y){ //外部访问没用,定义成私有的 
  int temp = arr[x]; 
  arr[x] = arr[y]; 
  arr[y] = temp; 
 } 
 /** 
  * 输出数组的元素 
  * @param arr 
  */ 
 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.println(arr[x]+"]"); 
   } 
  } 
 } 
 /** 
  * 输出函数 
  * @param arr 
  * @param x 
  */ 
 public static void beforeSortMax(int[] arr,int x){ 
  System.out.println("排序前的最大值是:"+arr[x]); 
 } 
 /** 
  * 输出函数 
  * @param arr 
  * @param x 
  */ 
 public static void afterSortMax(int[] arr,int x){ 
  System.out.println("排序后的最大值是:"+arr[x]); 
 } 
 /** 
  * 输出函数 
  * @param arr 
  * @param x 
  */ 
 public static void beforeSortMin(int[] arr,int x){ 
  System.out.println("排序前的最小值是:"+arr[x]); 
 } 
 /** 
  * 输出函数 
  * @param arr 
  * @param x 
  */ 
 public static void afterSortMin(int[] arr,int x){ 
  System.out.println("排序后的最小值是:"+arr[x]); 
 } 
} 
public class StaticDemo3 { 
 public static void main(String[] args){ 
  //ArrayTool at = new ArrayTool();是错误的,构造函数私有,不能创建对象 
  int[] ar = {8,9,1,3,0,11,18}; 
  ArrayTool.printArray(ar); 
  ArrayTool.beforeSortMax(ar, ArrayTool.getMax(ar)); 
  //int max1 = ArrayTool.getMax(ar); 
  //System.out.println("排序前的最大值是:"+ar[max1]); 
  //int min1 = ArrayTool.getMin(ar); 
  //System.out.println("排序前的最小值是:"+ar[min1]); 
  ArrayTool.beforeSortMin(ar, ArrayTool.getMin(ar)); 
  ArrayTool.bubbleSort(ar); 
  ArrayTool.printArray(ar);   
  //int max2 = ArrayTool.getMax(ar); 
  //System.out.println("排序后的最大值是:"+ar[max2]); 
  ArrayTool.afterSortMax(ar, ArrayTool.getMax(ar)); 
   
  //int min2 = ArrayTool.getMin(ar); 
  //System.out.println("排序后的最小值是:"+ar[min2]); 
  ArrayTool.afterSortMin(ar, ArrayTool.getMin(ar)); 
   
  int[] a1 = {88,38,29,34,100,80,68,70}; 
  ArrayTool.printArray(a1); 
   
  ArrayTool.beforeSortMax(a1, ArrayTool.getMax(a1)); 
  //int max3 = ArrayTool.getMax(a1); 
  //System.out.println("排序前的最大值是:"+a1[max3]); 
  ArrayTool.beforeSortMin(a1, ArrayTool.getMin(a1)); 
  //int min3 = ArrayTool.getMin(a1); 
  //System.out.println("排序后的最小值是:"+a1[min3]); 
  ArrayTool.bubbleSort(a1); 
  ArrayTool.printArray(a1); 
   
  ArrayTool.afterSortMax(a1, ArrayTool.getMax(a1)); 
  ArrayTool.afterSortMin(a1, ArrayTool.getMin(a1)); 
 } 
  
} 
 
 |