Java学习Day04
包装类的使用
基本数据类型、包装类和String类的转化
自动装箱
int num1 = 10;
Interger num2 = num1;
自动拆箱
int num3 = num2;
String转基本数据类型
String num = "123.456",
int num123456 = int.parsrInt(num);
int对应包装类Integer
有IntegerCache类(提升性能),创建了static final Integer cache []数组,范围**-128~127** 使用自动装箱时,会直接使用数组中的元素
因此,Integer m = 1;与Integer n = 1; m = n 为True
关键字 static
1.修饰属性、方法、代码块、内部类
2.静态变量随着类的加载而加载,早于实例变量
3.可以通过类.静态变量的方法进行调用
4.静态变量在内存中仅存在一份
5.静态方法中,仅能调用静态方法或属性
6.在静态的方法内,不能使用this关键字、super关键字(没有实例对象),从生命周期理解
单例模式
1.饿汉式
class Bank{
//1.私有化构造器
private Bank(){}
//2.内部创建类的对象
private static Bank instance = new Bank();
//3.提供公共的方法,返回类的对象
public static Bank getInstance(){
return instance;
//4.对象也应为静态的
}
}
2.饱汉式
class Bank{
//1.私有化构造器
private Bank(){}
//2.声明当前对象,没有初始化
private static Bank instance = null;
//3.提供公共的方法,返回类的对象
public static Bank getInstance(){
if(instance == null) {
instance = new Bank();
}
return instance;
}
}
区别:
1.饿汉式:
坏处:对象加载时间较长;
好处:线程安全;
2.懒汉式:
好处:延迟对象的创建
代码块
1.作用:用于初始化类、对象
2.仅能使用static进行修饰
3.static代码块,随着类的加载而执行,只执行一次
4.普通代码块,随对象创建而执行
5.一个类之间按声明顺序执行代码块
6.无修饰代码块在对象构造函数之前执行
赋值顺序
1.默认,(2.显示/3.代码块)按顺序执行,4.构造,5.对象属性方法
final关键字
1.可用于修饰:类、方法、变量
2.用于修饰一个类:此类不能被继承
3.用于修饰方法:表明该方法不能被重写
4.修饰变量,为常量
final修饰属性:可以赋值的位置:显示、代码块中初始化、构造器中初始化
final修饰形参:表明该形参是一个常量
static final
用于修饰属性:全局常量
抽象类、抽象方法
1.不能用来修饰属性、属性和构造器
2.不能用于修饰私有方法,静态方法,final的方法和类
3.抽象类的匿名子类
Person p = new Person() {
@Override
public void eat() {}
}
调用:method1(p);
接口interface
达到多重继承的效果
1.接口使用interface定义
2.Java中,接口和类是两个并列的结构
3.如何定义接口,接口的成员:
3.1. JDK7及以前:只能定义全局常量和抽象方法
>全局常量:public static final的,但可省略不写
>抽象方法:pubic abstract的
3.2. JDK8:除能定义全局常量和抽象方法,可以定义静态方法、默认方法
4.接口中不能定义构造器
5.Java开发中,通过让类去使用(implements)的方法使用接口
如果实例类覆盖了接口中的所有抽象方法,则此实现类就可以实例化
6.Java类可实现多个接口
7.接口和接口之间可以继承,可以多继承
8.接口可以作为形参,体现了多态
代理模式
工厂模式
简单工厂,工厂模式,抽象工厂
内部类
成员内部类,局部内部类