本文共 8568 字,大约阅读时间需要 28 分钟。
1.调用下列方法的返回值是( B )
private static int func() { int i = 0; try { return i++; } catch (Exception e) { return i++; }finally{ return i++; } } A.0 B.1 C.2 D.3 解析: 异常结构中,紧记一点:任何时候return返回的都是“表达式”的值,而不是某个变量的值。2.关于类java.util.HashSet,下列陈述正确的是( C )
A. 集合中的元素有序. B. 集合不可变. C. 集合中的元素唯一. D. 集合中的元素通过键来存取. 解析: Set通常都是元素无序不可重复的集合,其容量是会根据元素的增加进行扩充的。3.下面哪一种说法对于线程来说不成立( C )
A. 如果对同一个 Thread 对象两次调用 start() 方法,在运行时会抛出一个异常。 B. 线程开始的顺序与它们实际运行的顺序可能不一样。 C. 如果对 Thread 对象直接调用 run() 方法,在运行时会抛出一个异常。 D. 如果在执行同步代码时对线程调用 sleep() 方法,锁不会释放。 解析: 如果对 Thread 对象直接调用 run() 方法,在运行时不会抛出异常。开始一个线程的正确方法是调用 start() 方法,这会使 run() 方法被新线程执行。 A 说法成立,多次调用同一 Thread 对象的 start() 方法会导致在运行的线程抛出IllegalThreadStateException 异常。 B 说法成立,因为线程运行的顺序是由线程调度程序决定的,与哪个线程首先开始的无必然关系。 D 说法成立,因为线程在进入 sleep 状态时不会释放它所拥有的锁。4 java.net.Socket类如何获取本地ip地址( B )
A. getInetAddress() B. getLocalAddress() C. getReuseAddress() D. getLocalPort() 解析: Socket中获取IP地址通过Socket的getInetAddress()方法即可获得Socket中的Ip地址。其中Socket中还可以通过getLocalAddress()获取Socket绑定的本地地址5.读阅下面的程序段,其中"c.getDeclaredMethods()"的作用是( C )
import java.lang.reflect.*; public class DumpMethods{ public static void main(String[] args) { try { Class c = Class.forName(args[0]); Method m[] = c.getDeclaredMethods(); for (int i = 0; i < m.length; i++) { System.out.println(m[i].toString()); } } catch (Throwable e) { System.err.println(e); } } } A. 取得类的公有方法对象 B. 取得类的所有公有方法名称 C. 取得类的所有方法对象 D. 以上选项都不正确解析:
public Method[] getMethods()返回某个类的所有公用(public)方法包括其继承类的公用方法,当然也包括它所实现接口的方法。 public Method[] getDeclaredMethods()返回类或接口声明的所有方法, 包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。当然也包括它所实现接口的方法。6.对Collection和Collections描述正确的是( B )
A. Collection是java.util包下的类,它包含有各种有关集合操作的静态方法 B. Collection是java.util包下的接口,它是List和Set集合结构的父接口 C. Collections是java.util包下的接口,它是各种集合结构的父接口 D. Collections是java.util包下的类,它包含有各种有关集合操作的对象方法 解析: Collection是java.util下的接口,它是各种集合结构的父接口; Collections是java.util下的类,它包含有各种有关集合操作的静态方法7.下面程序的输出结果是( D)
public class Test{ public static void main(String [] args){ List list=new ArrayList(); list.add(“a”); list.add(“b”); list.add(“a”); Set set=new HashSet(); set.add(“a”); set.add(“b”); set.add(“a”); System.out.println(list.size()+","+set.size()); } } A. 2,2 B. 3,3 C. 2,3 D. 3,2 解析: list存储的元素有顺序,值可以相同;set元素无顺序,值不能重复。8.下面程序的输出结果是(D )
public class TestDemo { public static String output =""; public static void foo(int i){ try{ if(i == 1){ throw new Exception(); } }catch(Exception e){ output += “2”; return ; }finally{ output += “3”; } output += “4”; }public static void main(String[] args) { foo(0); foo(1); System.out.println(output);}
}
A. 3434 B. 342 C. 34234 D. 3423 解析: 静态变量为所有该类的对象所共享 try里没有异常时不执行catch语句块,try里有异常时执行catch语句块(此时除了finally语句块,其余内容不再执行),无论有没有异常,finally语句块都执行。9.下列哪些情况可以终止当前线程(D )
A. 当一个优先级高的线程进入就绪状态时 B. 当该线程调用sleep()方法时 C. 当创建一个新线程时 D. 当该线程抛出一个异常时 解析: 优先级高的并不一定会马上执行;sleep方法会阻塞一个线程并不会终止;创建一个新的线程时也不会终止另一个线程;当抛出一个异常后程序会结束,所以线程也会被终止。10.下面程序的输出结果是(A )
public static void main(String args[]) throws InterruptedException{ Thread t = new Thread(new Runnable() { public void run() { try { Thread.sleep(2000); } catch (InterruptedException e) { throw new RuntimeException(e); } System.out.print(“2”); } }); t.start(); t.join(); System.out.print(“1”); } A. 21 B. 12 C. 21或者12 D. 以上答案都不对 解析: thread.join()把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的join()方法,直到线程A执行完毕后,才会继续执行线程B。本题中t启动,主线程让t线程先执行,再执行主线程后续代码,因此输出为2111.下面程序的输出结果是(C )
public class Test { public static void main(String[] args) { int a[] = { 0, 1, 2, 3, 4 }; int sum = 0; try { for (int i = 0; i < 6; i++) { sum += a[i]; } System.out.print(sum); } catch (java.lang.ArrayIndexOutOfBoundsException e) { System.out.print(" 数组下标越界"); } finally { System.out.print(" 程序结束"); } } } A. 10 数组下标越界 程序结束 B. 10 程序结束 C. 数组下标越界 程序结束 D. 程序结束 解析: 数组a的长度为5,而for循环循环6次,当执行sum+=a[5]时程序出现异常,被catch捕获,执行该方法体里的操作,输出“数组下标越界”;finally语句块是一定会被执行的语句块,无论是否出现异常;12.根据网络七层模型定义,以下不是应用层协议的是( C )
A. TCP B. HTTP C. FTP D. SMTP 解析: TCP是传输层协议 ,其他是应用层协议13.URI代表什么含义( C )。
A. 统一资源定位符 B. 统一资源命名符 C. 统一资源标识符 D. 企业资源定位符14.欲保证元素在集合里没有重复,并且能够按照自然顺序进行访问,以下能满足该功能的是(D)
A. java.util.Map B. java.util.Set C. java.util.List D. java.util.SortedSet 解析:Map用来存放键值对 List集合里的元素有序,允许重复,查询效率高,但是插入删除的效率低下 Set集合里的元素无序,不允许重复,查询效率低,但是插入删除的效率高 SortedSet结合了List和Set的特点,里面的元素既有序又不允许重复15.下列关于注解的说法正确的是(A )
A.@SuppressWarnings为抑制警告注解,可以带参数 B.@Override 注解修饰的方法为重载方法 C.@Deprecated注解表明该方法已废弃,不能再使用 D.注解可以用在方法上,也可以用在属性上,但不能用在类型上 解析: @SuppressWarnings为抑制警告注解,通常不带参,但也可以带参数 @Override 注解修饰的方法为重写方法 @Deprecated注解表明该方法已过时,但还是可以使用 注解可以用在方法上,也可以用在属性上,同样可以用在类型上16.关于序列化的说法不正确的是(D )
A.对象要想持久化到本地磁盘,可通过序列化接口Serializable实现 B.通过实现Serializable或Externalizable接口,对象可被序列化 C.transient修饰的成员不会被序列化 D.static修饰的成员会被序列化 解析: 通过实现Serializable或Externalizable接口,可以实现对象的序列化,如果对象的某些属性不想被序列化,通常有两种做法:一是用transient修饰成员,二是用static修饰成员。17.下列关于Array和ArrayList的描述不正确的是(B)
A.Array可以包含基本类型和对象类型,ArrayList只能包含对象类型 B.Array和ArrayList的大小都是固定的 C.相对而言,ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等 D. 对于基本类型数据,集合使用自动装箱来减少编码工作量 解析: Array大小是固定的,ArrayList的大小是动态变化的。18.下面有关Java线程的说法正确的是( B)
A.wait()方法是Thread类特有的方法 B.任何对象都有wait()方法 C.任何情况下都可以调用任何对象的wait()方法,使当前线程等待 D.只有锁对象有notify()方法,其它对象没有该方法 解析: wait方法属于Object类的方法,所以任何对象都有wait方法,而不是哪一个类独有。调用对象的wait方法只能使其所在的当前线程等待,而不是让任意线程都能等待。19.通过ObjectInputStream的readObject()方法读取数据,如何判断流结尾( D )
A.返回-1表示流结尾 B.返回null表示流结尾 C.返回2表示流结尾 D.遇到流结尾将抛出异常 解析:若文件中有若干个Object对象,你用ObjectInputStream中的readObject()去读,何时判读到结尾? 方法之一:(常用的方法)将若干个对象(数量不定)都装入一个容器中(如:ArrayList之类),然后将容器这一个对象写入就行了。读取时,只要读取一个对象(即容器对象)就行了。 方法之二:(若不想用容器),则由于数量不定,正是用EOFException来判断结束。20.下列哪个方法可以将线程标记为守护线程( B)
A.setPriority B.setDaemon C.setName D.getPriority21.常见的RuntimeException异常有( ABC )。
A.算术异常(ArithmeticException) B.空指针异常(NullPointException) C.数组下标越界异常(ArrayIndexOutOfBoundsException) D.数据库访问异常(ClassNotFoundException)22.下列关于异常的描述正确的是( BD )
A.异常结构包括try,catch,finally三部分,使用时三者缺一不可。 B.多重捕获(multi-catch)可以对多个catch语句进行优化。 C.抛出异常有两种形式:throw方法声明时抛出异常,throws手动抛出异常。 D.finally 总会被执行,除非catch中出现了System.exit(1)语句。 解析: 异常处理结构中,仅try结构是必须的,catch和finally保证至少出现一个即可;多重捕获为jdk1.7中新增,可有效替换多个catch语句;throw为手动抛出异常,throws则为方法声明时抛出异常;System.exit(1)将直接终止程序,finally也无法执行。23.下列有关HashMap和Hashtable说法正确的是(AC )
A. HashMap是线程不安全的,Hashtable是线程安全的 B. HashMap是线程安全的,Hashtable是线程不安全的 C. HashMap 可以允许null作为Key D. Hashtable 可以允许null作为key24.已有类org.lanqiao.Student,则获取Student的Class类型实例的方法是(ABD )
A. Class.forName(“org.lanqiao.Student”) B. Student.class C. Student.TYPE D. new Student().getClass() 解析: 仅对于基本数据类型对应的包装类型,获取其Class类型实例的时候,才可以用“类型.TYPE”的形式。25.下列新建一个流正确的是(ACD )
A. new BufferedWriter(new FileWriter(“a.txt”)); B. new BufferedReader(new FileInputStream(“a.dat”)); C. new GZIPOutputStream(new FileOutputStream(“a.zip”)); D. new ObjectInputStream(new FileInputStream(“a.dat”)); 解析: 新建一个流需要注意两点:类型是否匹配,IO方向是否一致。26.下面关于Java线程描述正确的是( BC )
A. 线程启动的方法是run() B. 线程启动的方法是start() C. Java中定义的线程类是java.lang.Thread D. Java中定义的线程类是java.lang.Runnable 解析: 线程需要通过start方法启动,实现线程有两种选择:一是实现Runnable接口,二是继承Thread类。27.栈和队列各自的特点是什么?请分别举一个生活化的例子加以说明。
(1).栈:先进后出的线性数据结构,数据的增(入栈)删(出栈)只能在一端操作;比如羽毛球筒,拿出或放入羽毛球,都只能从一端进行,最先放入到筒底的羽毛球必然最后被拿出来。
(2).队列:先进先出的线性数据结构,数据的增(入队)删(出队)发生在队列两端;比如排队买票,排近售票窗口的先买票,后来的只能排到队尾,等前面的人买票后才能买票。28.请分别对以下各组进行比较,阐明各自的特点和之间的区别。
1)Map、List 2)ArrayList、LinkedList1)Map: 存储映射关系;
List: 集合中的元素有序可重复,存储单个元素;2)从数据的逻辑结构角度讲,二者都是线性结构;
从数据的物理结构角度讲,ArrayList为为顺序存储结构,而LinkedList为链式存储结构; 从操作数据的角度讲:ArrayList的优势在于数据的查询,而LinkedList的优势在于数据的增删;29.简述HashSet是如何去除重复元素?
(1).调用HashCode判断桶位上是否有元素 (2).调用equals比较元素的是否相等。30.说说常见的检查时异常和运行时异常,分别各举出至少2个。
检查时异常: ClassNotFoundException FileNotFoundException IOException 运行时异常: NullPointerException ClassCastException ArithmeticException 31.反射的过程中,如果获取Class对象,请写出两种或两种以上的方式? Class.forName(“”)。 对象.getClass() 类.class32.简述ping命令 和 ipconfig命令 的作用。
(1).ping是Windows、Unix和Linux系统下的一个命令。ping也属于一个通信协议,是TCP/IP协议的一部分。利用ping命令可以检查网络是否连通,帮助我们分析和判定网络故障。 (2).ipconfig命令用于显示所有当前的TCP/IP网络配置值、刷新动态主机配置协议(DHCP)和域名系统(DNS)设置。通过ipconfig命令可以查看适配器的IP地址、子网掩码、默认网关。33.已知在D盘中有一文本文件名为lanqiao.txt,现编写代码实现把这个文本文件复制到E盘(可以不用考虑异常处理,只写核心代码)
public void copyFile(File fromFile,File toFile) throws IOException{ FileInputStream ins = new FileInputStream(fromFile); FileOutputStream out = new FileOutputStream(toFile); byte[] b = new byte[1024]; int n=0; while((n=ins.read(b))!=-1){ out.write(b, 0, n); } ins.close(); out.close();}
34.创建一个线程,在控制台不断输出当前时间,精确到时分秒,每隔一秒输出一次。
public class MyThread extends Thread{
@Override
public void run() { while(time>0){ System.out.println(“当前时间为:”+new Date().toLocaleString()); //等待1秒. try { Thread.sleep(1000); } catch (Exception e) { e.printStackTrace(); }} }public static void main(String[] args) { new MyThread().start();//启动线程}
}
转载地址:http://xiyen.baihongyu.com/