java基础知识总结(面向对象篇3包括单例设计模式等)

Object类的使用

(1)Object类是所有java类的根父类。
(2)如果在一个类的声明中未使用extends关键字指向父类,则默认父类为java.lang.Object类。
(3)Object类中的功能(属性、方法)具有通用性。
属性:无
方法:equals() / toString() / getClass() / hashCode / clone / finalize() / wait() / notify() / notifyAll()
(4)Object类只声明了一个无参构造器。

"=="与"equals()"的区别

==运算符

(1)可以使用在基本数据类型和引用数据类型类型变量中。
(2)如果比较的是基本数据类型变量,比较的是变量中保存的数据是否相等。(不一定类型相同)

equals()方法的使用

(1)是一个方法,不是运算符。
(2)只适用于引用数据类型。
(3)Object类中的"equals()“方法与”=="是一样的用法,比较的是两个地址。

Object类中的源码如下:

public boolean equals(Object obj) {
    return (this == obj);
}

(4)像String、Data、File、包装类等都重写了Object类中的equals()方法。重写以后,不是比较的两个引用类型的地址是否相等,而是比较的两个对象的"实体内容"是否相等。
(5)通常情况下,我们自定义的类使用equals()的话,通常也是比较的两个对象的实体内容是否相同。那么我们就要对他进行重写。

**toString()**方法
(1)当我们输出一个对象的引用时,实际上就是调用当前对象的toString()方法。
(2)Object类中的toString()的源码:

    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
}、

(3)像String、Data、File、包装类等都重写了Object类中的toString()方法,使得在调用对象的toString()时,返回了"实体内容"信息。
(4)自定义的类也可以重写toString()方法,当调用此方法时,返回对象的"实体内容"。
(5)当引用数据类型对象为null时,直接输出对象的引用为null,用toString出现空指针异常。这是因为 println底层的源码对直接输出引用类型的有一个保护机制。

java中的Junit单元测试

(1)创建java类,进行单元测试。
此时java类的要求为:
①权限修饰符为public。
②有一个空参构造函数。
(2)此类中声明单元测试方法。
此时的单元测试方法:
①权限修饰符为public。
②返回值类型为void。
③形参为空。
(3)在单元测试方法上要有一个@Test注解。

包装类的使用

(1)针对八种基本数据类型定义了相应的引用类型-包装类(封装类),使得基本数据类型有了类的特征。
(2)有了类的特点,就可以调用类中的方法,java才算是怔怔地面向对象。
(3)八种数据类型与封装类的对应:
byte–>Byte
short–>Short
int–>Integer
long–>Long
float–>Float
double–>Double
char–>character
boolean–>Boolean
(4)基本数据类型、包装类、String三者之间的相互转换。(5.0之前版本的方法我们就不谈了)
①基本数据类型–>包装类
自动装箱:
直接将基本数据类型的值赋给封装类。
②自动拆箱:
直接将一个包装类的对象赋给一个基本数据类型的引用。
③基本数据类型、包装类–>String
方法一:直接使用连接运算符:

String i1 = i1 + "";

方法二:使用String类型中的valueOf方法。

String str2 = String.valueOf(f1);

④String–>基本数据类型、包装类的转换
使用想转换成的包装类中的parseXxx(String s)方法。

Static关键字

(1)static:静态的
(2)static可以用来修饰:属性、方法、代码块、抽象类。
(3)修饰属性:
1)按是否使用static,分为静态属性和非静态属性(实例变量)。
①实例变量:我们创建了多个类的对象,每一个类的对象都有自己的一套非静态属性,当修改之中一个类的非静态属性时,其余对象中的非动态属性不发生改变。
②静态变量:一个类的所有对象都公用一个静态变量,当一个对象改变这个静态变量中的值改变时,其余的对象去调这个变量时,调用的是修改后的值。
2)static修饰属性的其他说明:
①静态变量随着类的加载而加载,可以通过” 类.静态变量“的方法调用。
②静态变量的加载在对象的创建前面。
③由于类只会加载一次,所以静态变量在内存中也只存在一份,它保存在方法区的静态域中。
④静态变量举例:System.out;Math.PI
⑤ 类变量 实例变量
类 yes no
对象 yes yes
(4)静态方法
①随着类的加载而加载,可以使用"类.静态方法"调用。
②也可以通过"对象.方法"调用。
静态方法 非静态方法
类 yes no
对象 yes yes
③静态的方法只能调用静态的方法或属性,因为他们的生命周期相同。
④非静态方法既可以调用静态的方法或属性,又可以调用非静态的方法或属性。
(5)static注意点:
①在静态方法中,不能使用this和super关键字。
②关于静态方法和属性的使用,我们从生命周期的角度去理解。
(6)
1)在开发中,如何确定一个属性是否要使用static关键字。
①属性可以被多个对象使用,而且不会随着对象的改变而改变,这是我们就要给这个属性声明一个静态的。
②类中的常量也常常声明为static的。
2)在开发中,如何去判定一个方法是否使用static关键字。
①方法体中的属性有静态属性,那么我们就要定义静态方法。
②工具类中的方法,我们就要声明为static的,因为没有必要为了一个工具类再去new一个对象。

单例设计模式

(1)什么是设计模式:设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格,以及解决问题的思考方法。也就是我们通常所说的套路。
(2)单例模式:某个类只能存在一个实例对象,并且提供一个取得其对象实例的方法。
(3)实现:单例模式分为两种,一种饿汉式,一种懒汉式。
①饿汉式:

class Bank{
//1.一个private权限的构造器
	private Bank(){
		
	}
	
	//由于返回给外界的方法为static修饰的,所以它必须为static修饰的才能在方法中调用。
	private static Bank bank = new Bank();
	
	//一个公共的方法供外界创造这个对象的方法。static修饰的,可以直接通过类名调用
	public static Bank getInstance(){
		return bank;
	}
	
}

饿汉式在创建对象时就已经把对象实例化了。
这里保证了线程的安全。但是在类的加载时就创建了对象,浪费了空间。
②懒汉式:

public class Bank{
//私有化构造器
private Bank{
}
//创建对象,注意初始化为null。
private static Bank bank = null;
//供外界使用的方法
public static Bank getInstance(){
		//注意这里要判断,要不就是每调用一次就创建一个对象了
			if(bank == null){
			bank = new Bank();
			}
}
}

懒汉式,调用方法时才在内存中创建对象,节省了空间,但是线程不安全,我们整理到多线程时就可以保证他的线程安全了。

Main方法

(1)程序的入口。
(2)main()方法是一个普通的静态变量。
(3)main()方法也可以作为我们与控制台的交互方式。(之前用Scanner)

代码块

(1)格式是{}或static{}。
(2)代码块的作用:用来初始化类、对象。
(3)代码块如果有修饰的话,只能用static。
(4)分类:静态代码块和非静态代码块
1)非静态代码块
①内部可以有输出语句。
②随着对象的创建而执行。
③每创建一个对象,就执行一次非静态代码块。
④如果一个类中定义了多个非静态代码块,则按照声明的顺序执行。
⑤既可以调用静态结构,又可以调用非静态结构。
⑥作用可以在创建对象时,对对象的属性进行初始化。
2)静态代码块:
①内部可以有输出语句,
②随着类的加载而加载,而且只加载一次。
③如果一个类中定义了多个静态代码块,则按照声明的前后顺序执行。
④静态代码块的执行要优于动态代码块的执行。
⑤只能调用静态的属性和方法,不能调用非静态的属性和方法。
⑥作用:初始化类的信息。

final关键字

(1)final:最终的。
(2)final可以用来修饰类、属性和方法。
①final修饰一个类:这个类不能被继承。
比如:String类、System类、StringBuff类。
②final修饰一个方法:这个方法不能被继承。
比如:Object类中的getClass()
③final用来修饰变量:此时的"变量就变成了一个常量"。
–final修饰类中的属性:
可以考虑的赋值的位置有:显式初始化、代码块初始化、构造器初始化。
–final修饰局部变量:
表示一个常量。
尤其是使用final修饰形参时,表明此形参是一个常量。当我们调用此方法时,给常量形参赋一个实参。一旦使用以后,就不能在方法体内修改这个形参了,只能调用。
(3)static final用来修饰属性:这个属性称为全局变量。
static final用来修饰方法:这个方法可以直接用"类.方法"直接调用,不可以被重写。

©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页