黑马程序员技术交流社区
标题:
Java基础--工具类的使用及static的应用场景
[打印本页]
作者:
michael_wlq
时间:
2015-8-28 10:19
标题:
Java基础--工具类的使用及static的应用场景
本帖最后由 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
下面是工具类和使用工具的测试类:
/**
这是一个可以对数组进行操作的工具类,该类中提供了,获取最值,排序等功能。
@author 张三
@version V1.1
*/
public class ArrayTool
{
/**
空参数构造函数,此处为了防止生成没必要的对象,故将构造函数私有化。
一个类中默认会有一个空参数的构造函数,这个默认的构造函数的权限和所属类一致。
如果类被public修饰,那么默认的构造函数也带public修饰符,如果类没有被public修饰,那么默认的构造函数也没有public修饰。
即默认构造构造函数的权限是随着的类的变化而变化的。
*/
private ArrayTool(){}
/**
获取一个整形数组中的最大值。
@param arr 接收一个int类型的数组。
@return 会返回一个该数组中最大值。
*/
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];
}
/**
获取一个整形数组中的最小值。
@param arr 接收一个int类型的数组。
@return 会返回一个该数组中最小值。
*/
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];
}
/**
给int数组进行选择排序。
@param arr 接收一个int类型的数组。
*/
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);
}
}
}
}
/**
给int数组进行冒泡排序。
@param arr 接收一个int类型的数组。
*/
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);
}
}
}
}
/**
给数组中元素进行位置的置换。
@param arr 接收一个int类型的数组。
@param a 要置换的位置
@param b 要置换的位置
*/
private static void swap(int[] arr,int a,int b)
{
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
/**
用于打印数组中的元素。打印形式是:[elemet1, element2, ...]
*/
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]+"]");
}
}
}
复制代码
测试类:
class ArrayToolDemo
{
//主函数只用来测试,而不具体实现功能,功能的实现通过调用工具类的方法来实现。
public static void main(String[] args)
{
int[] arr = {3,1,87,32,8};
//直接通过类名调用工具类中的static方法即可。
int max = ArrayTool.getMax(arr);
System.out.println("max="+max);
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2