Java期末考试习题库(选择题+填空题+改错题学生)_第1页
Java期末考试习题库(选择题+填空题+改错题学生)_第2页
Java期末考试习题库(选择题+填空题+改错题学生)_第3页
Java期末考试习题库(选择题+填空题+改错题学生)_第4页
Java期末考试习题库(选择题+填空题+改错题学生)_第5页
已阅读5页,还剩17页未读, 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java期末考试习题库(选择题+填空题+改错题学生)一、单项选择题(共20小题,每小题2分,共40分,每小题只有一个正确选项)1.Java语言的跨平台特性是依靠以下哪个组件实现的A.JDKB.JREC.JVMD.Javadoc2.下列选项中,哪一个是合法的Java标识符A.123varB._userNameC.#classD.void3.如下Java代码执行后,变量b的值是inta=5;intb=++a+a++;A.10B.11C.12D.134.以下关于面向对象封装特性的描述,说法错误的是A.封装可以提高数据的安全性B.封装可以实现代码复用,降低维护成本C.封装可以隐藏内部实现细节,只对外暴露必要接口D.封装可以提高程序的运行效率5.以下关于Java构造方法的描述,说法正确的是A.构造方法必须与类同名,允许声明void返回值类型B.一个类只能定义一个构造方法C.构造方法会在创建对象时被自动调用D.子类必须显式调用父类的构造方法6.以下关于Java继承特性的描述,说法正确的是A.Java语言支持类的多继承,一个类可以继承多个父类B.子类继承父类后,可以直接访问父类所有成员变量和方法C.被final关键字修饰的类不能被其他类继承D.父类的静态方法可以被子类重写7.Java多态分为编译时多态和运行时多态,以下属于编译时多态的是A.方法重载B.方法重写C.接口实现D.抽象方法重写8.以下关于抽象类和接口的描述,说法正确的是A.抽象类可以定义构造方法,接口不能定义构造方法B.抽象类中只能定义抽象方法,不能定义普通成员方法C.抽象类和接口都不能实例化,因此没有区别D.一个类只能继承一个抽象类,不能实现多个接口9.执行如下Java代码,一共会创建几个String对象Stringstr=newString("hello");A.1B.2C.3D.410.以下关于StringBuilder和StringBuffer的区别,描述正确的是A.StringBuilder是线程安全的,StringBuffer是线程不安全的B.StringBuffer是线程安全的,StringBuilder是线程不安全的C.两者的运行性能完全一致D.StringBuilder的对象长度不可变,StringBuffer长度可变11.以下异常类型中,属于运行时异常的是A.IOExceptionB.NullPointerExceptionC.SQLExceptionD.ClassNotFoundException12.Java集合框架中,以下哪个集合是有序、可重复的集合A.HashSetB.ArrayListC.HashMapD.TreeSet13.以下关于Java泛型的作用描述,说法错误的是A.提高代码的复用性B.在编译阶段保证类型安全,避免运行时类型转换异常C.消除代码中的强制类型转换D.泛型可以提高程序的运行性能14.以下JavaIO流类型中,属于字符输出流父类的是A.InputStreamB.OutputStreamC.ReaderD.Writer15.以下关于Java多线程创建方式的描述,说法错误的是A.可以通过继承Thread类创建线程B.可以通过实现Runnable接口创建线程C.可以通过实现Callable接口创建线程D.继承Thread类和实现Runnable接口都支持返回执行结果、抛出异常16.以下关于synchronized关键字的使用,说法错误的是A.synchronized可以修饰实例方法B.synchronized可以修饰静态方法C.synchronized可以修饰代码块D.synchronized可以修饰类17.Java中,以下哪个关键字修饰的成员变量属于类层面,被所有实例对象共享A.privateB.staticC.finalD.protected18.以下数据类型中,Java的switch语句不支持的是A.intB.String(JDK1.7及以上)C.booleanD.枚举enum19.Java中,要跳出当前的多重循环,以下哪种方式是正确的A.直接使用break语句B.直接使用continue语句C.使用return语句D.使用带标签的break语句20.以下关于Java垃圾回收机制的描述,说法正确的是A.Java程序必须手动编写代码回收不再使用的内存B.JVM会自动回收内存中不再被任何引用指向的对象内存C.调用System.gc()方法会立刻回收所有垃圾对象D.Java垃圾回收机制可以解决所有内存泄漏问题二、填空题(共10小题,每空1分,共15分)1.Java源文件经过编译器编译后,生成的字节码文件的后缀名是________________。2.面向对象程序设计的三大基本特征是封装、________________、多态。3.Java中,子类可以通过________________关键字调用父类的构造方法、父类被重写的方法和父类的成员变量。4.Java中,________________关键字可以用来修饰类和方法,作用是阻止类被继承、阻止方法被重写。5.被________________关键字修饰的成员变量和方法属于类,不依赖对象实例,被所有实例共享。6.Java中String类的对象是________________(填“可变”或“不可变”),任何对String对象的修改都会生成新的String对象。7.Java集合框架中,________________接口是所有单列集合的根接口,其中继承该接口的________________子接口定义了有序、可重复的集合规范,________________接口用于存储键值对映射关系。8.Java中所有异常类型的根类是________________,运行时异常的根类是________________。9.JDK1.5之后引入的________________接口,创建线程时可以支持获取线程执行的返回结果,也允许抛出异常。10.Java垃圾回收机制只会回收________________对象占用的内存,不会回收仍然被有效引用指向的对象内存,也不会回收方法区中的静态资源泄漏。三、改错题(共5小题,每小题9分,共45分,请找出下列代码中的错误,说明错误原因,并写出正确代码)1.代码如下:publicclassTestDataType{publicstaticvoidmain(String[]args){inta=10;longb=10000000000;System.out.println(a+b);}}2.代码如下:abstractclassAnimal{publicvoideat();}classDogextendsAnimal{}3.代码如下:publicclassTestString{publicstaticvoidmain(String[]args){Stringstr="helloworld";str.toUpperCase();System.out.println(str);}}程序员预期输出为大写的HELLOWORLD,请修改代码。4.代码如下:publicclassTestArray{publicstaticvoidmain(String[]args){int[]arr=newint[5]{1,2,3,4,5};for(inti=0;i<=arr.length;i++){System.out.println(arr[i]);}}}5.多线程卖票程序代码如下,当前代码存在线程安全问题,多个线程会卖出同一张票,甚至出现卖出0号票或负号票的情况,请找出问题并修改:classTicketimplementsRunnable{privateintcount=10;@Overridepublicvoidrun(){while(count>0){try{Thread.sleep(100);}catch(InterruptedExceptione){e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"卖出第"+count+"张票");count--;}}}publicclassTicketTest{publicstaticvoidmain(String[]args){Ticketticket=newTicket();newThread(ticket,"窗口1").start();newThread(ticket,"窗口2").start();newThread(ticket,"窗口3").start();}}参考答案:一、单项选择题1.C2.B3.C4.D5.C6.C7.A8.A9.B10.B11.B12.B13.D14.D15.D16.D17.B18.C19.D20.B二、填空题1..class2.继承3.super4.final5.static6.不可变7.Collection、List、Map8.Throwable、RuntimeException9.Callable10.不可达(或不再被引用)三、改错题1.错误分析:Java中整数字面量默认是int类型,10000000000已经超出int类型的最大范围(int最大为2^31-1=2147483647),直接写会编译报错。正确代码:publicclassTestDataType{publicstaticvoidmain(String[]args){inta=10;longb=10000000000L;System.out.println(a+b);}}2.错误分析:①抽象类中没有方法体的方法是抽象方法,必须添加abstract关键字修饰;②非抽象子类继承抽象父类后,必须实现父类所有的抽象方法,否则编译报错。正确代码:abstractclassAnimal{publicabstractvoideat();}classDogextendsAnimal{@Overridepublicvoideat(){System.out.println("小狗啃骨头");}}3.错误分析:String类的对象是不可变对象,toUpperCase()方法不会修改原对象的值,只会返回一个新的全大写String对象,因此原代码输出仍然是小写的helloworld。正确代码:publicclassTestString{publicstaticvoidmain(String[]args){Stringstr="helloworld";str=str.toUpperCase();System.out.println(str);}}4.错误分析:①Java数组静态初始化时,如果已经给出了初始化元素列表,不需要再显式指定数组长度,编译报错;②数组下标范围是0到length-1,循环条件i<=arr.length会导致最后访问下标为5的元素,超出数组范围,运行时抛出ArrayIndexOutOfBoundsException数组下标越界异常。正确代码:publicclassTestArray{publicstaticvoidmain(String[]args){int[]arr=newint[]{1,2,3,4,5};for(inti=0;i<arr.length;i++){System.out.println(arr[i]);}}}5.错误分析:三个线程共享同一个Ticket实例的count变量,对count的判断、输出、自减操作不是原子性操作,多个线程并发修改时会出现线程安全问题,导致重复售票、售出非法票。需要添加同步机制保证同一时间只有一个线程执行售票逻辑。正确代码(添加synchronized同步锁,也可以用Lock锁实现):classTicketimplementsRunnable{privateintcount=10;@Overridepublicsynchronizedvoidrun(){while(count>0){try{Thread.sleep(100);}catch(InterruptedExceptione){e.printStackTrace();}Sy

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论