PS:这些是在面试过程中遇到的或复习过程中在别人博客中看到的题目,以及我整理的答案(一些还没找到答案,后面陆续补齐),如果还有哪些常被问到的题目没列出或文章有任何错漏,欢迎评论区指出。
一、Java基础部分
1、使用length属性获取数组长度,public、private、protected、friendly区别 。
答:public、private、protected、friendly访问权限:
2、Collection和Collections区别 。
答:1、java.util.Collection 是一个集合接口(集合类的一个顶级接口)。它提供了对集合对象进行基本操作的通用接口方法。
2、java.util.Collections 是一个包装类(工具类/帮助类)。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,用于对集合中元素进行排序、搜索以及线程安全等各种操作,服务于Java的Collection框架。
3、String s=new String(‘xyz’);创建了几个object对象 。
答:两种情况:
1、常量池中有"xyz"时,只在堆中创建了一个对象;
2、常量池中没有"xyz"时,在常量池和堆中都创建了对象,即两个。
4、short 数据类型。
s1=s1+1;是否有错?
答:有错,因为1是int类型,则(s1+1)为int类型,int转化为short为向下转换,需强制转换,即s1=(short)(s1+1)。
5、Overriding和Overloading区别
答:方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现。二者的差别在于,重载是编译时多态,重写是运行时多态。重写(Overriding)是父类与子类之间多态性的一种表现,而重载(Overloading)是一个类中多态性的一种表现。
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding) 。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了.
如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型或有不同的参数次序,则称为方法的重载(Overloading)。不能通过访问权限、返回类型、抛出的异常进行重载.
6、Set里面的元素不能重复,用什么方法区分重复与否。
答:用equals;==是用来判断两者是否是同一对象(同一事物),而equals是用来判断是否引用同一个对象。再看一下Set里面存的是对象,还是对象的引用。根据java的存储机制可知,set里面存放的是对象的引用,所以当两个元素只要满足了equals()时就已经指向同一个对象,也就出现了重复元素。所以应该用equals()来判断。
7、常见的runtime exception。
答:
NullPointerException - 空指针引用异常
ClassCastException - 类型强制转换异常。
IllegalArgumentException - 传递非法参数异常。
ArithmeticException - 算术运算异常
ArrayStoreException - 向数组中存放与声明类型不兼容对象异常
IndexOutOfBoundsException - 下标越界异常
NegativeArraySizeException - 创建一个大小为负数的数组错误异常
NumberFormatException - 数字格式异常
SecurityException - 安全异常
SQLException - 操作数据库异常类
ClassNotFoundException - 异常的解释是"指定的类不存在"
UnsupportedOperationException - 不支持的操作异常
8、error和exception区别。
答:
Error(错误)表示系统级的错误和程序不必处理的异常,是java运行环境中的内部错误或者硬件问题。比如:内存资源不足等。对于这种错误,程序基本无能为力,除了退出运行外别无选择,它是由Java虚拟机抛出的;
Exception(异常)表示需要捕捉或者需要程序进行处理的异常,它处理的是因为程序设计的瑕疵而引起的问题或者在外的输入等引起的一般性问题,是程序必须处理的。
参考 : Error与Exception的区别
9、List和Set是否继承自Collection接口?
答:是。
List特点:元素有放入顺序,元素可重复
Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的)
10、abstract class和interface 的区别。
答:含有abstract修饰符的class即为抽象类,abstract 类不能创建实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。
下面比较一下两者的语法区别:
1.抽象类可以有构造方法,接口中不能有构造方法;
2.抽象类中可以有普通成员变量,接口中没有普通成员变量;
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法;
4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型;
5. 抽象类中可以包含静态方法,接口中不能包含静态方法;
6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
11、是否可以继承String类。
答:不可以,因为String类有final修饰符,而final修饰的类是不能被继承的。
12、try{}里有一个return语句,紧跟在try后的finally里的code会不会被执行,什么时候执行,return前执行还是return后执行。
答:会执行,finally语句是在try的return语句执行之后,return返回之前执行。
13、最有效率的方法算2*8等于几
答:2 << 3,
因为将一个数左移n位,就相当于乘以了2的n次方,那么,一个数乘以8只要将其左移3位即可,而位运算cpu直接支持的,效率最高,所以,2乘以8等於几的最效率的方法是2 << 3。
14、两个对象值相同,x.equal(y)==true,但是却可有不同的hashcode,这句话对不对。
答:按照Java的规范:
1) 对象相等则hashCode一定相等;
2) hashCode相等对象未必相等
这句话是错的,但是,如果一个类只重写了Object的equals而没重写其hashcode方法时,这句话有可能是对的。
15、值传递和引用传递
答:Java的参数传递,不管是基本数据类型还是引用类型的参数,都是按值传递,没有按引用传递!
当参数为基本