1、1JAVA 开发工程师面试题总结-JAVASE 部分1谈谈 final,finally,finalize 的区别? final 是 Java 的一个关键字,用于定义不能被继承的类,不能被覆写的方法,常量。 finally 是 Java 的一个关键字,是异常处理操作的统一出口。 finalize 是 Object 类中所提供的一个方法,用于在对象回收之前进行收尾操作。2请解释 Java 实现可移植性的原理 Java 程序最终通过字节码文件运行,运行的时候字节码需要 JVM 的支持,但是在不同的操作系统上有不同 JVM,程序不用关系操作系统,只关心 JVM,只要JVM 不改变,程序可以在操作系统间
2、任意移植。3请解释 path 和 classpath 的区别? path 是 windows 的环境属性,用于指定可执行命令的路径 classpath 是指在 java 程序执行的时候,用于指定类的加载路径4请说明下 JAVA 中的几个特殊关键字(了解, 一般面试面这个问题的都是一些煞笔公司) 未使用到的关键字:goto 、const 有特殊含义的关键字:null、true、false JDK1.4 之后增加了一个 assert 关键字 JDK1.5 之后增加了一个 enum 关键字5请解释 JAVA 中的数据类型的划分,并说出其默认值 基本数据类型: 数值型: 整型:byte、short、i
3、nt、long; 0 浮点型:float、double; 0 字符型:char 空字符:u0000 布尔型:boolean false 引用数据类型:数组、类、接口 null26请解释&和&、|和|的区别 &(普通与)和|(普通或)指的是所有条件都进行判断; &(短路与)如果前面的条件不满足,则后面不再进行判断, |(短路或)如果前面的条件满足则后面不再判断; 在开发之中为了性能的提高,主要使用短路与和短路或操作; &和|除了用于逻辑运算之外,也可以进行位运算的操作;7请解释 String 类的两种比较方式 在 String 类中可以使用 “=”和 equals()两种操作来进行字符串的比较
4、“=”比较的是两个字符串的内存地址数值,属于数值比较 equals()是 String 类中提供的一个方法,用于字符串内容的比较,最简单的做法就是比较字符串永远使用 equals()方法就行了8请解释 String 对象的两种实例化方式的区别 首先 String 对象的实例化方式有两种:一种是直接赋值,另外一种是通过构造方法完成 直接赋值:只开辟一个堆内存空间,而且采用了共享设计模式,可以自动入池,以备下次对象继续使用 构造方法:会开辟两快内存空间,其中有一块空间将成为垃圾,而且不会自动入池,可以使用 intern()方法进行手工入池 从开发角度来说,很明显使用直接赋值的方式会更好一些9请谈谈
5、方法的重载和覆写的区别 首先重载和覆写都是面向对象多态性的一个体现 重载 单词:OverLoading 概念:方法名称相同,参数的类型或个数不同 范围:发生在一个类之中 权限:重载的时候没有权限的限制 覆写 单词:Override 概念:方法名称、返回值、参数的个数及类型全部相同 范围:发生在继承关系中 权限:子类覆写的方法不能拥有比父类更严格的访问控制权限 重载的时候可以返回值类型不相同,但是没有任何意义310请谈谈 this 和 super 的区别 this 属性:this.属性表示的是找到本类的属性,如果本类没有找到则继续查找父类 方法:this 方法()表示找到本类的方法,如果本类没有
6、找到则继续查找父类 构造:必须放在构造方法的首行,不能与 super 关键字同时出现 特殊:表示当前对象 super 属性:super.属性直接在子类之中查找父类中的指定属性,不在查找子类本身 方法:super.方法() 直接在子类之中查找父类中的指定方法,不在查找子类本身 构造:必须放在构造方法首行,不能与 this 关键字同时出现 在开发之中使用 this 和 super 可以明确的划分出子类和父类之间的操作11请解释 Collection 和 Collections 的关系 两者之间在定义上没有直接的关系 Collection 是单值集合的操作最大父接口 Collections 只是一个
7、集合的工具操作类12为什么构造方法的定义上不写返回值类型,如果不返回写一个void 不也可以吗 如果构造方法上写了 void 的话,则表示的就是一个普通方法了,普通方法是在对象实例化之后调用的,而构造方法是在对象实例化的时候同时调用的13请解释 Error 和 Exception 的区别 Error:表示的是 JVM 出错,即,程序还没有运行时所发生的错误,用户无法处理; Exception:表示程序运行时发生的错误,用户可以处理;14请解释 String 与 StringBuffer 的区别,分别在什么时候用 String 的内容不能改变(改变的是地址的指向) ,而 StringBuffer
8、 的内容是可以改变的 String 类和 StringBuffer 类中定义的方法可以很好的实现互补 从开发角度来说,大部分情况使用的都是 String 类,很少使用 StringBuffer,使用StringBuffer 只有一个前提,当字符串的内容需要不断的修改对象的时候15请解释 throw 和 throws 的区别 throw 表示人为的进行异常抛出,手工抛出异常 throws 表示:用于方法声明上,表示一个方法不处理异常,而是交给被调用处处理416使用 char 型数据能否表示一个汉字 首先一个汉字占 2 个字节,而 UNICODE 编码也是 16 位的,java 又是采用 UNIC
9、ODE编码,但是保存汉字,语言必须是中文才可以保存17是否可以继承 String 类 不可以,因为 String 类是 final 类,不可以被继承18抽象类可以有构造方法吗 可以有构造方法,而且抽象类中的子类实例化对象的时候也依然符合子类对象实例化的过程,先调用父类的构造方法,为父类的属性初始化,而后调用子类自己的构造方法,所以抽象类中的属性,static 属性,常量等都是可以定义的19抽象类中可以没有抽象方法吗 可以没有抽象方法,尽管没有抽象方法,也不能直接使用关键字 new 实例化对象20一个抽象类中能否包含内部类或内部抽象类 可以21一个抽象类能否使用 static 关键字声明 在外部
10、的抽象类肯定不能使用 static 关键字 在内部抽象类中使用 static,则表示外部类,则可以使用22一个抽象类能否使用 final 声明 不能,final 定义的类不能有子类,而抽象类必须有子类23请解释多线程的两种实例化方式 多线程的两种实现方式是继承 Thread 类和实现 Runnable 接口,不管使用何种方式都要覆写 run()方法 继承 Thread 类与实现 Runnable 接口相比会有当继承的局限 Thread 类也是 Runnablee 接口的子类,不管通过何种方式实现多线程,最终多需要依靠 Thread 类的 start()方法启动 使用 Runnablee 接口可
11、以更加清楚的表示出数据库共享的概念24多个线程操作同一资源的时候需要注意什么?会带来那些问题5 多个线程操作同一资源的时候必须考虑到同步,但是过多的同步会造成死锁25抽象类和接口的区别 抽象类 关键字:abstract class 组成:属性, (全局)常量,构造方法,普通方法, (抽象方法) ,static 方法 权限:可以使用各种权限,private,public 等 使用:抽象类必须有子类,子类必须继承抽象类 子类关键字:class 子类 extends 父类 与接口的关系:一个抽象类可以实现多个接口 设计模式:模板设计 局限:子类只能继承一个父类,有单继承限制 接口: 关键字:inte
12、rface 组成:全局常量,抽象方法 权限:所有权限必须都是 public 使用:接口必须有子类,子类必须实现接口 子类关键字:class 子类 implements 接口 A,接口 B 与抽象类的关系:接口不能继承抽象类,但是可以继承多个接口 设计模式:工厂设计模式,代理设计模式 局限:子类可以实现多个接口,避免了单继承 当接口和抽象类都能满足的情况下,优先使用接口,因为接口避免了单继承的局限性,便于扩展 接口与抽象类合作适配器设计模式26请解释下 JAVA 中的垃圾回收机制 垃圾收集机制指的是可以对无用的内存空间进行释放,而对垃圾的收集采用两种方式 第一种:不定期的进行自动的垃圾回收,不可
13、控制的 第二种:Runtime 中的 gc()方法回收,可控的27作用域 public,private,protected 以及不写时的区别范围 当前类 同一 package 子孙类 其他 packagepublic protected default private 28如果现在父类中的方法是 private,子类中覆写此方法为 default权限可以吗?6 从概念上来说是可以的,因为父类是 private,子类覆写之后是 default,而 default 权限private,但是从实际角度来说,这种操作是不可能实现的,因为 private 比较特殊29请解释 Exception 和 Ru
14、ntimeException 区别, 并列举几个常见的 RuntimeException? Exception 的异常是必须要进行处理的,而 RuntimeException 异常可以选择处理,常见的 RuntimeException 异常有: AirthmeticException、NumberFormatException、NullpointerException、ClassCastException、SystemExceptin、DOMException、MissResourceException、ArrayIndexOutofBoundsException、StringIndexOutofBoundsException、IndexOutofBoundsException(就记住这几个就差不多了,哥哥就是看不惯网上的很多不知道的异常也给老子贴上去,有个吊用)30