String和StringBuilder和StringBuffer的区别
- String是可读字符串,引用的字符串内容不可以改变
- StringBuilder和StringBuffer表示的字符串对象可直接,单线程中StringBuilder效率更高一些,StringBuffer加了锁,线程安全性要高一些
"=="和“equals()方法区别
- 基本数据比较值是否相等用“==”,用“equals()”比较两个对象是否一样,通俗讲两个人是否长得一样
- 如果我们自定义是直接调用object类中的“equals()”方法则是用于判断两个对象地址是否相同
String类是否可以被继承,为什么用final修饰?
- 不能继承String类。
- 为了效率和安全
a. 只有字符串不可变,字符串才有可能做字符串池
b. 只有字符串不可变,多线程使用才安全,多线程中的实例对象才可共享字符串
c. 因为字符串不可变,所有字符串创建时已经被hashcode所缓存,不需要重新计算,使得字符串适合做map集合的键
d. 字符串可变会造成很严重的安全性问题
JDK,JRE,JVM
- JDK是开发环境工具包,包含JRE和JVM
- JRE是运行环境,包含JVM和核心类库
- JVM是虚拟机
final关键字作用,与finally和finalize关键字区别?
- final修饰的类不能被继承,final修饰的方法不能被重写,final修饰的变量为常量,不能被重新赋值
- finally一般与try-catch合用,不管发没发生异常finally后边的语句都会被执行
- finalize是object类中,用于垃圾回收器中
this和super区别?
- this指向的对象,是对象自身
- super指向是自己的一个超类对象,这个超类是最近的父类
- this()方法调用的是本类的其他构造方法
- super()方法指的是父类的构造方法
抽象类能被final关键字修饰吗?
不能,final修饰的类不能被继承,而抽象类本身是用来继承的,二者相驳
static修饰的方法能调用非static修饰的方法和变量吗?
static修饰的方法只能调用静态方法和变量
局部内部类和匿名内部类使用局部变量时,为什么变量必须加上final?
生命周期不一样,局部变量保存在栈中,当方法执行结束时,非final修饰的变量会被摧毁而局部类依然引用着局部变量,此时调用会出错
重载(overload)和重写(override)的区别?
- 重载方法名相同,方法参数,参数数量,参数顺序不同
- 重写发生在继承关系,方法参数必须相同,子类抛出的异常数量要小于父类,子类的修饰字符权限要大于父类
java创建对象方式有哪些
- 使用new关键字
- Class类当中的newInstence方法
- Constructor类当中的newInstence方法
- 使用cloen方法
- 使用反序列化