Java lang包介绍


Java.lang提供java语言程序设计的基础类(基础数据类型的封装类、Class、math、线程类)。lang包中的类的应用不需要手动import。
一、Object类是java体系中所有类的父类

Object实现的方法:clone(只有实现Cloneable接口才可调用);getClass,toString,hashCode,equals,finalize(释放资源),wait,notifyAll,notify。

二、基础数据类型的封装类
java8种基本数据类型:
1)整型byte:8 位,-128~127 ;short:16 位,-32768 ~ 32767; int:32 位,-2^31-1~2^31(21 亿); long:64 位。
2)浮点型(float、double):float:32 位,后缀 F 或 f,1 位符号位,8 位指数,23 位有效尾数;double:64 位,最常用,后缀 D 或 d,1 位符号位,11 位指数,52 位有效尾 .
3)字符型(char):char:16 位,是整数类型,0~2^16-1(65535)。不能为 0个字符。 
4)一种布尔类型(boolean):true 真  和 false 假。
  char-->    自动转换:byte-->short-->int-->long-->float-->double   强转不会四舍五入
基础数据类型的封装类:为了将基本数据类型值转自动地转换成对应的对象,java1.5引入自动装箱和拆箱机制(例如集合不支持基本数据类型,但是可以直接put基本数据类型;方法调用时)。
自动装箱:编译器调用valueOf();
拆箱:手动调用intValue(),doubleValue()。
自动装箱的弊端:
1)、生成大量不必要的对象
Integer sum = 0;
 for(int i=1000; i<5000; i++){
   sum+=i;
}
2)、对象相等比较,JVM会缓存-128到127的Integer对象,所以下面obj1==obj2
Integer obj1 = 1;
Integer obj2 = 1;
所有封装类不能被继承。
math包Bigdecimal:用于金额计算(float/double都会失去一定的精确度)。
BigDecimal b1 = new BigDecimal("1.34");//1.34  
double d=1.01;
BigDecimal b2 = BigDecimal.valueOf(d);//1.34  
BigDecimal的运算都没有对原值进行操作,而是返回一个新的BigDecimal对象。
BigDecimal的比较用的是BigDecimal的compareTo方法。
三、Math
常用方法:floor、ceil、round(返回整形值) Math.round(5.2644555 * 100) * 0.01d;可支持指定精确位数四舍五入。
随机数:Math.random()[0,1.0)的double类型的数。util包下
util包Random:
Random rand =new Random(25);
rand.nextInt(100);不包含最大值。
[0,1.0)区间的小数:double d1 = r.nextDouble();
[0,5.0)区间的小数:double d2 = r.nextDouble() * 5;
四、String
String对象保存在常量池和堆中,当以引号出现的时候和基本类型数据一样保存在常量池中,new String对象保存在堆中。
如:String str1 = "ab" + "cd"; <=>String str1 = "abcd"; 在常量池中创建一个对象。
final String s1 = "b"; String s2 = "a" + s1; 注意被final修饰的变量也是保存在常量池中 s2=="ab"。
String的 substring(int beginIndex, int endIndex)取值范围[beginIndex,endIndex)从0开始
String、StringBuffer、StringBuilder的区别
(1)String是不可变字符串对象。
(2)String线程安全。StringBuffer 与 StringBuilder 中的方法和功能完全是等价的,StringBuffer 中的方法采用了synchronized 关键字进行修饰是线程安全的,而 StringBuilder 没有这个修饰是非线程安全的。
(3)String、StringBuilder、StringBuffer三者的执行效率:StringBuilder > StringBuffer > String 当然这个是相对的,不一定在所有情况下都是这样。比如String str = "hello"+ "world"的效率就比 StringBuilder st  = new StringBuilder().append("hello").append("world")要高。因此,这三个类是各有利弊,应当根据不同的情况来进行选择使用:当字符串相加操作或者改动较少的情况下,建议使用 String str="hello"这种形式;当字符串相加操作较多的情况下,建议使用StringBuilder,如果采用了多线程,则使用StringBuffer。
五、System
System类的构造器由private修饰,不允许被实例化。类中的方法也都是static修饰的静态方法。
1)三个对象:InputStream in;//标准输入流PrintStream out;//标准输出流PrintStream err;//标准错误流。如System.out.println();
2)常用方法:arraycopy(被复制数组,起始位置,复制到的数组,起始位置,复制长度);数组复制;
currentTimeMillis()和Date类中getTime方法完全是一样的;
gc()垃圾,回收不许要手动调用;

exit()退出虚拟机,该方法永远不会正常返回。 这是唯一一个能够退出程序并不执行finally的情况。

六、Exception

1、java异常机制提供了try,catch,finally。
如:try
{//需要被检测的异常代码}
catch(Exception e)
{//异常处理,即处理异常代码}
finally
{//一定会被执行的代码}
1)try、catch可以嵌套使用;
2)try、catch必须同时存在;
3)一个try可以有多个catch;
4)finally的代码一定会执行,并且在try快return前;
5)还没想好。
同时还提供了throw、throws关键字,在try、catch的任何位置都可以使用throw关键字抛出异常,throws在方法声明结尾处代码将抛出的异常。
2、java异常类
所有异常都继承自Exception,我们还可以创建自定义异常,但必须继承Exception,并添加构造方法,使用supper调用父类构造方法。
3、常见的异常
Error:
ClassFormatError Java虚拟机试图从一个文件中读取Java类,而检测到该文件的内容不符合类的有效格式时抛出;
OutOfMemoryError 当可用内存不足以让Java虚拟机分配给一个对象时抛出该错误。
CheckException:
IOException
SQLException
ClassNotFoundException
FileNotFoundException
InterruptedException
TimeoutException
CloneNotSupportedException
FileAlreadyExistsException
UnknownHostException
RuntimeException:
NullPointerException - 空指针引用异常
IndexOutOfBoundsException - 下标越界异常
ArithmeticException - 算术运算异常
ClassCastException - 类型强制转换异常。
IllegalArgumentException - 传递非法参数异常。
ArrayStoreException - 向数组中存放与声明类型不兼容对象异常
NegativeArraySizeException - 创建一个大小为负数的数组错误异常
NumberFormatException - 数字格式异常
SecurityException - 安全异常
UnsupportedOperationException - 不支持的操作异常

七、Thread









猜你喜欢

转载自blog.csdn.net/yshysh8/article/details/80015789