包装类
(1)基本类型与包装类之间的转换
基本类型转换为包装类:
例如:int i=0;
Integer in=new Integer(i);
包装类转换为基本类型:
使用:基本类型value()方法
例如: int j=in.intValue();
(2)基本类型与包装类的区别
1.基本类型不是对象。
2.声明方式不同,基本类型的声明不需要new关键字,包装类型的声明需要new关键字。
3.存储方式及位置不同,基本类型是直接存储变量的值并保存于栈中,能实现高效的存取,包装类型需要通过对象名指向地址值,具体的值存放于堆中。
4.初始值不同,包装类型的初始值为null,基本类型的初始值视具体的数据类型而定。
5.使用方式不同,集合类只能使用包装类型。
(3)Integer类
常用的一些方法:
static Integer valueOf(int i) 返回一个表示指定的 int 值的 Integer 实例。
static Integer valueOf(String s) 返回保存指定的 String 的值的 Integer 对象。
static int parseInt(String s) 将字符串参数作为有符号的十进制整数进行解析。
(4)自动拆箱和自动装箱
装箱:把一个基本数据类型的数据赋值给一个其对应的包装类的过程
拆箱:把一个包装类对象赋值给一个其对应的基本数据类型的变量的过程
JDK 1.5以后自动装箱
自动装箱拆箱只支持 基本数据类型和其对应的包装类
(5)享元模式
正数中的几个包装类内部把常用 [-128,127] 的数据缓存起来了
字符串相关类
(1)String
String类表示字符串
创建字符串的两种方式:
方式一:String str="str";
方式二:String str=new String("str");
两种方式的区别:
方式一只开辟一块堆内存空间,并且会自动进入字符串常量池,不会产生垃圾。
方式二会开辟两块堆内存空间,其中一块会变成垃圾被系统回收,而且不能够自动入池,需要通过public String intern();方法进行手工入池。
注意:在开发的过程中不会采用构造方法进行字符串的实例化。
字符串拼接的两种方式:
一:使用常量拼接,会检查常量区,如果有不会创建
二:使用变量拼接,不会检查常量区,直接创建对象
字符串常量池:
(1) 当使用String str = “A” ;的方式赋值,会将该字符串值【对象】放入到常量池
(2) 当再次使用String st1 = “A”的方式会先检查常量池是否有“A”值,
① 如果存在直接引用
② 如果不存在,会放入常量池
(3) 常量池与享元模式相似,但是也有区别,享元模式是已经缓存,但是常量池是在使用的时候缓存
String类的常用方法:
char charAt(int index) 返回指定索引处的 char 值。 索引位置是从0开始
boolean endsWith(String suffix) 测试此字符串是否以指定的后缀结束。
int indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引。
boolean matches(String regex) 告知此字符串是否匹配给定的正则表达式。
String replace(char oldChar, char newChar) 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串。
String substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串。[beginIndex,endIndex)
String toLowerCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为小写。
(2)StringBuffer/StringBuilder
String、StringBuffer和StringBuilder没有继承关系
但是都表示字符串
String 与 StringBuilder StringBuffer都是对字符串进行操作
String 底层是一个final修饰的char数组 因此内容不可变
在做字符串拼接的时候
String拼接会创建多个对象 导致内存开销大 运行时间长
StringBuilder StringBuffer都是可变的字符序列
在做字符串拼接的时候 只会创建一个对象 因此大大的较少了内存开销 运行时间短
StringBuilder 效率更高 因为线程不安全
StringBuffer 效率相对较低 但是线程安全
数学相关类
(1)Math
含有执行基本数学运算的方法
(2)BigInteger
(3)BigDecimal
System/Rumtime/java的垃圾回收机制
System类
System类的常用方法:
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。
static long currentTimeMillis() 返回以毫秒为单位的当前时间。 1000ms=1s
static void exit(int status) 终止当前正在运行的 Java 虚拟机。 非 0 的状态码表示异常终止。
static void gc() 运行垃圾回收器
getenv() 返回一个不能修改的当前系统环境的字符串映射视图。
static Runtime getRuntime() 返回与当前 Java 应用程序相关的运行时对象。
Process exec(String command) 在单独的进程中执行指定的字符串命令。
面试题 请说明finalize final finally 的区别?
完全不同的三个东西
finalize--Object里面的垃圾回收的方法
final---修饰符
finally---异常结构里面的代码块
随机数
获取随机数的方式
方式一:通过Math类的random方法获取
方式二:Random类
方式三:JDK1.7以后的方法--->ThreadLocalRandom
方式四:UUID
日期/时间相关类
(1)Date
根据系统获得时间值
(2)DateFormat
作用一: 把一个Date对象可以转成我们希望的一个结果样式(字符串)
作用二: 也可以把一个字符串解析为一个Date对象
(3)Calendar(日历类)
异常处理机制
(1)遇到的异常有哪些
NullPointerException: 空对象调用方法的时候出现
ArrayIndexOutOfBoundsException:数组越界
ArithmeticException:算术异常
ClassCastException:类型转换异常
ClassNotFoundException:反射
(2)异常的处理方式
* 1.捕获异常
* try{
* 可能会发生异常的代码
* }catch(异常的类型 变量名){变量名:对象,有相应的方法获取错误信息
* 1.打印异常
* 2.获取错误信息
* 3.记录日志--IO 日志的框架
* }
* 如果 try里面的代码报错,就执行 catch里面的代码
* 如果 try里面的代码不报错,catch里面的代码不执行