Java学习第七天
成员方法分类:
静态成员方法(有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公开。
继承
就近原则,先局部,然后子类,最后父类。
私有方法不能被重写