目录
static
静态,可以修饰成员变量、成员方法
成员变量
类变量:有static修饰,属于类,在计算机里只有一份,会被类的全部对象共享
实例变量(对象的变量):无static修饰,属于每个对象的
static String name; // 类变量
int age; // 实例变量
类变量可以通过 类名.类变量(推荐) 和 对象.类变量(不推荐) 访问
实例对象只能用对象访问,因为每个实例变量属于对应的对象。
应用场景
如果某个数据只需一份,且希望能够被共享,则该数据可以定义成类变量
类变量一般用public修饰
成员方法
类方法:有static修饰的成员方法,属于类,用类名.类方法或对象.类方法调用
实例方法:无static修饰的成员方法,属于对象,用对象.实例方法调用
main方法是个类方法
应用场景
工具类中的方法都是一些类方法,每个方法都是用来完成一个功能的,工具类给开发人员共同使用
用类方法来设计工具类提高了代码复用;调用方便,提高了开发效率。
util
为什么工具类不用实例方法呢,因为实例方法需要创建对象来调用,对象占内存,造成浪费;类方法可以直接用类名调用,方便且省内存。
建议将工具类的构造器private,工具类没必要创建对象
注意事项
类方法中可以直接访问类的成员,不可以直接访问实例成员
实例方法中既可以直接直接访问类成员,也可以直接访问实例成员
实例方法中可以出现this关键字,类方法中不可以
代码块[好像不是很重要哦]
静态代码块
static{}
类加载时自动执行,由于类只加载一次,所以静态代码块也只会执行一次
作用:完成对类的初始化,例如对类变量的初始化
实例代码块
{}
每次创建对象时,执行实例代码块,并在构造器前执行
作用:和构造器一样,都是用来完成对象的初始化,例如对实例变量进行初始化赋值
设计模式
具体问题的最优解法
考虑:某设计模式解决什么问题?怎么写?
单例设计模式
确保一个类只有一个对象
饿汉式单例:拿对象时,对象早创建好了
写法:把类的构造器私有
定义一个类变量记住类的一个对象
定义一个类方法,返回对象
不能用这个类创建对象,只能用类名调用类方法得到对象,且返回的永远是同一对象
package cn.ptz.singlelnstance;
public class A {
// 定义一个类变量基础类的一个对象
private static A a = new A();
// 私有类的构造器
private A(){
}
// 定义一个类方法,返回类的对象
public static A getObject(){
return a;
}
}
应用场景
比如任务管理器对象、获取运行时对象
避免浪费内存
懒汉式单例:拿对象时,才开始创建对象
写法:把类的构造器私有
定义一个类变量用于存储对象
提供一个类方法,保证返回的是同一个对象
package cn.ptz.singlelnstance;
// 懒汉式单例
public class B {
// 定义一个类变量,用于存储这个类的一个对象
private static B b;
// 类的构造器私有
private B(){
}
// 定义一个类方法,这个方法保证第一次调用时才创建一个对象,后面调用时都会用这个对象
public static B getInstance(){
if (b == null){
b = new B();
}
return b;
}
}
根据单例对象常不常用选择饿汉or懒汉
继承[面向对象的三大特征:封装、继承、多态]
关键字extends,可以让一个类和另一个类建立起父子关系
public class B extends A{
}
A类称为父类(基类或超类),B类称为子类(派生类)
特点:子类继承父类的非私有成员(成员变量、成员方法)
继承后对象的创建:子类的对象是由子类和父类共同完成的。
所以该对象可以访问子类和父类暴露的成员
我去,可以跨包继承,先导入包,再继承,很厉害哦
好处
减少重复代码的编写
注意事项
1、权限修饰符
public private protected 缺省
protected给子类,但不给其他类中,创建的子类对象访问
2、单继承、object类
Java是单继承的,其中的类不支持多继承,但是支持多层继承
object类是Java所有类的祖宗类,任何一个类都是object的子类或子孙类
3、方法重写
子类可以重写一个方法名称、参数列表一样的方法,去覆盖父类的这个方法
重写后,方法的访问,Java会遵循就近原则
技巧:使用@Override 注解,可以校验重写是否正确,可读性好
子类重新父类方法时,访问权限必须大于等于父类被重写的方法的权限(public > protected > 缺省)
重写的方法返回值类型,必须与被重写的返回值类型一样,或者范围更小
私有方法、静态方法不能被重写,重写会报错
s
应用:对toString()的重写,重写为输出对象内容,而不是输出对象地址
4、子类中访问其他成员的特点
成员变量 就近原则
成员方法 就近原则
综上,子类中访问其他成员,先子类局部范围找,然后子类成员范围找,然后父类成员范围找,再没找到则报错
出现重名成员,而一定要使用父类,可以通过super关键字,指定访问父类成员
super.父类成员变量/父类成员方法
5、子类构造器的特点
子类的全部构造器,都会先调用父类的构造器,再执行自己
比如调用子类有/无参构造器时,会先调用父类的无参构造器,再调用自己
默认情况下,子类全部构造器的第一行代码都是super(),调用父类的无参构造器
如果使父类没有无参构造器,则需在子类构造器用super(......),指定去调用父类的有参构造器
应用:
补充:this(......)调用兄弟构造器
复用兄弟构造器的代码
注意:在一个构造器里不能同时用super(...)和this(...)调用其他构造器,他们都必须放在构造器的第一行