您好,欢迎访问三七文档
JAVA编程语言考试时间:120分钟姓名:得点:一、判断题(15*1分=15分)若正确,打“√”。错误打“X”(x)创建新的类对象用关键字new,回收无用的类对象使用关键字free。Java有垃圾回收制度,对于无用的类对象不需程序员手动清除。(x)使用赋值号(等号)相当于创建了一个各属性与赋值实例相同的新实例。没有,只是把原来实例的内存地址给了这个实例变量,两个实例变量对应的实例都是同一个。(v)类及其属性、方法可以同时有一个以上的修饰符来修饰。访问控制修饰public,抽象修饰abstract,最终修饰final(v)最终类不能派生子类,最终方法不能被覆盖。此处考察final的用法,必须记住。(x)子类要调用父类的方法,必须使用super关键字。如果这个方法在子类中被覆盖后,需要用super调用父类的方法,否则就是调用从父类继承过来的方法(x)一个Java类可以有多个直接父类。Java只允许一个直接父类,直接父类可以有它的直接父类。实现多重继承需要用到接口。(v)数组声明并不为数组元素分配空间。数组元素的空间是有数组元素的实例创建时,分配(x)如果p是父类的实例,而c是子类的实例,则语句c=p是正确的。子类对象可以直接赋值给父类对象,但是父类对象付给子类对象需要强制转换c=(子类名)p(v)用“+”可以实现String类的拼接。还可以使用String对象的concat方法。(x)使用方法length()可以获得String或数组的长度。数组长度是用length属性,String字符串长度是用里面的length()方法。(v)Java中数组的元素可以是简单数据类型的量,也可以是某一类的对象。数组创建时会对元素付初期值,简单类型如int,付0,类的对象如String,付null(v)执行完以下代码int[]x=newint[25];后x[24]为0简单数据类型初期化的值为0(v)Java中是区分大小写的。(v)Vector类中的对象不能是简单数据类型。ArrayList和Vector一样,都是可变数组的容器。ArrayList会比Vector快,他是非同步的,如果设计涉及到多线程,还是用Vector比较好一些importjava.util.*;/***演示Vector的使用。包括Vector的创建、向Vector中添加元素、从Vector中删除元素、*统计Vector中元素的个数和遍历Vector中的元素。*/publicclassVectorDemo{publicstaticvoidmain(String[]args){//Vector的创建//使用Vector的构造方法进行创建Vectorv=newVector(4);//向Vector中添加元素//使用add方法直接添加元素v.add(Test0);v.add(Test1);v.add(Test0);v.add(Test2);v.add(Test2);//从Vector中删除元素v.remove(Test0);//删除指定内容的元素v.remove(0);//按照索引号删除元素//获得Vector中已有元素的个数intsize=v.size();System.out.println(size:+size);//遍历Vector中的元素for(inti=0;iv.size();i++){System.out.println(v.get(i));}}}(x)设x=2,则表达式(x++)*3的值是9。6,++i(前缀++)在使用i之前,使i的值加1,因此执行完++i后,整个表达式和i的值均为i+1;i++(后缀++)在使用i之后,使i的值加1,因此执行完i++后,整个表达式的值为i,而i的值变为i+1。--i在使用i之前,使i的减1,因此执行完--i后,整个表达式和i的值均为i-1;i--在使用i之后,使i的减1,因此执行完i--后,整个表达式的值为i,而i的值变为i-1。二、判断改错题(5*3分=15分)(不符合编码规约的地方不作为错误)判断下面的源代码片断是否有错,指出错在哪里并改正;若正确,打“√”。1.publicclassMyClass{privateintvar=100;publicstaticintgetVar(){returnvar;var不是静态属性,1.去掉getVar()的static}}2.publicclassMyClass{intdata;voidMyClass(intd){//虽然运行正确,但是会有warn输出data=d;}}3.publicclassMyMain{publicstaticvoidmain(Stringargs[]){System.out.println(MyClass1.data);data不是静态属性1.加上static或者用newMyClass1().data}}classMyClass1{intdata=10;}4.classA1{privateintmine;}classchildextendsA1{intgetMine(){returnmine;mine不可见,改为protected或public}}5.publicstaticvoidmain(Stringargs[]){try{charch=(char)System.in.read();Exception/IOException顺序不对}catch(Exceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}三、分析题(2*2分+4分=8分)(1)阅读以下源代码,并给出执行结果:classParent{voidprintMe(){System.out.print(parent);}}classChildextendsParent{voidprintMe(){System.out.print(child);}voidprintAll(){super.printMe();this.printMe();printMe();}}publicclassB2{publicstaticvoidmain(Stringargs[]){ChildmyC=newChild();myC.printAll();}}输出结果为:parentchildchild。Super指代父类,this指代本类,同时不加this修饰时,调用的是被覆盖的方法。(2)publicstaticvoidmain(Stringargs[]){...StringBuffersb=newStringBuffer(123);call(sb)System.out.print(sb.toString());...}voidcall(StringBuffersb){sb.append(abc);sb=newStringBuffer(xyz);}程序中System.out.print(sb.toString())输出的结果是:123abc。Java的参数传递,对于简单变量是传值,复杂数据类型的变量是传地址。同时对于赋值后,是传递进来的值没有影响。(3)在下表中填写正确的存取权限(打勾)。A.子类包内包外privatepublicvvvprotectedvv缺省定义vprivateprotectedv三、选择题:(5*2分=10分)1)HashMapmap;map.put(key,value)方法,如果key在原hashMap中已经存在,结果会怎么样?BA)保留原来value,B)更新value,C)新的value和老的value并存D)抛出ExceptionB,HashMap如果存储相同key的值,会进行替换原有值。2)ListlistA=listB.subList(from,to);如果用listA.set(index,object)改变了listA的值,listB的值会随着变化吗?A)是B)否C)不一定A,因为List里面保存的对象实际是地址,而不会保存对象,而不管如何依据原有List创建新的对象,都是赋值原有的地址。subList(intfromIndex,inttoIndex)返回列表中指定的fromIndex(包括)和toIndex(不包括)之间的部分视图。(如果fromIndex和toIndex相等,则返回的列表为空)。返回的列表由此列表支持,因此返回列表中的非结构性更改将反映在此列表中,反之亦然。返回的列表支持此列表支持的所有可选列表操作。3)ListlistA=newArrayList(listB);如果用listA.set(index,object)改变了listA的值,listB的值会随着变化吗?A)是B)否C)不一定B,因为List里面保存的对象实际是地址,而不会保存对象,原油位置的对象地址改变了。不会影响其他位置的对象。4)ListlistA=newArrayList(listB);如果用((StringBuffer)listA.get(index)).append(xyz)改变了listA里的一个StringBuffer对象的值,listB的相应的对象的值会随着变化吗?A)是B)否C)不一定A因为List里面保存的对象实际是地址,而不会保存对象5)从代码片断看,输出的setA.size()等于多少?BSetsetA=newHashSet();Stringsa=abc;Stringsb=abc;setA.add(sa);setA.add(sb);System.out.println(setA.size());A)0B)1C)2D)不确定B,HashSet实现了Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。此类不允许重复数据。四、问答题:(10*3分=30分)1.String类和StringBuffer类的主要差别是什么?写出互相间转换所使用的函数。String是不可变的字符串。StringBuffer是可变的字符串。他们的方法不同。StringBuffera=newStringBuffer(“”);Stringb=a.toString();2.implements和extends有什么区别?分别在什么场合使用?、implements是实现Interface,可以同时实现多个。必须实现Interface中定义的方法。在实现类似“多重继承”时使用。extends是实现类的继承,只能继承一个类。必须实现父类的抽象方法(如果有的话)。在继承时使用。3.java怎么实现多继承?接口4.override和overload有什么不同?Override是指父类和子类之间方法的继承关系,这些方法有着相同的名称和参数类型。Overload是指同一个类中不同方法(可以在子类也可以在父类中定义)间的关系,这些方法有着相同的名称和不同的参数类型。5.怎么知道数组的长度?怎么知道一个ArrayList的长度?怎么知道一个String的长度?length属性,.size()方法,.length()方法6.throw和throws有什么不同?throws用于方法声明中,声明一个方法会抛出哪些异常。而throw是在方法体中实际执行抛出异常的动作。如果你在方法中throw一个异常,却没有在方法声明中声明之,编译器会报错。注意Error和RuntimeException的子类是例外,无需特别声明。7.java.util.Collection和java.util.Collections分别是什么?Collection和Collections的区别.Collection是集合类的上级接口,继承与他的接口主要有Set和List.Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。8.java.io.InputStream和java.io.Reader之间有什么区别和关系?InputStre
本文标题:JAVA试卷答案
链接地址:https://www.777doc.com/doc-2879004 .html