这个是之前的题目链接 JAVA面试1-3年笔试题
一、选择题(共20分,每个题5分)
1.访问修饰符作用范围由大到小是( B)。
A.private-protected-default-public B.public-protected-default-private
C.private-default-protected-public D.public-default-protected-private
2.在Java 语言中,下面接口以键-值对的方式存储对象的是( B )。
A.java.util.List B.java.util.Map
C.java.util.Collection D.java.util.Set
3.以下不是Object 类的方法的是( D )。
A.hashCode() B.finalize()
C.notify() D.hasNext()
4.有如下代码:
public class Test{
public void change(String str, char ch[]){
str = "test ok";
ch[0] = 'g';
}
public static void main(String args[]){
String str = new String("good"); char[] ch = { 'a', 'b', 'c' };
Test ex = new Test(); ex.change(str, ch);
System.out.print(str + "and ");
System.out.print(ch);
}
}
上面程序的运行结果是( B )。
A.good and abc B.good and gbc
C.test ok and abc D.test ok and gbc
二、填空题(共20分,每个题5分)
1.Math.round(12.5)的返回值等于( 13),Math.round(-12.5)的返回值等于( -12)。
2.有如下程序:
String str1=“hello world”;
String str2=“hello”+newString(“world”);
System.out.println (str1==str2);
那么程序的运行结果是( false )。
3.在 Java 语言中,基本数据类型包括( 浮点型float、double )、字符类型( char)、布尔类型 boolean 和数值类型(byte、short、int、long)。
4.字符串分为两大类:一类是字符串常量( String );另一类是字符串变量( StringBuffer )。
三、简答题
1.接口和抽象类有什么区别?(10分)
接口与抽象类的相同点如下:
1)都不能被实例化。
2)接口的实现类或抽象类的子类都只有实现了接口或抽象类中的方法后才能被实例化。
接口与抽象类的不同点如下:
1)接口只有定义,不能有方法的实现,而抽象类可以有定义与实现,即其方法可以在抽象类中被实现。
2)实现接口的关键字为 implements,继承抽象类的关键字为 extends。一个类可以实现多个接口,但一个类只能继承一个抽象类,因此,使用接口可以间接地达到多重继承的目的。
2.实现多线程的方法有哪几种?(10分)
1) 实现 Runnable 接口,并实现该接口的 run()方法。
2)继承 Thread 类,重写 run 方法。
3)实现 Callable 接口,重写 call()方法。
3.利用递归方法求 6!(15分)
public class Test{
public static long fac(int n){
if(n > 1)
return (n * fac(n - 1));
else
return 1;
}
public static void main(String args[]){
System.out.println(fac(6));
}
}
程序的运行结果为
720
4.用Java 语言实现一个观察者模式。(15分)
观察者模式(也被称为发布/订阅模式)提供了避免组件之间紧密耦合的另一种方法,它将观察者和被观察的对象分离开。在该模式中,一个对象通过添加一个方法(该方法允许另一个对象,即观察者注册自己)使本身变得可观察。当可观察的对象更改时,它会将消息发送到已注册的观察者。这些观察者收到消息后所执行的操作与可观察的对象无关,这种模式使得对象可以相互对话,而不必了解原因
例如,用户界面(同一个数据可以有多种不同的显示方式)可以作为观察者,业务数据是被观察者,当数据有变化后会通知界面,界面收到通知后,会根据自己的显示方式修改界面的显示。面向对象设计的一个原则是:系统中的每个类将重点放在某一个功能上,而不是其他方面。一个对象只做一件事情,并且将它做好。观察者模式在模块之间划定了清晰的界限,提高了应用程序的可维护性和重用性。设计类图如图 1 所示。