大数据的发展势头是蒸蒸日上,不少小伙伴想要了解大数据加入大数据行业却不知道自己到底够不够格。所以今天特地为大家带来了大数据的面试真题——JAVA基础面向对象类试题。JAVA作为一门编程语言,是入手大数据的好工具哦。
(共25分,每空1分)
1、Java中所有的错误都继承自______类;在该类的子类中, _______类表示严重的底层错误,对于这类错误一般处理的方式是_______;_______类表示例外、异常。
2、异常类 java.rmi.AlreadyBoundException,从分类上说,该类属于______ 异常,从处理方式上说,对这种异常_________________;
异常类java.util.regex.PatternSyntaxException,从分类上说,该类属于_______异常,从处理方式上说,对这种异常__________________。
3、
abstract class Animal{ public abstract void eat();
} interface Pet{ void play();
}
class Dog extends Animal implements Pet{ public void eat(){ System.out.println(“Dog eat Bones”);
}
public void play(){
System.out.println(“Play with Dog”); } }
class Cat extends Animal implements Pet{ public void eat(){
System.out.println(“Cat eat fish”);
}
public void play(){
System.out.println(“Play with Cat”); } }
class Wolf extends Animal{ publicvoid eat(){
System.out.println(“Wolf eat meat”); } }
public class TestMain{ publicstatic void main(String args[]){ Animalas[] = new Animal[3]; as[0] = newDog(); as[1] = new Cat();
as[2] = new Wolf();
//调用as 数组中所有动物的eat 方法
//1
//调用as 数组中所有宠物的play方法
//2
}
}
//1 处应该填入的代码为:__________________。
//2 处应该填入的代码为:__________________。
4、要把一个int 类型的变量转换为Integer 类型,需要调用_______类的________ 方法;要把Integer 类型转为int 类型,需要调用_______类的_________方法;要把String 类型转为Integer 类型,需要调用______类的_______方法;要把 Integer 转为String 类型,需要调用________类的________方法;要把int 类型转化为String 类型,需要______________________;要把String 类型转化为int 类型,需要调用__________类的__________方法。
5、在Object 类中,定义的finalize方法在______时调用, toString()方法返回值表示_________,equals 方法的作用为________,getClass 方法作用为__________ 。
答案解析:
1、Throwable;Error;不处理; Exception
2、已检查;必须要处理;可处理可不处理
3、//1处填入的代码为for (int i = 0; i<as.length; i++){ as[i].eat(); }
//2处填入的代码为for (int i = 0; i<as.length; i++){ if (as[i] instanceof Pet){ Pet p = (Pet) as[i]; p.play();
4、Integer;构造;Integer;intValue;Integer;构造;Integer;toString;利用”” + int值;Integer;parseInt
5、对象被垃圾回收;对象的字符串表现形式;判断两个对象值是否相同;获得对象的实际类型。
(共16分,每题2分)
1、有下面代码
interface IA{ void ma();
}
class MyClass implements IA{ public void ma(){} public StringtoString(){ return “MyClass toString()”;
}
}
public class TestMyClass{ public static void main(String args[]){
IA ia = new MyClass();
System.out.println(ia);
}
}
选择正确答案:
A. 编译不通过,因为IA 接口中没有定义toString 方法
B. 编译通过,输出:“IA@地址”
C. 编译通过,输出:“MyClass toString()”
2、有如下代码
public class TestTryCatch{ publicstatic void main(String args[]){ System.out.println( ma() );
} public static int ma(){ int n; try{ n = 10/0;
}catch(Exception e){
} return n;
}
}
选择正确答案:
A. 编译不通过
B. 编译通过,输出-1
C. 编译通过,输出 0
3、有如下代码
importjava.io.*; import java.sql.*; public class TestTryCatch{ public static void main(String args[]){ try{ ma(10);
System.out.println(“No Exception”);
}
catch(EOFException ex1){
System.out.println(“ex1”);
}
catch(IOException ex2) {
System.out.println(“ex2”);
}
catch(SQLException ex3) {
System.out.println(“ex3”);
}
}
public static void ma(int n) throws Exception{ if (n == 1){
throw new IOException();
}else if (n == 2){ throw new EOFException();
}else if (n == 3) { throw new SQLException();
}
}
}
选择正确答案:
A.编译不通过
B. 编译通过,输出 No Exception
C. 编译通过,输出 ex3
4、有以下代码
public class TestException{ public static void main(String args[]){ try{
System.out.println(“main1”); ma();
System.out.println(“main2”);
}catch(Exception e){
System.out.println(“In Catch”);
}
}
public static void ma(){
System.out.println(“ma1”); throw new NullPointerException(); System.out.println(“ma2”);
}
}
选择正确答案:
A. 编译出错
B. 编译正常,输出main1 ma1 In Catch
C. 编译正常,运行时出错
5、有如下代码
//MyClass.java
package corejava.chp6;
public class MyClass{
int value;
}
//MySubClass.java
package corejava.temp;
import corejava.chp6.MyClass;
public class MySubClass extends MyClass{
public MySubClass(int value){
this.value = value;
}
}
选择正确答案:
A. 编译通过
B. 编译不通过,应把第12 行改成super.value = value;
C. 编译不通过,可以为MySubClass增加一个value 属性
6、有如下代码
class Super{
public void m(){
foo();
}
public void foo(){
System.out.println("foo() in Super");
}
}
class Sub extends Super{ public void foo(){
System.out.println("foo() in Sub");
}
}
public class TestSuperSub{ public static void main(String args[]){ Supers = new Sub();
s.m();
}
}
选择正确答案
A. 程序编译不通过
B. 编译通过,输出foo()in Super
C. 编译通过,输出foo() in Sub
7.有下面代码
interface IA{ void ma();
}
class MyClass implements IA{ public void ma(){} public StringtoString(){ return “MyClass toString()”;
}
}
public class TestMyClass{ public static void main(String args[]){
IA ia = new MyClass();
System.out.println(ia);
}
}
选择正确答案:
A. 编译不通过,因为IA 接口中没有定义toString 方法
B. 编译通过,输出:“IA@地址”
C. 编译通过,输出:“MyClass toString()”
8、有如下代码
public class TestTryAndTry { public static void main(String args[]){ System.out.println(ma());
} public static int ma(){ try{ return 100;
}finally{ try{ return 200;
}finally{ return 500;
} return 1000;
}
}
}
选择正确答案:
A. 编译错误
B. 输出 100
C. 输出 1000
答案解析:
1、C ,虽然 IA 接口中没有定义toString 方法,但是由于 toString 方法是所有对象都有的方法,因此依然可以对 IA 类型的引用调用toString 方法,调用的是子类覆盖以后的方法。
2、A,当程序异常时,返回值为-1,而当程序正常时,返回值为n。问题在于,n 是一个局部变量,由于try 块中的代码可能不会被执行,因此在return 语句之前没有对n 的赋值语句,这样就破坏了局部变量“先赋值,后使用”的要求,因此编译不通过。
3、A,由于ma 方法声明抛出Exception,因此在main 方法中的try 块必须有对Exception类型处理的子句。
4、A,ma 方法中第二个输出语句,由于上一个语句是throw 语句,因此第二个输出语句永远都执行不到,因此编译出错。
5、C
6、C
7、C,虽然 IA 接口中没有定义toString 方法,但是由于 toString 方法是所有对象都有的方法,因此依然可以对 IA 类型的引用调用 toString 方法,调用的是子类覆盖以后的方法。
8、A,这个题目的难点在于finally 语句中还套着一个try-finally结构。
对于外层的try-finally 结构而言,finally语句一定要执行,因此返回值一定是finally语句块中的某个值;对于内层的try-finally 结构而言,finally语句一定要执行,因此返回值一定是500;而在return 500 后面的语句,一定不会被执行,因此编译不通过”。
(共24分,每题4分)
1、有如下代码
interface IA { void m1(); public void m2(); public abstract void m3();
}
abstract class Super{} class Sub1extends Super{} class Sub2 extendsSuper{} public class TestInterface{ public static void main(String args[]){
Super sup = new Sub1();
Sub1 sub1 = (Sub1)sup;
//1
}
}
在//1 处可以编译(不考虑运行时是否会产生异常)通过的代码为:
A. Sub2 sub2 = (Sub2) sup;
B. Sub2 sub2 = (Sub2) sub1;
C. IA ia = (IA) sup;
D. IA ia = (IA) sub1;
2、有如下代码
class Animal{} class Dog extends Animal{} class Cat extends Animal{}public class TestAnimal{ public static void main(String args[]){
//主方法代码省略
}
public static Animal getAnimal(){ //1
}
}
问:下列几个选项中,有哪几个放在//1 位置能够编译通过?
A. return null;
B. return new Animal();
C. return new Dog();
D. return new Cat();
3、有如下代码
class Super{
int method(){return 0;}
}
class Sub extends Super{ // 1
}
在//1 处,能编译通过的代码为
A. public int method(){return 0;}
B. void method(){}
C. void method(int n){}
4、有如下代码
class Super{
private void method(){}
}
class Sub extends Super{ //1
}
在//1 处,能编译通过的代码为:
A. public int method(){return 0;}
B. void method(){}
C. void method(int n){}
D. private voidmethod(){}
5、Java 中的内部类包括
A. 成员内部类
B. 静态内部类
C. 局部内部类
D. 匿名内部类
E. 公开内部类
F. 抽象内部类
6、有下面代码
class OuterClass{
private int value1 = 100; private static int value2 = 200; public voidmethod(int value3){ final int value4 = 400; class InnerClass{ public voidprint(){ //1
}
}
}
}
问:下面哪些代码放在//1 处能够编译通过?
A. System.out.println(value1);
B. System.out.println(value2);
C. System.out.println(value3);
D. System.out.println(value4);
答案解析:
1、ACD
2、ABCD,该方法的返回值类型是Animal类型,选项A是引用数据类型的默认值,选项B是Animal类型的对象,能够跟返回值类型相互兼容。选项C和选项D 都是子类类型的对象,根据多态语法,可以跟父类类型Animal相互兼容。
3、AC,方法覆盖的条件:
a、在继承关系中
b、方法的三要素必须相同
c、权限等宽于父类
d、子类方法跑出的异常不能大于父类
4、ABCD,私有的方法不能被子类继承,所以也不能被子类覆盖。
5、ABCD
6、ABD
(共35分,每题7分)
1、写出下面代码执行的结果 interface IA{ void ma();
} class MyClass { public static void method(IA ia){System.out.println(“in method”); ia.ma();
}
}
public class TestInnerClass{ public static void main(String args[]){
MyClass.method(new IA(){ public void ma(){
System.out.println(“ma in anonymous inner class”); }});
class MyMaClass implements IA{ public void ma(){
System.out.println(“ma in local inner class”); }
}
MyClass.method(new MyMaClass());
}
}
2、写出下面代码输出结果
public class TestString{ public static void main(String args[]){
String str1 = “Hello”;
String str2 = “Hello”;
System.out.println(str1 == str2); System.out.println(str1.equals(str2));str1 = new String(“Hello”);
str2 = new String(“Hello”);
System.out.println(str1 == str2);
System.out.println(str1.equals(str2)); }
}
3、写出下面程序运行的结果
class Animal{} class Dog extends Animal{} public class TestGetClass{
public static void main(String args[]){
Animal a1 = new Dog();
Animal a2 = new Animal();
System.out.println(a1 instanceof Animal);
System.out.println(a1.getClass() ==a2.getClass()); }
4、写出Object 类中toString 方法的签名,以及equals 方法的签名
5、有以下代码
class Super{ } class Sub extends Super{ public Sub(){} public Sub(Stringstr){
super(str);
}
}
该程序应该如何修改才能编译通过?
答案解析:
1、in method
ma in anonymous inner class
in method
ma in local inner class
2、true true false true
当直接使用”Hello”这样的字面值给一个字符串赋值时,会使用字符串常量池。在这个例子中,由于str1和str2都只用了字面值直接赋值,因此他们指向的是字符串常量池中同一个”Hello”对象。此时,str1和str2不论用equals比较还是用==比较,结果都为true。
当使用new关键字时,则不会使用常量池,而是直接创建一个新的字符串对象。因此,当str1和str2都指向用new创建出的新对象时,虽然对象值相同,但是两个引用并不指向同一个对象。因此,用equals关键字比较时,返回值为true,而用==比较返回值为false。
3、true false
第一个比较,判断的是a1引用所指向的对象,是否是Animal类型或者其子类。由于a1指向的对象是Dog类型,是Animal类型的子类,因此比较结果为true
第二个比较,比较的是a1所指向的对象的实际类型,和a2所指向对象的实际类型是否相同。由于a1所指向的对象为Dog类型,而a2所指向的对象为Animal类型,因此这个比较返回值为false。
4、toString方法: public String toString()
equals方法: public boolean equals(Object obj)
注意:equals方法参数为Object类型
5、Super类中添加参数为String的构造函数
class Super{
String str;
Super(){}
Super(String str){
this.str=str;
}
}
class Sub extends Super{
public Sub(){
}
public Sub(String str){
super(str);
}
}
第一份面试真题试卷做完了,你能得到多少分呢?
更多大数据行业的相关面试真题,欢迎关注微信号成都科多大数据免费获取。