Java面试题笔记

Java SE基础:

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可以捕获;

 

 

 

 

 

 

你可能感兴趣的:(NOTE)