一、内部类
1、内部类是定义在类中的类,语法:修饰符 class 类名{} ,内部类相当于是外部类的一个属性,内部类也是一个类,跟正常的类一样。
2、类的生命周期程序运行时开始到程序结束时销毁,但是呢,某些情况下,在整个应用程序中对该类的使用频率较低,那此时就需要将其定义为内部类,以缩短其生命周期; 使用内部类是为了缩短类的生命周期 , 当类或该类的对象并不是很常用的时候,就可以定义为内部类
1、内部类
public class Outer{
public int count;
class Inner{
public int count;
public void show(){}
}
public static void main(String []args){
//把内部类当成外部类属性来调用;
Outer.Inner inner = new Outer().new Inner();
inner.show();
//也可以先创建外部类对象
Outer outer = new Outer();
Outer.Inner inner= outer.new Inner();
//调用静态的内部类
Outer.Inner1 inner = new Outer.Inner();
}
//静态的内部类, 一般不这样写
static class Inner1{
public void show(){}
}
//内部类可以调用外部类的属性和方法,但是外部类只能通过对象的形式去调用内部类中的属性和方法
//Outer.this.属性 方法,就可以调用外部类的方法跟属性
}
2、局部内部类
public void method(){
class Inner{
public void show(){}
}
new Inner.show(); //局部内部类只能在方法中创建对象, 方法执行局部内部类才能执行
}
3、匿名内部类
匿名内部类没有具体的子类名字
语法: 父类类名 变量名 = new 父类类型(){}; 是一种多态的形式,向上转型 ,不能直接访问子类型的属性或方法
public interface IUserDao{
public void speak();
}
public static void main(String[] args){
Object obj = new IUserDao(){ //报错 无法直接访问子类的属性或者方法
@Override
public void speak(){
Syso("speak");
};
};
obj.speak();
IUserDao userDao = new IUserDao(){
@Override
public void speak(){ //可以运行 讲接口实现化了
Syso("speak");
};
};
userDao.speak();
}
二、自动拆装箱
1、基本数据类型-转换为-------->引用数据类型 :装箱
integer i = new integer(33); 装箱
integer i = 100; 自动装箱
2、引用数据类型-转换为-------->基本数据类型:拆箱
int i = i. intValue();装箱
i = 100; 自动拆箱
integer(String) integer.MAX_VALUE int的最大值 , integer.MIN_VALUE int的最小值
integer(int)
integer类加载的时候会初始化整数型常量池,也叫缓冲池:256个对象 127到 -128
integer a ==127;
integer b ==127;
a ==b 结果是true 127储存在缓冲池中 所以地址一样
integer c ==128;
integer d ==128;
c ==d 结果是flase 因为相当于 new Integer();这种格式对比的对象地址
byte | Byte |
---|---|
short | Short |
char | Character |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
三、异常
关键词:Throwable 包含所有异常 继承Object
概念总结:Throwable包含两大模块(错误和异常),所有的错误或异常只有归属到Throwable体系下才能被虚拟机识别
错误(Error):所有的错误类后缀都是Error,错误的出现往往意味着虚拟机本身出现了问题,例如:OutOfMemoryError(内存溢出错误),StackOverflowError(堆栈内存溢出)。
异常(Exception):所有的异常类后缀都是Exception,分编译时期异常和运行时异常。
异常处理的的两种方式:
第一种:在方法声明的位置上,使用throws关键字,抛给上一级
第二种:使用try…catch语句进行异常