A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 michael_wlq 于 2015-8-28 10:20 编辑

类中静态(方法或变量)的应用:如果每个应用程序中都有共性的功能,可以将这些功能进行抽取,独立封装,以便复用。

如果通过建立ArrayTool的对象使用工具类中的方法,对数组进行操作,但发现了以下问题:
1、对象是用于封装数据的,可是ArrayTool对象并未封装特有数据。
2、操作数组的每一个方法都没有用到ArrayTool对象中的特有数据。
这时就应该考虑,为了让程序更严谨,是不需要建立对象的(浪费内存--堆内存),此时可以将ArrayTool中的方法都定义成static的,直接通过类名调用即可。
另外,工具类中的方法如果只是为了完成内部方法的应该定一个功能,那么该方法应该定义为private,而不应该定义为public类型,只供工具类内部调用即可(也可以说为了安全性)。工具类对外只提供接口即可,无需提供内部的实现。

将方法都静态后,可以方便于使用,但是此时该类还是可以被其他程序建立对象的(为了节省内存,应当禁止),
为了更为严谨,强制让该类不能建立对象,可以通过将构造函数私有化来完成。

接下来,将ArrayTool.class文件(工具类)发送给其他人,其他人只要将该文件设置到classpath路径下,就可以使用该工具类。但是,该类中到底定义了多少个方法,以及什么方法,对方不清楚,因为该类并没有使用说明书。
而Java制作程序的说明书,可以通过文档注释来完成:
          //制作使用javadoc命令生产说明文档。
命令:javadoc -d myhelp -author -version ArrayTool.java
下面是工具类和使用工具的测试类:
  1. /**
  2.         这是一个可以对数组进行操作的工具类,该类中提供了,获取最值,排序等功能。
  3.         @author 张三
  4.         @version V1.1
  5. */
  6. public class ArrayTool
  7. {
  8.         /**
  9.                 空参数构造函数,此处为了防止生成没必要的对象,故将构造函数私有化。
  10.                 一个类中默认会有一个空参数的构造函数,这个默认的构造函数的权限和所属类一致。
  11.                 如果类被public修饰,那么默认的构造函数也带public修饰符,如果类没有被public修饰,那么默认的构造函数也没有public修饰。
  12.                 即默认构造构造函数的权限是随着的类的变化而变化的。
  13.         */
  14.         private ArrayTool(){}

  15.         /**
  16.                 获取一个整形数组中的最大值。
  17.                 @param arr 接收一个int类型的数组。
  18.                 @return 会返回一个该数组中最大值。
  19.         */
  20.         public static int getMax(int[] arr)
  21.         {
  22.                 int max = 0;
  23.                 for(int x=1; x<arr.length; x++)
  24.                 {
  25.                         if(arr[x]>arr[max])
  26.                                 max = x;
  27.                 }
  28.                 return arr[max];
  29.         }
  30.         
  31.         /**
  32.                 获取一个整形数组中的最小值。
  33.                 @param arr 接收一个int类型的数组。
  34.                 @return 会返回一个该数组中最小值。
  35.         */
  36.         public static int getMin(int[] arr)
  37.         {
  38.                 int min = 0;
  39.                 for(int x=1; x<arr.length; x++)
  40.                 {
  41.                         if(arr[x]<arr[min])
  42.                                 min = x;
  43.                 }
  44.                 return arr[min];
  45.         }
  46.                
  47.         /**
  48.                 给int数组进行选择排序。
  49.                 @param arr 接收一个int类型的数组。
  50.         */
  51.         public static void selectSort(int[] arr)
  52.         {
  53.                 for (int x=0; x<arr.length-1 ; x++ )
  54.                 {
  55.                         for(int y=x+1; y<arr.length; y++)
  56.                         {
  57.                                 if(arr[x]>arr[y])
  58.                                 {
  59.                                         swap(arr,x,y);
  60.                                 }
  61.                         }
  62.                 }
  63.         }

  64.         /**
  65.                 给int数组进行冒泡排序。
  66.                 @param arr 接收一个int类型的数组。
  67.         */
  68.         public static void bubbleSort(int[] arr)
  69.         {
  70.                 for (int x=0; x<arr.length-1 ; x++ )
  71.                 {
  72.                         for(int y=0; y<arr.length-x-1; y++)
  73.                         {
  74.                                 if(arr[y]>arr[y+1])
  75.                                 {
  76.                                         swap(arr,y,y+1);
  77.                                 }
  78.                         }
  79.                 }
  80.         }

  81.         /**
  82.                 给数组中元素进行位置的置换。
  83.                 @param arr  接收一个int类型的数组。
  84.                 @param a 要置换的位置
  85.                 @param b 要置换的位置
  86.         */
  87.         private  static void swap(int[] arr,int a,int b)
  88.         {
  89.                 int temp = arr[a];
  90.                 arr[a] = arr[b];
  91.                 arr[b] = temp;
  92.         }

  93.         /**
  94.                 用于打印数组中的元素。打印形式是:[elemet1, element2, ...]
  95.         */
  96.         public static void printArray(int[] arr)
  97.         {
  98.                 System.out.print("[");
  99.                 for(int x=0; x<arr.length; x++)
  100.                 {
  101.                         if(x!=arr.length-1)
  102.                                 System.out.print(arr[x]+", ");
  103.                         else
  104.                                 System.out.println(arr[x]+"]");
  105.                 }
  106.         }
  107. }
复制代码

测试类:
  1. class ArrayToolDemo
  2. {
  3.         //主函数只用来测试,而不具体实现功能,功能的实现通过调用工具类的方法来实现。
  4.         public static void main(String[] args)
  5.         {
  6.                 int[] arr = {3,1,87,32,8};        

  7.                 //直接通过类名调用工具类中的static方法即可。
  8.                 int max = ArrayTool.getMax(arr);
  9.                 System.out.println("max="+max);
  10.         }
  11. }
复制代码





0 个回复

您需要登录后才可以回帖 登录 | 加入黑马