1 String 、StringBuilder 、StringBuffer 的区别?
答:
String为字符串常量,所以String对象一旦创建成功是不可以更改的.
运行速度的区别:
StingBuilder>StringBuffer>String
线程安全的区别:
StirngBuffer的许多方法都带有Synchronized(线程锁)关键字,所以可以保证线程的安全性,但是StringBuilder没有带有这个关键字,所以就不能保证线程的安全,有可能会出现一些错误的操作.所以使用单线程的话使用StringBuilder,多线程就使用StringBuffer会更加安全.
1.String是只读字符串,引用的字符串内容是不能被改变的.
2.StringBuilder和StringBuffer表示的字符串对象可以直接被更改.
3.StringBuilder单线程环境下使用效率会比StringBuffer要高,而StringBuffer带有synchronized关键字加锁了,所以更加安全.
2 equals()与==的区别?
答:
1.==可以判断基本类型和引用类型
判断基本类型比较的是值,而判断引用类型比较的是地址值,也就是判断是否为用一个对象
2.equals判断两个对象是否相等
没有重写Object类的equals方法:源码中使用”==”进行比较
重写equals方法,判断两个对象的内容是否相等
3 是否可以继承String类?为什么要用final修饰?
答:
①不可以继承String类,因为String类被final修饰,被final修饰的类为最终类,所以不能被继承
被final修饰的原因:
1.把方法锁定,防止任何继承关系修改它的意义和实现
2.高效,编译器在遇到调用final方法时会转入内嵌机制,大大提高了效率
内嵌机制:当代码调用到final方法时,这个方法会自动展开,而不是函数调用的形式,从而提高了函数运行效率.
②final修饰的原因:为了效率和安全
1.只有字符串是不可变的,字符串池才有可能实现
2.只有字符串是不可变的,所以多线程是安全的,同一个字符串实例可以被多个线程所共享
3.因为字符串是不可变的,所以他在被创建的时候已经被hashcode缓存了,不需要重新计算,使得字符串很适合做map中的键
4.如果字符串是可变的,会引起很严重的安全问题.
4 什么是面向对象编程?
答:
面向对象编程:以建立模型体现出来的抽象思维过程和面向对象的方法,利用类、方法的继承封装多态等概念进行程序设计的思想被称为面向对象编程
5 面向对象的三大特征
答:
继承:子类继承父类可以使子类拥有父类所有的行为和属性,还可以追加行为和属性,继承只支持单继承不支持多继承,但是支持多层继承。简单来说就是子类继承父类可以实现代码的抽取和复用,单继承,多实现。
封装:将事物的行为和属性抽取出来封装到一个类中,从而提高了复用性。
多态:父类引用指向子类实现,实现多态的前提条件:‘必须要继承重写向上转型的三个条件:继承、重写、向上转型’’
6 JDK、JRE、JVM分别代表什么含义
JDK:开发者工具包,包含了JRE,JVM
JRE:开发环境,包含JVM和核心类库
JVM:虚拟机
7 java基本数据类型
答:四类八种
整数 byte short int long
浮点型(小数)float double
布尔型 boolean
字符型 char
8 什么是方法签名
答: 方法的名称和参数的类型,被称为方法签名。
9 java中的访问修饰符
答:private default protect public
10 final有什么用?和finally、finalize有什么区别?
答:
final的含义是最终,被final修饰的类不能被继承,修饰的方法不能被重写,修饰的变量变为常量,不能重新被赋值。
finally:一般用在try-catch-finally结构中,其作用是不管是否出现异常,finally中的代码都会执行。
finalize:是Object类的方法,用于垃圾回收器中
11 this和super的区别
答:
this指的是对象本身,super则指的是自己最近的父类对象(超类对象)
this()调用的是本类的其它构造方法
super()调用的是父类的构造方法