首页 > 代码库 > Java面向对象之封装

Java面向对象之封装

有多个对象都要用到同一个功能或者多个功能,那就先定义一个工具类,之后调用

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 class hello {
    public static void main(String[] args)
    {
        int[] arr={3,4,1,8};
        ArrayTool tool=new ArrayTool();
        int max=tool.getMax(arr);
        System.out.println("max="+max);
    }

}

虽然可以通过建立ArrayTool这个对象对数组调用批量工具对数组进行操作,但是发现了问题

1.对象是用于封装数据的,可是ArrayTool对象并未封装持有数据

2.操作诗句的每一个方法都没有用到ArrayTool对象中的特有数据

这时就考虑,不需要对象

可以将ArrayTool 中的所有方法都定义为静态的,直接通过类名调用

但是还可以将其new对象,通过构造对象私有化,阻止建立对象,还有swap这样的函数不需要暴露给外界

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 class ArrayToolDemo {
    public static void main(String[] args)
    {
        int[] arr={3,4,1,8};
        int max=ArrayTool.getMax(arr);
        System.out.println("max="+max);
    }

}

 一个类中默认会有一个空参数的构造函数;

这个默认的构造函数的权限和所属类一致(public or no);

如果类被public 修饰,那么默认的构造函数也带public修饰符;

如果类没有被public修饰,那么默认的构造函数也没有public修饰。

 

执行顺序

Person p=new Person(参数);

类加载,静态代码块加载,属性(非静态)加载,默认初始化,显示初始化(直接赋值),构造代码块加载,构造函数初始化

Java面向对象之封装