一、异常
1. 什么是异常
1. java异常是java提供的一种识别以及相应错误的一种机制
2. throw和throws的区别
java中异常处理除了包括捕获和处理异常外,也包括声明和抛出异常,可以通过throws关键字在方法上声明该方法要抛出的异常,或者在方法内部通过throw来抛出异常。
区别:
1. throw关键字用在方法内部,只能抛出一种异常,用来抛出代码或方法块中的异常
2. throws关键字用于方法声明上,可以抛出多个异常,用来标识该方法可能抛出的异常列表
二、IO流
1. Java中IO流分为几种
1. 按流的流向分:输入流和输出流
2. 按操作单元分:字节流和字符流
3. 按流的角色分:节点流和处理流
输入流的基类
1. InputStream:字节输入流
2. InputReader:字符输入流
输出流的基类
1. OutputStream 字节输出流
2. OutputWriter 字符输出流
三、反射
1. 什么是反射机制
程序运行过程中,对于任意一个类或对象,都能够知道它的所有属性和方法
分为静态编译和动态编译
静态编译:在编译时确定类型,绑定对象
动态编译:在运行是确定类型,绑定对象
2. 反射机制的优缺点:
1. 提高代码的灵活性
2. 低性能
四、常用API
1. 自动装箱和拆箱
1. 装箱:将基本类型用它们的引用类型包装起来;原理:integer.valueOf()方法
2. 拆箱: 将包装类型装换成基本类型;原理:integer.intValue()方法
2. int和integer的区别
int是基本数据类型,integer是int的包装类
原始类型:boolean,char,byte,short,int,long,float,double
包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double
3. Integer a = 127 和Integer b = 127相等吗
相等
对于对象引用类型,==比较的是对象的内存地址,对于基本数据类型,==比较的数据的值,如果整数在-128~127之间,自动装箱不会new新的对象,而是引用常量池中的Integer的对象,如果超过这个范围a == b为false
4. 字符型常量和字符串常量的区别
1. 形式上:字符型常量是用单引号引起的一个字符,而字符串常量是双引号引起的若干个字符
2. 含义上:字符型常量相当于一个整型值(ASCII值),可以参加表达式运算,而字符串常量代表一个地址值(该字符串在内存中的位置)
3. 占用内存大小:字符型常量只占两个字节,字符串常量占若干个字节
5. String 和 StringBuffer,StringBuilder的区别是什么?
StringBuffer和StringBuilder继承自AbstractStringBuilder类
1. 可变性:String是不可变的,StringBuffer和StringBuilder是可变的
2. 线程安全:String对象是不可变得,所以可以理解为线程是安全的,
StringBuffer对方法加了同步锁,所以线程是安全的,
StringBuilder没有对方法加同步锁,所以线程是不安全的
4. 性能:每次对String类型对象进行改变时,都会生成新的String对象,然后将指针指向新的对象,
StringBuffer每次都会对本身进行操作,而不是生成新的对象并改变对象引用,
相同情况下,用StringBuilder能提升10~15%的性能,但要冒线程不安全的风险
5. 使用场景
1. 在字符串不经常发生改变的业务场景中,优先使用String类,如常量声明,字符串拼接等
2. 在单线程情况下,优先使用StringBuffer,如SQL语句拼装,JSON封装
3. 在多线程情况下,优先使用StringBuilder,如XML解析,HTTP解析和封装