静态的应用

来源:互联网 发布:淘宝自己退货率怎么看 编辑:程序博客网 时间:2024/05/21 02:34

作者:叁念


1.什么时候使用静态?


要从两方面下手:
因为静态修饰的内容有成员变量和成语函数

1.什么时候定义静态变量(类变量)呢?
当对象中出现共享数据时,该数据被静态所修饰
对象中的特有数据要定义成非静态存在于堆内存中

2.什么时候定义静态函数呢?
当功能内部没有访问到非静态数据(对象的特有数据)
那么功能可以定义成静态的


演示代码:

class Person{    String name;    public  static void show()// 没有使用到对象特有数据所以用static    {        System.out.println("哈哈");    }}public class Demo {    public static void main(String[] args) {    //  Person p = new Person();    //      p.show();    Person.show();    }}

2.静态的应用


  • 每一个应用程序都有共性的功能
  • 可以将这些功能进行抽取,独立封装,以便复用

首先来个工具类

class ArraryTool{    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 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[x]>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.println(arr[x]+"]");        }    }}

再来个Demo1


public class Demo1 {    public static void main(String[] args) {        int [] arr = {3,1,87,32,8};        ArraryTool tool = new ArraryTool();        int max = tool.getMax(arr);        System.out.println("max= "+max);        int min = tool.getMin(arr);        System.out.println("min= "+min);        tool.printArray(arr);        tool.selectSort(arr);        tool.printArray(arr);        int [] arr1 = {};        ArraryTool tool1 = new ArraryTool();    }}

虽然可以通过建立ArraryTool的对象使用这些工具方法,对数组进行操作。
发现了问题:
1.对象是用于封装数据的,可是ArraryTool对象并未封装特有数据
2.操作数组的每一个方法都没有用到ArraryTool对象中的特有数据

这时就考虑,让程序更严谨,是不需要对象的
可以将ArraryTool中的方法都定义成静态的。直接通过类名调用即可

public class Demo1 {    public static void main(String[] args) {        int [] arr = {3,1,87,32,8};        int max = ArraryTool.getMax(arr);        System.out.println("max= "+max);    }}

将方法都静态后,可以方便于使用,但是该类还是可以被其他程序建立对象的
为了更为严谨,强制让该类不能建立对象
可以通过将构造函数私有化完成

private ArraryTool(){}