1. Instanceof:判断一个对象是否属于一个类或实现一个接口;
语法: A a = new B();
if(a instanceof B) { //此判断为true
B b = (B)a;
b.gongyou();
}
ps:Instanceof可以避免出现类型转换异常,一般和强制类型转换结合使用。
2. 多态的三个必要条件:继承、重写、向上转型(即父类的引用指向子类的对象);
类的私有方法不可以被重写,只能被继承;
ps:当对象发生向下转型前,一定先发生向上转型,否则代码会抛出异常;
3. clone(浅拷贝),前提是待拷贝对象①.实现cloneable接口;②.覆盖clone方法使之可见;
4. &:①按位与;②逻辑与;
&&:“短路与”; ps:字符串为null判断时,一定是在“短路与”的前面(左边),||也同理;
5. eqauls和hashCode;
①.如果两个对象eqauls为true则hashCode一定为相等; (也告诉我们重写equals方法,一定要重写hashCode方法)
②.如果两个对象hashCode相等,则eqauls不一定为相等;
6. Java中的Collection有两类,一类是List,一类是Set。List内的元素是有序的,元素可以重复。Set元素无序,但元素不可重复。
7. java方法中只有值传递,没有传地址,这是和C语言一个较大的差别。
8. 重写与重载:
(1). 重写与重载都是实现多态的方式,重写是运行时多态,重载时编译时的多态;
(2). 方法重载的规则:
a. 方法名一致,参数列表的顺序、类型、个数不同;
b. 重载与返回值无关,存在于父类、子类、同类中;
c. 可以抛出不同的异常,可以有不同的修饰符;
(3). 方法重写的规则:
a. 参数列表必须完全和重写方法一致,返回值类型必须和重写方法返回值类型一致;
b. 构造方法、声明为final的方法、声明为static的方法,均不能被重写,但可以被再次声明;
c. 访问权限不能比父类中被重写方法权限低;
d. 重写方法可以抛出任何非强制异常(UncheckedException, 也称非运行时异常),无论被重写方法是否抛出异常;
重写方法不能抛出新的强制性异常,或者比重写方法声明的更广泛的异常,反之,则可以;
9. 抽象类(abstract class)和接口(interface)有什么异同点?
抽象类:
a.抽象类可以定义构造器;
b.可有抽象方法和具体方法;
c.抽象类中的成员可以为public、protected、default、private,抽象方法只可以为(public或protected);
d.抽象类中可以定义成员变量;
e.有抽象方法的类必须声明为抽象类,而抽象类未必有抽象方法;
f. 抽象类中可以包含静态方法;
g. 一个类只可以继承一个抽象类;
接口:
a. 接口中不可以定义构造器;
b. 方法全部是抽象方法;(public abstract 可省略)
c. 接口中的成员全部是public;
d. 接口中定义的成员变量实际上都是常量; (public static final 可省略)
e. 接口中不能有静态方法;
f. 一个类可以实现多个接口;
相同: ①.两者都不可以被实例化;
②. 可以将抽象类型和接口作为引用类型;
③. 一个类继承某个抽象类或实现了某个接口,必须实现全部的抽象方法,否则此类还要被定义为抽象类;
10. String、StringBuffer与StringBuilder
区别:
a. String对象是常量,它的值不能被创建后改变,StringBuffer和StringBuilder可以可变;
b. StringBuilder非线程安全(单线程使用),String与StringBuffer线程安全(多线程使用);
c. 如果程序不是多线程的,那么使用StringBuilder效率高于StringBuffer。
11. ERROR和EXCEPTION的区别?
两者的父类都是Throwable类。
error与虚拟机相关,如系统崩溃,虚拟机错误,内存不足,方法调用栈溢出等。建议程序停止;
exception可以捕获;