java学习笔记-类型篇

来源:互联网 发布:mac chrome json 插件 编辑:程序博客网 时间:2024/06/13 06:40

java类型分类

  1. 原始类型:由布尔型和数值型组成,数值型包括char,byte,int,float,double。
  2. 引用类型:包括class、interface、array.
  3. null类型。

原始类型数据类型转换

  1. 数值类型由小变大时,不会发生转换的异常,但是在int转换为float或者double的时候,可能会发生精度上的损失,比如(int)123456789=(float)1.234567892*E8,原因可能是由于计算机无法完整表示整个实数系,会有一个最小的数值间隔,发生转换是由于间隔的不同,造成精度的变化。一般去精度损失小的数值作为转换后的值,如果2个float的值与int值的精度差相同,选择二进制最后一位为0的数作为转换后的值。
  2. 数值类型由大变小时,比如float转为int,如果float大于最大int可表示范围,则int值为最大值或者最小值(负数),如果小于int可表示的最小精度,则显示为0.(NAN转换为int需要实验验证...)。

引用类型数据转换:

  1. Widening Reference,不会产生任何异常。

  2. Narrowing Reference,一般指子类转换为父类,子接口转换为父接口,2个无关接口间的转换,接口转换为类,运行时会确认是否可以转换,如果不行会产生一个ClassCastException的异常。

Exception与ERROR:

  1. Exception指运行是产生的程序异常。
  2. ERROR指java虚拟机的内部错误。 如loading ,linking or initialization过程中发生的, catch (Exception e)无法捕获的错误。

JVM启动过程

  1. loading,将类导入到java虚拟机,只查看class文件格式是否符合规范。
  2. linking分为Verification,负责验证类是否有语法错误;Preparation,复制给变量赋默认值,即如果定义private int a = 10,在这个阶段赋值为0,同时生成比如method table等一些类所要用到的静态结构。
  3. resolution根据实现的不同,导入一些参照的引用(static resolution),有些实现可能在具体用到时才导入(lazy or late resolution)

类的初始化

  1. 处于同步的需要先对类加锁。
  2. 如果已经加锁,则等待。
  3. 如果在初始化过程中,可能是递归调用,如果已完成解锁,否则继续执行。
  4. 如果已完成,解锁,如果有错,抛出异常。
       Initialization主要负责变量的初始化与static initializers(注1)的执行,并将参数赋给构造函数。如果有父类,则先初始化父类(重复以上过程)。最后执行构造函数。

类销毁

  1. 所有类的父类是Object,有finalize函数,如果没有特别需要,无需重载,对于jvm无法销毁的对象可以在这里添加销毁代码(将变量赋值为null)。
  2. A class or interface may be unloaded if and only if its class loader is unreachable. The bootstrap class loader is always reachable; as a result, system classes may never be unloaded.

退出虚拟机

       当只有daemon线程时,就退出。daemon是通过setDaemon 方法设定,由程序员自己设定,无特别含义(个人觉得)


原创粉丝点击