1.JVM内存结构
三大区域:方法区:用来存储程序运行所需的类信息
如String.class,静态方法,常量池(存整数)
堆:所有引用类型的 对象信息(实例)
栈:存储方法的 参数以及方法内的局部变量(方法结束释放)
--栈帧:在栈中,JVM会给每一个方法单独分配空间
此空间用来存储 方法内的所有变量 (局部/全局)
此 方法结束后,栈帧消失,内存释放
垃圾回收机制:(GC)
不定时的检查堆里的对象,是否被变量所引用
如果发现这个对象没有被引用,就会处理这个对象
System.gc();
2.API(程序应用接口)
全称:Application Programming Interface就是封装了已经写好的类型
包含了常用的类型,String,Date,
Exception,IO等等
3.字符串
String--不可变的 定长字符串StringBuffer--效率低,线程安全
StringBuilder--效率高,线程不安全
String类重写了Object的
equals方法和toString()方法
StringBuffer和StringBuilder
没有重写equals方法
4.Object(所有引用类型的父类)
这个类时引用类型的最顶端包括Leo 自定义创建的类,也是class Person extends Object
系统默认没写而已。
boolean equals(Object obj):
return this==obj;
比较的是地址信息
String toString():返回了对象的一串字符:
所以在定义类时,
都会重写equals和toString
@Overwrite
equals用来比较两个对象的内容
1、先判断传进来的参数是不是this
2、判断参数是不是null
3、判断参数是不是同一类型
toString用来描述对象的内容
5.包装类
装箱->与
<-拆箱
byte --- Byte
short ---- Short
int --- Integer
long --- Long
float --- Float
double --- Double
char ---- Character
boolean --- Boolean
1.使用构造器进行装箱
int n = Integer.parseInt("123L");
// java.lang.NumberFormatException
/**出现数值格式异常*/
2.自动装箱
jdk1.5之后 支持
Integer a = 5;---装箱
int b = a;----拆箱
包装类的整数常量池:
在自动装箱时,如果值在-128到127范围内
Integer a = 5;
Integer b = 5;
sys.out.pln(a==b); //返回true
此时,先去常量池中查找是否有与5
值相等的对象,如果有,就不再创建
直接引用常量池中的,
如果没有,就会创建,然后存入常量池。
6.异常
Throwable(所有异常&错误的父类)1).无法修改的错误(系统性的)-- Error
2).可以处理的异常 -- Exception
按照编译器是否检查分类
检查性异常
非检查性异常 /**代码健壮性不强,逻辑写错了*/
按照jvm运行时分类运行时异常:也叫非检查性异常
编译期异常:检查性异常
异常的抛出与声明:
try{
可能会出现异常的代码块
将try抓到的异常信息封装成
异常对象
}catch(Exception e){
将地址信息给e
}finally{
通常进行一些流的关闭操作
(必然执行的代码块)
}
多个catch的写法:
从上到下、从小到大。
从上往下处理的异常可以是
同级别的异常类型,或者
是子父关系
子->子->子->子->父(从上到下排)
子类重写父类的方法时,
如果父类的方法有声明(throws)异常
子类的方法可以不声明;
也可以声明同一个类型或者是
异常的子类型