throws和throw的区别?
throws: 1,声明一个方法所可能产生的异常,不做任何处理只是把异常上传,谁调用的话,就抛给谁。 2,用在方法名后面,直接写异常名,也可以声明多个异常,中间使用逗号隔开。 throw: 1,抛出一个具体的异常类型。 2,用在方法内,跟的是异常对象名,只能抛出一个异常。
Error 和 Exception 异同?
相同点: 1,他们都继承Throwable类,在java中只有throwable类才能声明或者抛出一个异常 2,Error和Exception都体现了JAVA这门语言对于异常处理的两种方式 不同点: 1,Exception是java程序运行中可预料的异常情况,咱那么可以获取到这种异常,并且对这种异常进行业务外的处理。 2,Error是java程序运行中不可预料的异常情况,这种异常发生以后,会直接导致JVM不可处理或者不可恢复的情况,所以,这种异常是不可能抓取到的,比如OutOfMemoryError、NoClassDefFoundError等。
写出5个常用的运行时异常?(英文)
1,ClassCastException(类转换异常) 2,IndexOutOfBoundsException(数组越界) 3,NullPointerException(空指针) 4,ArrayStoreException(数据存储异常,操作数组时类型不一致) 5,BufferOverflowException ( IO操作异常)
请描述String、StringBuffer、StringBuider的区别?
String:不可变,频繁修改字符串的话,造成内存浪费。当字符串频繁修改时,建议使用StringBuffer、StringBuider。 StringBuffer:线程安全,效率低,所有公开方法都是 synchronized[ˈsɪŋkrənaɪzd] 修饰的。
缓冲区:StringBuffer 每次获取 toString 都会直接使用缓存区的 toStringCache 值来构造一个字符串。不过每次的toString()方法也是同步的。 StringBuilder :线程不安全,效率低。缓冲区:每次都需要复制一次字符数组,再构造一个字符串。
Sting s=“Hello”;s=s+“world”;这两行代码之后,原始的String对象中的内容是否发生改变?
没有。因为String是不可变类,所有他的所有对象都是不可变对象。在这段代码中,s原先指向一个内容为“hello”的地址s对象,之后又对s进行了“+”操作,操作之后s原先所指向的那个对象并没有发生变化,不是在原先s的基础上追加“world”字符串,而是在堆中重新开辟了一块空间,用来存放“world”地址,此时的s指向“world”的地址,并不指向“hello”这个对象了,但是“hello”它的字符串内容并没发生改变。 所以,当我们频繁的修改字符串时,使用String类的话,比较浪费内存空间,因为它需要不断的在内存中新建一块空间,建议使用StringBuffer或StringBuilder这两个类。