Java知识点(三):JVM内存结构,包装类与异常

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)异常
子类的方法可以不声明;
也可以声明同一个类型或者是
异常的子类型

猜你喜欢

转载自blog.csdn.net/adidas74891496/article/details/80552448