您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > JavaSE期末总测试题
JavaSE期末总测试注意:直接将自己的答案编写在每一道试题的下面,代码要规范,最好使用不同背景加注,提交试卷的时候文件的命名格式如:”姓名.doc”一、简答题1.简述面向对象的特征有哪些方面?三大特征:封装、继承、多态1、封装:在开发中,实体类我们一般都会封装起来,隐藏对象的属性和实现细节,仅对外提供公共访问方式。1)私有化属性2)根据需求设置set、get方法3)提供公共方法对其访问2、继承:1)父类的由来:多个类不断向上抽取共性内容而来的2)只支持单继承,但支持多重继承,即A继承B,B继承C,C继承D3)为什么不支持多继承,当两个父类中有相同的功能时,子类方法调用该功能时该运行哪一个呢?4)当类与类之间存在着所属关系时,才具备了继承的前提5)子类覆盖父类时,必须要保证子类方法的权限大于等于父类方法的权限6)覆盖时,要么都静态,要么都不静态3、多态:1)体现:父类的引用或者接口的引用指向了自己的子类对象,即父类可以调用子类中复写过的方法。//Animala=newCat();2)前提:必须要有关系,如继承、实现;通常会有覆盖操作3)弊端:当父类引用指向子类对象时,只能访问父类中含有的方法2.简述StringBuffer和StringBuilder的区别?(10分)StringBuffer:字符串缓冲区,从JDK1.0开始的,是一个线程安全的存储字符容器。如果频繁修改字符串的内容,建议使用字符串缓冲类StringBuffer。StringBuilder:字符串缓冲区,从JDK1.5开始的,非线程安全,但效率高。单线程操作,使用StringBuilder效率高;多线程操作,使用StringBuffer安全。3.在main方法中的执行代码如下:Strings1=abc;Strings2=abc;System.out.println(s1==s2);请写出以上代码的输出的结果,分析输出结果的原因。(10分)打印:trueString对象可以直接使用字面量赋值,而且多个String对象指向同一个字面量时,在堆内存当中只有一个java对象。如果调用String构造函数给String类型的引用赋值,那么每调用一次构造函数,在堆内存当中就会生成一个string对象。所以,如果s1、s2都是同一个字面量赋值,那么无论是用==还是equals(),都返回true。如果s1、s2使用String构造函数生成对象,并且传入的字面量相等,那么用==返回false,用equals()返回true。4.多线程有几种实现方法?同步有几种实现方法?(10分)两大方法:extendThread类、implementsRunnable接口1、继承Thread类,由子类腹泻run()方法1)自定义子类继承Thread类2)将让线程运行的代码存储到run()方法中3)通过创建Thread的子类对象,创建线程对象4)通过子类调用start()方法,开启线程2、实现Runnable接口1)自定义类实现Runnable接口2)将让线程运行的代码存储到run()方法中3)创建Thread类线程对象4)创建自定义类对象,将自定义类对象作为实际参数传递给Thread类的构造函数(为了让线程对象明确要运行的run方法所属的对象)5)调用Thread对象的start方法开启线程,并运行Runnable接口中的run方法synchronized,wait与notify都可以实现同步5.列出Java你所知道的集合体系,并简述各自的特点.(10分)集合:用于存储数据的容器特点:集合用于存储对象;集合是可变长度的集合与数组的区别:1)数组是固定长度的,集合是可变长度的2)数组可以存储基本数据类型,也可以存储引用数据类型;集合只能存储引用数据类型3)数组存储的元素是同一个类型的元素;集合存储的对象可以是不同数据类型的对象单列集合:Collection,根接口List:有序,元素有索引,元素可以重复Set:无序,不可以存储重复元素,必须保证元素的唯一性ArrayList:底层的数据结构是数组,线程不同步,非线程安全,查询速度快,增删慢;LinkedList:底层的数据结构是链表,线程不同步,非线程安全,查询速度慢,增删快;Vector:底层的数据结构是数组,线程同步,线程安全,查询、增删都非常慢HashSet:底层是哈希表,线程不同步,非线程安全,无序、高效LinkedHashSet:有序,HashSet的子类TreeSet:底层的数据结构是二叉树,线程不同步,非线程安全,对Set集合中的元素排序双列集合:Map,根接口HashTable:底层是哈希表数据结构,线程同步,不可以存储null键、null值HashMap:底层是哈希表数据结构,线程不同步,可以存null键、null值,替代了HashTableTreeMap:底层是二叉树结构,可以对map集合中的键值进行指定顺序的排序6.集合与数组的区别是什么呢?(10分)1)集合是可变长度的,数组是固定长度的2)集合只能存储对象的引用,数组既可以存储对象的引用又可以存储基本数据类型3)集合可以存储不同数据类型的元素,数组只能存储相同数据类型的元素7.Collection和Collections的区别?(10分)Collection是java.util下的接口,是各种集合结构的父接口,继承于它的接口主要有Set、List,提供了一些关于集合的一些操作,如插入、删除、判断一个元素是否为其成员、遍历等操作。Collections是java.util下的类,是集合的帮助类,提供一些静态方法,实现对集合的查找、排序、替换、线程安全化等操作。8.HashSet是如何保证元素唯一性的。(10分)HashSet底层数据结构是哈希表,不存入重复元素,线程不同步,无序、高效。HashSet集合保证元素的唯一性,是通过元素的hashCode方法和equals方法完成的。当元素的hashCode值相同时,才判断元素的equals是否为true,如果为true,则视为相同元素,不存储;如果为false,则存储。如果hashCode值不同,则不判断equals,从而提高对象的比较速度。9.简述ArrayList与Vector的区别,ArrayList与LinkedList的区别(10分)ArrayList与Vector底层数据结构都是Object数组,ArrayList非线程安全;Vector线程安全,但查询、增删都非常慢。ArrayList:底层数据结构是Object数组,线程不同步,非线程安全,查询快,增删慢LinkedList:底层数据结构是链表,线程不同步,非线程安全,查询慢,增删快如果我们需要保留存储顺序,并且保留重复元素的时候,使用List;如果查询比较多,则使用ArrayList;如果存取比较多,则使用LinkedList;如果要线程安全,则使用Vector。二、编程题(写出代码思路,伪代码)1.使用TCP,模拟一下QQ的信息交流功能,客户端,服务端(10分)packagetest;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.OutputStreamWriter;importjava.net.ServerSocket;importjava.net.Socket;publicclassTest22{/*建立tcp的服务器接受客户端的连接,传声一个Socket获取到Socket的输入流对象获取到Socket输出流的对象获取键盘的输入流对象读取客户端的数据关闭资源*/publicstaticvoidmain(String[]args)throwsIOException{ServerSocketserverSocket=newServerSocket(8088);Socketsocket=serverSocket.accept();BufferedReadersReader=newBufferedReader(newInputStreamReader(socket.getInputStream()));OutputStreamWritersOut=newOutputStreamWriter(socket.getOutputStream());BufferedReaderkeyReader=newBufferedReader(newInputStreamReader(System.in));Stringline=null;while((line=sReader.readLine())!=null){System.out.println(服务端接收到的信息:+line);System.out.println(请输入回送给客户端);line=keyReader.readLine();sOut.write(line+\r\n);sOut.flush();}serverSocket.close();}}客户端类packagetest;importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.OutputStreamWriter;importjava.net.InetAddress;importjava.net.Socket;importjava.net.UnknownHostException;publicclassTest22send{publicstaticvoidmain(String[]args)throwsIOException,IOException{//建立tcp的客户端服务//获取socket的输出对象//获取socket的输入流对象//获取键盘的输入流对象,读取数据//不断的读取键盘录入数据,然后把数据写出//flush刷一把//...Socketsocket=newSocket(InetAddress.getLocalHost(),8088);OutputStreamWritersOut=newOutputStreamWriter(socket.getOutputStream());BufferedReadersReader=newBufferedReader(newInputStreamReader(socket.getInputStream()));BufferedReaderkeyReader=newBufferedReader(newInputStreamReader(System.in));Stringline=null;while((line=keyReader.readLine())!=null){sOut.write(line+\r\n);sOut.flush();line=sReader.readLine();System.out.print(服务器送回的数据是:+line);}socket.close();}}2.编写一个方法实现拷贝任意文件的功能,要求效率最高。(10分)packagetest;importjava.io.BufferedInputStream;importjava.io.BufferedOutputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.util.Scanner;publicclassCopyFile{publicstaticvoidmain(String[]args)throwsIOException{System.out.print(请输
本文标题:JavaSE期末总测试题
链接地址:https://www.777doc.com/doc-2880681 .html