一.equals()的使用
- 是一个方法,而非运算符
- 只能适用于引用数据类型
- Object类中equals()的定义: public Boolean equals(Object obj){
return(this==obj);}
4.说明:Object类中定义的equals()和==的作用是相同的:比较俩个对象的地址值是否相同,即俩个引用是否指向同一个对象实体
5.像String、Date、File、包装类等都重写了Object类中的equals(),重写后,比较的不是俩个引用的地址是否相同,而是比较俩个对象的“实体内容”是否相同。
6.通常情况下,我们自定义的类如果使用equals()的话,也通常是比较俩个对象的“实体内容”是否相同,那么,我们就需要对Object类中的equals()进行重写,
7.重写的原则:比较俩个对象的“实体内容”是否相同。
二.==:运算符
- 可以使用在基本数据类型变量和引用数据类型变量中
- 如果比较的是基本数据类型变量:比较俩个变量保存的数据是否相等。(不一定类型要相同)
- 比较的是引用数据类型变量:比较两个对象的地址值是否相同,即俩个引用是否指向同一个对象实体
- 补充 :==符号使用时,必须保证符号左右俩边的变量类型一致
三.toString()的使用
当我们输出一个对象的引用时(输出地址),实际上就是调用当前对象的toString()
Date now=new Date(); System.out.println(“now=”+now); 相当于 System.out.println(“now=”+now.toString());
四.static 静态 关键字
- 可以用来修饰的结构:主要用来修饰类的内部结构(属性、方法、代码块、内部类)
- 属性,是否使用static修饰,分为 静态属性、非静态属性(实例变量)
- 实例变量:我们创建了类的多个对象,每个对象都独立的拥有一套类中的非静态属性,当修改其中一个对象中的非静态属性时,不会导致其他对象中同样的属性的值的修改。
- 静态变量:我们创建了类的多个对象,多个对象共享同一个静态变量,当通过某一个对象修改静态变量时,会导致其他对象调用此静态变量时,是修改过的。
- static修饰属性的其他说明:
- 静态变量随着类的加载而加载,可以通过 类.静态变量 的方式进行调用
- 静态变量的加载要早于对象的创建
- 由于类只会加载一次,则静态变量在内存中也只会存在一份:存在方法区的静态域中
- 方法:静态方法,类方法
- 随着类的加载而加载,可以通过 类.静态方法 的方式进行调用
- 静态方法中,只能调用静态的方法或属性,非静态方法中,既可以用非静态的也可以用静态的
- 注意点:在静态的方法内,不能使用this、super关键字
五.单例模式之饿汉式
class 类名{
1.私有化类的构造器
private 类名(){}
2.内部创建类的对象,要求此对象也必须声明为静态的
private static 类名 instance=new 类名();
3.提供公共的静态的方法,返回类的对象
public static 类名 getInstance(){
return instance;
}
}
懒汉式
class 类名{
1.私有化类的构造器
private 类名(){}
2.声明当前类对象,没有初始化,要求此对象也必须声明为静态的
private static 类名 instance=null;
3.提供公共的静态的方法,返回类的对象
public static 类名 getInstance(){
if(instance==null)
instance=new 类名();
return instance;
}
}
六.代码块
- 作用:用来初始化类、对象的信息
- 分类:要是使用修饰符,只能用static 静态代码块 非静态代码块
- 静态代码块:
- 内部可以输出语句
- 随着类加载而执行,且只执行一次
- 作用:初始化类的信息
- 如果一个类定义多个静态代码块,按声明的先后顺序顺序后执行
- 静态代码块的执行要优于非静态的执行
- 静态代码块内只能用静态的方法,属性
- 非静态代码块
- 内部可以输出语句
- 随着对象的创建而执行
- 每创建一个对象,就执行一次非静态代码块
- 作用:可以在创建对象时,对对象的属性等进行初始化
- 如果一个类中定义了多个非静态代码块,按声明的先后顺序顺序后执行
- 非静态代码块,可以调用静态或非静态的方法,属性
- 静态代码块:
由父及子,静态先行
七.赋值的位置,执行的顺序
- 默认初始化
- 显式初始化/在代码块中赋值
- 构造器中初始化
- 有对象后,可以通过 对象.属性 或 对象.方法 的方式进行赋值
八.final 最终的 关键字
- 可用来修饰:类、方法、变量
- 修饰类:此类不能被其他类所继承(如String类、System类、StringBuffer类)
- 修饰方法:表明此方法不可被重写(如Object类中的getClass())
- 修饰变量:此时的“变量”就称为一个常量
- 修饰属性:可以考虑赋值的位置:显式初始化、代码块中初始化、构造器中中初始化
- 修饰局部变量:尤其是修饰形参时,表明此形参是一个常量,当我们调用此方法时,给常量形参赋一个实参,一旦赋值以后,就只能在方法体内使用此形参,且不能进行重新赋值
- static final 修饰属性:全局常量
九.abstract 抽象的 关键字
- 用来修饰的结构:类、方法
- 修饰类:抽象类
- 此类不能实例化
- 抽象类中一定有构造器,便于子类实例化时调用
- 开发中,都会提供抽象类的子类,让子类对象实例化,完成相关操作
- 修饰方法:抽象方法
- 抽象方法只有方法的声明,没有方法体
- 包含抽象方法的类,一定是抽象类(因为如果不是抽象类就可以创造对象,可以调用方法,但是抽象方法没有方法体,无法调用,所以要保证不能创造对象),反之,抽象类中可以没有抽象方法
- 若子类重写了父类中的所有的抽象方法后,此子类才可以实例化,不然该子类也是个抽象类
- 注意点:abstract不能用来修饰私有方法、静态方法、final的方法和类