成员方法分类:
静态成员方法(有static修饰 属于类)建议用类名访问,也可以用对象访问
实例成员方法(无static修饰 属于对象)只能用对象出发访问




使用static来定义一些工具类

工具类直接使用类名.方法调用即可,将构造器私有化,不要对外产生对象。



/*
* 工具类
* */
public class ArraysUtils {
    //构造器私有化
    private ArraysUtils(){
    }
    //数组转字符串
    public static String tostring(int[] arr){
        if(arr == null){
            return null;
        }
        String result = "[";
        for (int i = 0; i < arr.length; i++) {
            if(i == arr.length - 1){
                result += (arr[i] + "]");
            }else{
                result += (arr[i] + ",");
            }
        }
        return result;
    }
    //求数组的平均值
    public static double getAverage(int[] arr){
        if(arr == null){
            return 0.0;
        }
        double ave = 0.0;
        double sum = 0.0;
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        ave = sum/arr.length;
        return ave;
    }
}
//测试类
public class TestDemo {
    public static void main(String[] args) {
        int[] arr = {1,5,44,29,36,7,12,23,18,489};
        System.out.println(arr);
        System.out.println("原始数组为" + ArraysUtils.tostring(arr));
        System.out.println("均值为" + ArraysUtils.getAverage(arr));
        int[] arr1 = null;
        System.out.println("空数组为" + ArraysUtils.tostring(arr1));
        System.out.println("均值为" + ArraysUtils.getAverage(arr1));
    }
} 

代码块

类中的代码块在main方法之前执行,可以做一些初始化操作,

构造代码块在创建对象时候触发,比构造器先执行。
静态代码块用于初始化类;构造代码块用于初始化对象、实例资源。

单例设计模式
设计模式是一套被前人反复使用、多数人知晓、经过分类编目的代码设计经验的总结,后来者可以拿来解决问题。
设计模式是软件中的常见解决方案,好的设计模式可以进一步的提高代码的重用性。
单例模式:可以保证系统中,应用该模式的这个类只有一个实例,即一个类永远只能创建一个对象。例如任务管理器对象我们只需要一个就可以解决问题了,这样可以节省内存空间。
饿汉单例设计模式
在用类获取对象的时候,对象已经提前为你创建好了。
设计步骤:
1.定义一个类,把构造器私有化。
2.定义一个静态变量存储一个对象。

/*
* 学会饿汉单例模式
* */
public class SingleInstance {
    //构造器私有化
    private SingleInstance(){
    }
    //定义一个公开的静态变量来存储对象
    //饿汉式单例模式:在这里加载静态变量的时候就会创建一个对象。
    public static SingleInstance s1 = new SingleInstance();
} 
懒汉单例模式
在真正需要该对象的时候,才去创建一个对象(延迟加载对象)。

/*
* 学会使用懒汉单例模式
* */
public class SingleInstance2 {
    //构造器私有化
    private SingleInstance2(){
    }
    //创建一个公共的静态变量来存储实例对象
    private static SingleInstance2 s2;
    //提供一个公共的方法来获取实例对象
    public static SingleInstance2 getInstance(){
        //实例对象为空,则创建一个直接返回 否则返回已经创建的实例对象
        /*以下注释代码有问题,实现不了懒汉单例,因为第一次创建时,返回一个新对象,但是该对象并没有
        赋值给s2,这样下次执行getinstance方法时候,s2仍然为null,所以每次返回的都不一样。*/
        /*if(s2 == null){
            //第一次创建
            return new SingleInstance2();
        }
        return s2;*/
        
        if(s2 == null){
            s2 = new SingleInstance2();
        }
        return s2;
    }
} 
懒汉单例最好使用private私有化变量,饿汉单例必须public,因为懒汉单例外部是通过getinstance方法来获取对象的,而该方法是public公开的;饿汉单例需要外部来获取该变量,必须public公开。
继承













就近原则,先局部,然后子类,最后父类。


私有方法不能被重写









![[rk3399 android11]关闭声卡](https://i-blog.csdnimg.cn/direct/b40e6198e40e4d9e83c996b084461c68.png)

![[数据集][目标检测]智慧牧场猪只检测数据集VOC+YOLO格式16245张1类别](https://i-blog.csdnimg.cn/direct/30f3f1f068204b89b6f55bc98b6dc162.png)






![[C++]AVL树插入和删除操作的实现](https://i-blog.csdnimg.cn/direct/09f08ee1864148548f18801bfece36b3.png)


