2021-09-09 了解一点奇怪的知识

31 篇文章 0 订阅
12 篇文章 0 订阅

最终类:

使用final关键字声明的类叫最终类。最终类不能被继承,没有子类。
使用final关键字声明的方法为最终方法,最终方法不能被子类重写。
最终类可以不包含最终方法,非最终类可以包含最终方法。

异常:

Java的异常分为两种:
①运行时异常(RuntimeException)②非运行异常 / 检查式异常(CheckedException)。
1、运行时异常不需要程序员去处理,当异常出现时,JVM会帮助处理。常见的运行时异常有:
①ClassCastException(类转换异常)
②ClassNotFoundException(无法找到类异常)
③IndexOutOfBoundsException(数组越界异常)
④NullPointerException(空指针异常)
⑤ArrayStoreException(数组存储异常,即数组存储类型不一致)
⑥IO操作的BufferOverflowException异常
⑦ArithmeticException(算数异常)
2、非运行异常需要程序员手动去捕获或者抛出异常进行显示的处理,因为Java认为Checked异常都是可以被修复的异常。常见的异常有:
①IOException
②SqlException

代码的执行过程:

① 源码编译:通过Java源码编译器将Java代码编译成JVM字节码(.class文件)
② 类加载:通过ClassLoader及其子类来完成JVM的类加载
③类执行:字节码被装入内存,进入JVM虚拟机,被解释器解释执行

JVM运行时数据区:

虚拟机栈、本地方法栈、方法区、堆、程序计数器。
绿色:线程共享区
在这里插入图片描述

① 堆
堆是Java对象的存储区域,任何用new字段分配的Java对象实例和数组,都被分配在堆上。
从JDK1.7版本之后,运行时常量池从方法区移到了堆上。
② 方法区
用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据,方法区在JDK1.7版本及以前被称为永久代,从JDK1.8永久代被移除。默认最小值为16MB,最大值为64MB。
③ 虚拟机栈
虚拟机栈为Java方法服务,虚拟机栈中执行每个方法的时候,都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息。
栈会自动分配内存空间,会自动释放,存放基本类型,简单的数据段,占据固定大小的空间。
引用类型数据在栈内存中保存的实际上是对象在堆内存中的引用地址。通过这个引用地址可以快速查找到保存中堆内存中的对象。
④ 本地方法栈
与虚拟机栈发挥的作用相似,本地方法栈为虚拟机使用的Native方法服务,执行每个本地方法的时候,都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息。
⑤ 程序计数器
用于保存当前线程执行的内存地址。由于JVM程序是多线程执行的(线程轮流切换),所以为了保证线程切换回来后,还能恢复到原先状态,就需要一个独立的计数器,记录之前中断的地方,可见程序计数器也是线程私有的。

垃圾回收器GC:

在堆中,没有引用指向的对象会被回收。
对于Object中的void finalize()方法:
Object类是所有类的父类,finalize()方法本身是属于Object中的一个成员方法,在创建类时会继承finalize()方法。每次创建对象,都会生成属于对象自己的finalize()方法,不是全员共用一个。
但当GC无法判断该对象是否还有更多应用时,会调用该对象的finalize()方法,实现垃圾回收。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值