博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2019/7/23 Java面试题笔记总结
阅读量:3897 次
发布时间:2019-05-23

本文共 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线程先执行,再执行主线程后续代码,因此输出为21

11.下面程序的输出结果是(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.getPriority

21.常见的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作为key

24.已有类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、LinkedList

1)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()
类.class

32.简述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/

你可能感兴趣的文章
怎么更改织梦网站logo和默认广告
查看>>
织梦系统如何插入优酷视频?
查看>>
Discuz设置特定用户组不启用验证码发帖权限
查看>>
百度云服务器 CentOS 图形界面支持
查看>>
为什么要使用R语言?历数R的优势与缺点
查看>>
[小技巧] Linux 下查询图片的大小
查看>>
Linus Torvalds说那些对人工智能奇点深信不疑的人显然磕了药
查看>>
[小技巧] svn: 不能解析 URL
查看>>
USB_ModeSwitch 介绍
查看>>
大公司和小公司的抢人战,孰胜孰负?
查看>>
通过make编译多文件的内核模块
查看>>
如何调试Javascript代码
查看>>
皮克斯宣布开源Universal Scene Description
查看>>
复盘:一个创业项目的失败之路
查看>>
阿里巴巴宣布加入Linux基金会
查看>>
为什么你应该尝试 “全栈”
查看>>
程序员什么时候该考虑辞职
查看>>
如何写一本书?
查看>>
加班能体现编程的热情吗?
查看>>
Hadley Wickham:一个改变了R的人
查看>>