以下是面试时常问到的JAVA面试题,能让你对JAVA面试有基本的了解。根据我个人的经验,一个好的面试官在面试的时候是不会事先准备一列问题清单,一般来说都从关于JAVA最基本的概念开始,然后再根据你的回答继续深入讨论。
问题:关于JAVA 你知道什么?
回答:JAVA是一种高级程序设计语言,由詹姆斯·高斯林发明并于1995年发布。JAVA可以在多种平台上运行,如Windows、Mac OS、各种版本的UNIX。
问题:JAVA编程语言支持什么平台?
回答:JAVA可以在多种平台上运行,如Windows、Mac OS、以及各种版本的UNIX/Linux操作系统如HP-Unix, Sun Solaris, Redhat Linux, Ubuntu, CentOS 等。
问题:请列举出JAVA至少5种特性。
回答:JAVA特性包括面向对象、平台独立、健壮性、解释性、多线程等。
问题:为什么JAVA是结构中立的?
回答:JAVA编译器会生成一种具备结构中立性的目标文件格式。编译后的程序码可以在提供Java运行系统的多种不同处理器上面执行。
问题:JAVA如何保证高效性?
回答:JAVA使用即时编译器来保证高效性。即时编译器能把Java字节码转换成可以直接发送给处理器的指令。
问题:为什么JAVA是动态的?
回答:JAVA能适应不断升级的环境。JAVA程序带有大量扩展的运行时信息,这些信息可以用来实时验证处理对对象的引用。
问题:什么是JAVA虚拟机?它对JAVA的平台独立性有什么作用?
回答:当JAVA代码被编译的时候,它并不是被编译成针对某一特定平台的机器码,而是转换成平台独立的字节码。这些字节码通过网络传送到不同的机器上,不管这些机器运行的是什么平台,JAVA虚拟机都可以解释字节码。
问题:列举两个JAVA集成编译环境。
回答:Netbeans、Eclipse
问题:列举几个JAVA与C/C++不同的关键词。
回答:import、super、finally等
问题:什么是对象?
回答:对象是在运行时的实体,它的状态储存于域中,它的行为通过方法实现。方法能够操作对象内部的数据,也是对象间通信的主要途径。
问题:请给定义类。
回答:类是一张蓝图,对象根据这张蓝图被创建。一个类可以包括数据域和方法,方法可以描述对象的行为。
问题:一个类可以包含什么类型的变量?
回答:包括居于变量,实例变量和类变量。
问题:什么是局域变量?
回答:在方法内、构造函数内或者代码块内定义的变量是局域变量。局域变量在函数内声明和初始化,当函数执行结束时局域变量会被销毁。
问题:什么是实例变量?
回答:实例变量是在类中但在任何函数之外的变量。实例变量只有当类实例化后才能被引用。
问题:什么是类变量?
回答:在类中并且在任何函数之外,使用static关键词声明的变量是类变量。
问题:什么是类的单例模式?
回答:单例类控制对象的生成,一次只能存在一个对象但兼具灵活性,当条件改变时允许创建多个变量。
问题:什么是构造函数?
回答:当一个新的对象被创建的时候会自动调用构造函数。每个类都有构造函数。如果不显性声明构造函数,JAVA编译器会调用默认构造函数。
问题:列举为类创建对象的过程(三步)。
回答:首先声明一个对象,然后实例化,再对其初始化。
问题:JAVA中字节数据类型的默认值是多少?
回答:0
问题:JAVA中float和double的默认值是多少?
回答:float型和double型的默认值与C/C++相同,float是0.0f,double是0.0d。
问题:byte类型在什么时候使用?
回答:byte类型用来在较大的数组中节省储存空间。使用byte类型替代int型可以节省三倍的空间。
问题:什么是静态变量?
回答:类变量也叫静态变量,使用关键词static,在类里,但在方法、构造函数和代码块之外。
问题:什么是访问控制修饰符?
回答:JAVA提供访问控制修饰符来修饰类、变量、方法和构造函数的访问控制属性。当不写出访问控制修饰符时,成员具有默认的访问权限或者包访问控制权限。
问题:什么是受保护访问控制修饰符?
回答:变量、方法和构造函数如果在父类中被声明为受保护,那么它们只能在其它包的子类中或者在该父类的包中被访问。
问题:什么是同步修饰符?
回答:JAVA在访问控制修饰符之外还提供同步修饰符,同步修饰符用来限制方法,使方法一次只能被一个线程调用。
问题:在JAVA运算符优先级中,哪个运算符的优先级最高?
回答:圆括号()和下标运算符[]具有最高的优先级。
问题:在switch语句中能使用的数据类型包括哪些?
回答:switch中使用的变量只能是字节型、短整型、整型或字符型。
问题:parseInt()函数在什么时候使用到?
回答:parseInt()函数用于解析字符串返回整数。
问题:为什么说String类是不可变的?
回答:String对象一旦被创建就不可改变,因此可以在多个线程中被安全地引用,这对于多线程的编程来说十分重要。
问题:为什么说StringBuffer类是可变的?
回答:String类是不可变的,因此一个String对象一旦被创建就不可改变。如果需要对字符串进行频繁的修改,那么就应该使用StringBuffer。
问题:StringBuffer和StringBuilder类的区别在哪?
回答:尽可能使用StringBuilder,因为它运行时比StringBuffer快。但如果需要强调线程安全,那就应该使用StringBuffer。
问题:那个包使用正则表达式来实现模式匹配?
回答:包java.util.regex。
问题:java.util.regex包括那些类?
回答:包括三个类:Pattern类、Matcher类和PatternSyntaxException类。
问题:什么是finalize()方法?
回答:finalize()方法在一个对象被垃圾回收机制销毁前调用,可以保证对象被彻底地销毁。
问题:什么是Exception?
回答:Exception是当程序运行过程中遇到的异常。异常由方法调用栈中的Handler捕获。
问题:什么是受检查的异常?
回答:受检查异常通常为用户操作的异常,不能被程序员预见。例如,在打开一个文件的时候,无法找到文件就发生了异常,这样的异常在编译的时候不能被跳过。
问题:什么是运行时间异常?
回答:运行时间异常在编程时可以预见并避免。与受检查异常不同,运行时间异常在编译时可以被跳过。
问题:Exception类的两个子类是什么?
回答:Exception类有两个主要的子类:IOException类和RuntimeException类。
问题:关键词throws在什么情况下使用?
回答:如果一个方法没有使用handler处理异常,那么这个方法必须使用throws关键词声明。关键词throws用于方法签名之后。
问题:关键词throw在什么时候使用?
回答:不论是新实例化的异常还是刚捕获的异常,都可以通过使用关键词throw抛出异常。
问题:finally关键词在异常处理中如何使用?
回答:关键词finally用来在try代码块后再加一个代码块,不管有没有发生异常,finally代码块内的语句都会被执行。
问题:当自己创建异常类的时候应该注意什么?
回答:当创建异常类时应该注意:
- 所有的异常类都应该是Throwable类的子类。
2.写一个遵循处理与声明规则的受检查异常类时,应该加上extend Exception。
3.写一个运行时间异常类,需要加上extend RuntimeException。
问题:什么是继承?
回答:继承指的是一个类获得另一个类的属性的过程。数据属性和行为按从父类到子类的顺序继承,便于管理。
问题:关键词super什么时候使用?
回答:如果一个方法重写了父类的方法,被重写的父类方法可以通过关键词super调用。super也可以用来调用被隐藏的域。
问题:什么是多态?
回答:多态是一个对象同时具有多种形态的能力。在面向对象编程中,多态最常见的应用是将一个父类指针指向一个子类的对象。
问题:什么是抽象?
回答:抽象是在面向对象编程中将一个类抽象化的过程。抽象能够降低复杂性,提高系统可维护性。
问题:什么是抽象类?
回答:抽象类不能被实例化,可以被部分实现接口。抽象方法是没有函数体的方法声明,抽象类含有一个或多个抽象方法。
问题:抽象方法什么时候被使用?
回答:当想要让类包含一个方法,但想要让方法的具体实现由子类决定,那么就可以在父类中声明抽象方法。
问题:什么是封装?
回答:封装是将数据域设为私有,提供公共方法来处理私有的数据域。如果一个域被设为私有,那么在类外就不能访问该数据域,这样就把数据域隐藏在类内部。因此封装也被称为数据隐藏。
问题:封装最主要的优点是什么?
回答:最主要的优点是允许修改实现的借口,同时不用修改他人使用接口的代码。封装使得代码具可维护性、灵活性和扩展性。
问题:什么是接口?
回答:接口是一系列抽象方法的集合,一个类实现接口,也就从接口中继承了这些抽象方法。
问题:接口具有什么特性?
回答:1.接口不能被实例化
2.接口不含任何构造函数
3.接口中的函数都是抽象函数
问题:什么是包?
回答:包包含相关的类型(类、接口、枚举和注释),提供访问保护和命名空间管理。
问题:为什么要使用包?
回答:JAVA中使用包可以避免命名空间矛盾,控制访问权限,便于定位和使用类、接口、枚举和注释等。
问题:什么是多线程编程?
回答:多线程编程包含两个或者更多个可以同时运行的部分,这些部分被叫做线程。每个线程有独立的执行路径。
问题:创建线程的两种方式是什么?
回答:通过实现Runnable接口或者继承Thread类。
问题:什么是applet?
回答:applet是一个运行在Web浏览器上的JAVA程序。由于它带有整个JAVA的API,因此可以实现JAVA提供的所有功能。
问题:applet继承哪个类?
回答:applet继承了java.applet.Applet 类。
问题:解释下JAVA的垃圾回收机制。
回答:JAVA垃圾回收机制能够清理不再被引用的对象,从而来释放内存。
问题:什么是不可变对象?
回答:不可变对象一旦被创建就不能再改变。