Java基础面试
1 重载和重写的区别
重载 发生在同一个类中 方法名必须相同 参数类型不同 个数不同 顺序不同 方法发返回值和修饰符可以不同 发生在编译时期
重写 发生在父子类中,方法名 参数必须相同 返回值范围小于父类 抛出的异常范围小于等于父类,访问修饰符大于等于父类 如果父类访问修饰符为private则子类不能重写该方法
2 String StringBuilder StringBuffer区别是什么?
1 String是不可变字符序列 Stringbuffer Stringbuilder是可变的字符序列
2 String中的对象是不可变的 线程安全 Stringbuffer是线程安全的 StringBuilder是非线程安全的
3 String类型进行改变时 都会产生一个新的String对象 StringBuffer每次都会对StringBuffer本身进行操作,而不是生成新的对象 。相同情况下使用StringBuilder相比使用SringBuffer获得更高的性能 但是多线程不安全。
操作少量数据=String
单线程操作字符缓冲区下操作大量数据=StringBuilder
多线程操作字符缓冲区下操作大量数据=StringBuffer
3 ==与equals的区别
==作用是判断两个对象是不是同一个对象(基本数据类型==比较的是值,引用数据类型==比较的是内存地址)
equals()判断两个对象是否相等
*情况1 没有覆盖eauals()方法,则通过equals()比较类的两个对象时 等价于通过==比较两个对象
*情况2 覆盖了equals()方法 一般都覆盖equals()来比较对象 若内容相等则返回true(即认为两个对象相等)
String中的equals()方法是被重写过的 因为Object的equals方法比较的是对象的内存地址 Sring的equals方法比较的是对象的值
当创建String对象时,虚拟机就会在常量池中查找有没有已经存在的值和要创建的值相同的对象,如果有把它赋值给当前引用,没有就在常量池中创建一个新的String对象。
4 关于final关键字的总结
final关键字主要用于三个地方 类 方法 常量
1 对于final变量 如果是基本数据类型 则其数值一旦初始化后不能更改如果是引用的变量,在其初始化后不能指向另一个对象。
2 当用final修饰一个类时,表面这个类不能被继承,final类中的所有成员方法都会被隐式地指定为final方法
3 使用final方法的原因有两个 第一个原因是把方法锁定,以防止任何继承类修改它的定义,第二个原因是效率,在早期的java实现版本中,会将final方法转化为内嵌调用。但如果方法过于庞大,可能看不到内嵌调用的任何提升,类中所有的private方法都被隐式地指定为final。
获取键盘输入的两种方式
方法1 通过Scanner
Scanner input =new Scanner(System.in)
String s=input.nextLine();
input.close();
方法2 通过BufferedReader
BufferedReader input=new BufferedReader(new InputStreamReader(system.in));
String s=input.line();
接口和抽象类的区别

1 接口的方法默认是public 所有方法在接口中不能实现,抽象类可以有非抽象方法
2 接口中的实例变量默认是final类型的,而抽象类中却不一定
浙公网安备 33010602011771号