static关键字的作用
static是静态的意思,可以修饰成员变量,表示该成员变量在内存中只存储一份,可以被共享访问.修改
使用场景:
工具类:对于一些应用程序中多次需要用到的功能,可以将这些功能封装成静态方法,放在一个类中,这个类就是工具类
工具类的作用:一是方便调用,二是提高了代码复用.
工具类的延伸:建议将工具类的构造器私有(private),不让工具类对外产生对象,若产生对象则会浪费内存,所以工具类中的方法我们不用实例方法做,因为实例方法需要创建对象进行调用,此时用对象只为了调用方法,只会浪费内存
代码块概述:
代码块是类的五大部分之一(成员变量,方法,构造器,代码块,内部类),定义在类中方法外
设计模式是一套前人反复使用且多人知.经过分类编目的代码设计经验的总结,后来者可以直接用来解决问题,好的设计模式可以进一步提高代码的复用性
单例模式为设计模式中的一种:可以保证系统中,应用该模式的这个类永远只有一个实例,即一个类只能创建一个对象(对象即是实例,实例即是对象)
单例的场景:例如任务管理器对象我们只需要一个就可以解决问题了
单例的作用:节省内存空间
单例实现方式有很多,如:
●饿汉单例设计模式:在用类获取对象的时候,对象已经提前为你创建好了(提前创建对象则节约了时间,但不知道到底最终需不需要这个对象,则有浪费了内存的隐患)
设计步骤:1.定义一个类,把构造器私有. 2.定义一个静态变量存储一个对象
//定义一个单例类
public class SingleInstance1 {
/**
* 2.定义一个公开的静态成员变量存储一个类的对象,属于类,与类一起加载一次
* 饿汉:在这里加载静态变量的时候就会创建对象
* public static int onLineNumber = 161;
*/
//这里用public是为了让别人去访问
public static SingleInstance1 instance = new SingleInstance1();
/**
* 1.单例必须把构造器私有起来
*/
private SingleInstance1() {
}
}
●懒汉单例设计模式:在真正需要该对象的时候,才去创建一个对象(延迟加载对象,则牺牲了时间去节约了内存)
设计步骤:1.定义一个类,把构造器私有. 2.定义一个静态变量存储一个对象
3.提供一个返回单例对象的方法
public class SingleInstance2 {
/**
2.创建一个静态成员变量存储本类的对象,注意,:此时不创建对象
*/
//最好私有!
private static SingleInstance2 instance ; //null
/**
1.私有构造器
*/
private SingleInstance2(){
}
/**
3.定义一个方法,让其他地方可以来调用获取一个对象
*/
public static SingleInstance2 getInstance(){
if(instance == null){
//第一次来获取对象
instance = new SingleInstance2();
}
return instance;
}
面向对象之二是继承,继承是类与类之间的一种关系.多个类继承单独的某个类,多个类就可以使用单独这个类中的属性和行为了.多个类称为子类(派生类),单独的这个类称为父类(基类或超类)
继承的格式:在Java中,继承的关键字用的是"extends"
Object特点:Java中所有的类,要么直接.要么默认.要么间接继承Object,Object是祖宗类
在子类方法中访问成员(成员变量,成员方法)满足:就近原则
优先顺序:子类局部范围>子类成员范围>父类成员范围,若都没有找到则报错
若子父类中,出现了重名的成员,想在子类中使用父类的成员,可以在子类中定义个中转方法通过super关键字来指定访问父类的成员
方法重写:在继承体系中,子类出现了和父类一模一样的方法声明,我们就称子类这个方法为重写的方法
方法重写的应用场景:1.当子类需要父类的功能,但父类的该功能不完全满足自己的需求时
2.子类可以重写父类中的方法
方法重写的注意事项和要求:
1.重写方法的名称.形参列表必须与被重写方法的名称和参数列表保持一致
2.私有方法不能被重写
3.子类重写父类方法时,访问权限必须大于或等于父类.(缺省<protected<public)
4.子类不能重写父类的静态方法,若重写加上@Override会校验出错误,因为子类不能继承父类的静态方法
子类继承父类后构造器的特点:
子类中所有的构造器默认都会先访问父类中的无参构造器,再执行自己的构造器。原因:1子类在初始化的时候,有可能会使用到父类中的数据,如果父类没有完成初始化,父类将无法使用父类的数据.2.子类在初始化之前,一定要调用父类构造器先完成父类数据空间的初始化
●子类调用父类构造器的原理:子类构造器的第一行语句默认都是:super(),不写也存在
super调用父类的有参构造器来初始化继承自父类的数据
this:代表本类对象的引用; super:代表父类存储空间的标识
this(...)和super(...)使用注意点:
子类通过this(...)去调用本类的其他构造器,本类其他构造器会通过super去手动调用父类的构造器,最终还是会调用父类构造器的
注意:this(...) super(...)都只能放在构造器的第一行,所以二者不能共存在同一个构造器中