Java面试随笔

Q:面向对象编程的四大特性及其含义?

抽象,封装,继承,多态

个人理解

        抽象:现实世界中事物的共同特征提取出来的过程,把现实中的一个业务问题转换为面向对象领域的东西

       封装:把抽象出来的属性,行为封装到类中,类中的(private)属性、行为不能被外界访问,封装好的模块应该满足高内聚低耦合

       继承:是代码重用的一种方式,子类可以继承父类的部分属性、方法

       多态:建立在继承之上,不同对象对同一消息做出不同的反应,多态的条件(继承,方法覆写,父类引用指向子类对象)

Q:String、StringBuffer和StringBuilder的区别?

String被设计为final类,不可以被继承,String是字符串常量,内部是一个final字符数组

 /** The value is used for character storage. */
    private final char value[];

即指向String的引用是不可变的,任何对String的操作(subString,indexOf,concat...)都不能改变这个字符串,这些操作会形成新的一个字符串对象,和原本的字符串是不同的地址

不可变有不可变的应用场景和好处(安全),比如说不可变对象作为临界资源,在多线程的情况下,不用担心该资源的改变,省去了锁的操作

StringBuffer和StringBuilder都是字符串变量,主要操作是append、insert

/**
     * The value is used for character storage.
     */
    char[] value;

StringBuffer是线程安全的(内部很多方法上都被synchronized关键字修饰),使用效率比较低,相对StringBuilder是非线程安全的,效率较高

Q:String a=""和String a=new String("")的的关系和异同?

两者都创建了一个空字符串

String a = "" 如果常量池中没有空串,则在常量池中创建

String a = new String(“”) 如果常量池中没有空串,则在常量池中创建,并且在堆中也创建一个空间

Q:Object的equal()和==的区别?

一样,都是比较的对象地址

Q:装箱、拆箱什么含义?

装箱:基本类型—》引用类型

拆箱:引用类型—》基本类型

Q:遇见过哪些运行时异常?异常处理机制知道哪些?

空指针异常、类型转换异常,算数异常,数组下标越界,OOM等

Q:什么是反射,有什么作用和应用?

反射:在运行时动态的获取类的属性、方法

eg:JDBC连接数据库加载驱动时:Class.forName("xxxxx")

       Spring中很多地方使用到了反射,在xml中bean的配置,测试类中通过 application.getBean("xx")动态得得到该类得实例

特点:在编译时使用了不知道的类

Q:什么是内部类?有什么作用?静态内部类和非静态内部类的区别?

内部类本身是外部类的一个属性

分类:

  成员内部类:private class InnerClass{}

  静态内部类:static class staticClass{}

  局部内部类:在方法内部的类

  匿名内部类:

/**
匿名内部类没有名字,只能使用一次 
*/
Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("匿名内部类...");
            }
        });

非静态内部类使用时先创建外部类对象才能创建内部类对象,静态内部类可以直接创建

静态内部类只可以访问外部类的静态成员,非静态类都可以访问

非静态内部类有指向外部类的引用,静态内部类则没有

作用:控制作用域,节约代码(匿名内部类),实现多继承,扩展功能

Q:final、finally、finalize()分别表示什么含义?

final修饰变量-》常量,修饰方法-》不可被重写,修饰类-》不可被继承

finally异常捕获机制,try-catch-finallly,无论是否发生异常都会执行的代码块

finalize()回收对象

Q:重写和重载的区别?

都是多态性的体现

方法重载:方法名相同,形参表不同,编译时就能确定调用哪个方法(静态)

方法重写:函数声明部分完全相同,运行时才能确定调用哪个方法(动态)

Q:抽象类和接口的异同?

Q:为什么匿名内部类中使用局部变量要用final修饰?

Q:Object有哪些公用方法?

clone():创建一个对象的副本(深克隆/浅克隆)

getClass():获得运行时类

equal():判断对象是否相等

hashCode():返回该对象的hashcode

finalize():回收对象

线程同步的方法:wait(),notify(),notifyAll()

猜你喜欢

转载自blog.csdn.net/qq_34018603/article/details/86551034