Java基础
Java基础
接口和抽象类的共同点和区别
- 接口和抽象类都是不能被实例化的
- 接口和抽象类都可以被继承
- 接口和抽象类都可以包含抽象方法,抽象方法只有方法的声明,没有方法体
- 都可以有默认的方法实现
区别:
- 接口中的方法默认是public,抽象类中的方法可以是public、protected、default
- 接口中的变量默认是public static final,抽象类中的变量可以是public、protected、default
- 接口中不能有静态代码块,抽象类中可以有静态代码块
- 一个类只能继承一个抽象类,但是可以实现多个接口
- 接口中不能有构造方法,抽象类中可以有构造方法
- 接口中不能有静态方法,抽象类中可以有静态方法
- 接口主要用于定义类型,抽象类主要用于代码复用
字符串对象通过”+”连接的效率问题
字符串对象通过”+”连接,实际上是通过StringBuilder的append方法实现的,所以效率比较高,但是如果在循环中使用”+”连接字符串,会创建很多StringBuilder对象,效率较低。
如果直接使用StringBuilder对象的append方法,效率会更高。
String s1 = new String(“abc”);和String s2 = “abc”;的区别
- 如果字符串常量池中没有”abc”的引用,则会在堆上创建两个字符串对象,其中一个字符串对象的引用会存放在字符串常量池中
- 如果字符串常量池中已经有”abc”,则只会在堆中创建一个”abc”对象,s1指向堆中的”abc”对象
String.intern()方法的作用
String.intern()方法会在字符串常量池中查找是否有相同的字符串,如果有,则返回字符串常量池中的引用,如果没有,则将字符串对象的引用存放在字符串常量池中。
Throwable
Throwable是Java中所有错误和异常的超类,它有两个子类:Error和Exception。
Error
Error是Java虚拟机无法解决的严重问题,比如内存溢出、虚拟机错误等,一般不需要捕获。
- OutOfMemoryError:内存溢出
- StackOverflowError:栈溢出
- NoClassDefFoundError:类定义错误
- UnsatisfiedLinkError:本地方法找不到
- VirtualMachineError:虚拟机错误
Exception
Exception是程序运行过程中可能出现的异常,分为两种:
- Checked Exception:编译器会检查是否处理了这种异常,比如IOException、SQLException等
- Unchecked Exception:编译器不会检查是否处理了这种异常,比如NullPointerException、ArrayIndexOutOfBoundsException等
2.1 RuntimeException:运行时异常,比如NullPointerException、ArrayIndexOutOfBoundsException、IllegalArgumentException, ArithmeticException, ClassCastException等
当try语句和finally语句中都有return语句时,会先执行finally语句中的return语句
当finally之前虚拟机退出时,finally语句中的代码不会执行
try-with-resources
try-with-resources是Java7中引入的一个新特性,用于自动关闭资源,比如文件、网络连接等。
try (BufferedReader br = new BufferedReader |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Haostart 的个人站点!
评论