Java高级题库v14讲解.docx
《Java高级题库v14讲解.docx》由会员分享,可在线阅读,更多相关《Java高级题库v14讲解.docx(161页珍藏版)》请在冰豆网上搜索。
Java高级题库v14讲解
试题库模板
第一单元类加载和反射
(一)
题号
试题
1
Class.forName(className,true,currentLoader)该方法返回值类型是(A)
A.Class
>
B.Set
>
C.String
D.List
>
2
创建Class对象有三种方式,如下正确的是:
(ABC)
A.Class.forName("全限定名");
B.类.class
C.对象.getClass();
D.newClass();
3
反射机制指的是程序在运行时能够获取自身的信息。
在java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有信息。
(√)
4
反射机制的优点就是可以实现动态创建对象和编译,体现出很大的灵活性(√)
5
Java的反射没有什么缺点,而且灵活,应该大量使用(×)
6
通过反射技术我们可以得到:
(ABC)
A.构造器相关信息
B.属性相关信息
C.方法的修饰符、返回类型、名称、参数列表、返回值。
D.方法体内容
7
通过反射技术我们可以得到构造器、属性、方法的相关信息。
(√)
8
下面那个是反射的关键字?
(A)
A.ReflectionB.Thread
C.InterfaceD.Collection
9
Reflectiond的起源是?
(B)
A.ObjectB.Class
C.FieldD.Method
10
反射机制的优点就是可以实现动态创建对象和编译,体现出很大的灵活性(对)
11
动态获取类的信息,以及动态调用对象的方法的功能来自于线程(错)
1.1.1了解反射概述
12
java的反射机制导入的是java.util包内(错)
1.1.1了解反射概述
13
何谓反射机制?
根据网文,java中的反射机制可以如此定义:
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
1.1.1了解反射概述
14
在反射中,newInstance()方法的作用的是:
(AD)
A.创建对象
B.声明对象
C.初始化对象
D.开辟内存空间
1.1.4使用反射分析对象(属性,方法,构造器调用)
15
newInstance()的创建对象时,要调用对象的无参构造器。
(√)
1.1.4使用反射分析对象(属性,方法,构造器调用)
16
如果对象没有无参构造器,newInstance()方法是不能使用的。
(√)
1.1.4使用反射分析对象(属性,方法,构造器调用)
第二单元类加载和反射
(二)
题号
试题
题型
难度
第节课内容知识点
1
类加载过程中经历那些阶段?
类从被加载到虚拟机内存中开始,直到卸载出内存为止,它的整个生命周期包括了:
加载、验证、准备、解析、初始化、使用和卸载 这7个阶段
七
▲▲▲▲
2.1.2类加载过程
2
类在加载过程中,虚拟机需要做那些事情?
1、 通过一个类的全限定名来获取定义此类的二进制字节流。
2、 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。
3、 在Java堆中生成一个代表这个类的java.lang.Class对象,作为方法区这些数据的访问入口。
七
▲▲▲
2.1.2类加载过程
3
类的验证阶段主要分几步?
文件格式验证、元数据验证、字节码验证和符号引用验证。
七
▲▲
2.1.2类加载过程
4
代码分析题,请说出类加载过程?
classSingleTon{privatestaticSingleTonsingleTon=newSingleTon();publicstaticintcount1;publicstaticintcount2=0;
privateSingleTon(){count1++;count2++;}
publicstaticSingleTongetInstance(){returnsingleTon;}
}
publicclassTest{publicstaticvoidmain(String[]args){SingleTonsingleTon=SingleTon.getInstance();System.out.println("count1="+singleTon.count1);System.out.println("count2="+singleTon.count2);}
}
答:
1:
SingleTonsingleTon=SingleTon.getInstance();调用了类的SingleTon调用了类的静态方法,触发类的初始化
2:
类加载的时候在准备过程中为类的静态变量分配内存并初始化默认值singleton=nullcount1=0,count2=0
3:
类初始化化,为类的静态变量赋值和执行静态代码快。
singleton赋值为newSingleTon()调用类的构造方法
4:
调用类的构造方法后count=1;count2=1
5:
继续为count1与count2赋值,此时count1没有赋值操作,所有count1为1,但是count2执行赋值操作就变为0
八
▲▲▲▲▲
2.1.2类加载过程
5、
Java虚拟机中有几种类加载器?
BootStrap,ExtClassLoader,AppClassLoader
七
▲▲
2.1.4加载器
第三单元多线程
(一)
题号
试题
题型
难度
第节课内容知识点
1
下列说法中错误的一项是(A)
A.线程就是程序
B.线程是一个程序的单个执行流
C.多线程是指一个程序的多个执行流
D.多线程用于实现并发
二
▲
3.1.1了解线程和进程
2
下列说法中正确的是(BCD)
A.线程就是程序
B.线程是一个程序的单个执行流
C.多线程是指一个程序的多个执行流
D.多线程用于实现并发
三
▲
3.1.1了解线程和进程
3
用(currentThread())可以得到主线程。
//返回对当前正在执行的线程对象的引用。
(Thread)
一
▲▲
3.2线程的创建和启动
4
通过继承Runnable类或实现Thread接口都能创建多线程类(×)
四
▲▲
3.2线程的创建和启动
5
一个进程可以同时包含多个线程(√)
四
▲▲
3.1.1了解线程和进程
6
多线程程序设计的含义是可以将一个程序任务分成几个并行的线程 (√)
四
▲▲
3.1.1了解线程和进程
7
程序开发者必须创建一个线程去管理内存的分配。
(×)
四
▲
3.1.1了解线程和进程
8
C和Java都是多线程语言。
(错)
四
▲▲
3.1线程概述
9
线程间调用涉及的开销比进程间通信多(错)
四
▲▲
3.1.1了解线程和进程
10
掌握创建线程的两种方式,正确的是:
(AB)
A.实现Runnable接口B.继承Thread类
C.继承Runnable类D.实现Thread接口
三
▲▲
3.2线程的创建和启动
11
线程是操作系统中一个程序及其数据在处理机上顺序执行时所发生的活动。
(×)
四
▲
3.1线程概述
12
下列说法中正确的是(ABC)
A.一个线程是一个Thread类的实例
B.线程从传递给纯种的Runnable实例run()方法开始执行
C.线程操作的数据来自Runnable实例
D.新建的线程调用start()方法就能立即进入运行状态
三
▲▲
3.2线程的创建和启动
13
在线程的Thread对象上调用start()方法,而不是run()或者别的方法。
(√)
四
▲▲
3.2线程的创建和启动
14
多进程在操作系统中同时运行多个任务(程序)。
(√)
四
▲▲
3.1.1了解线程和进程
15
多线程在同一应用程序中有多个顺序流同时执行。
(√)
四
▲▲
3.1.1了解线程和进程
16
实现线程体的方式除了继承Thread类,还可以实现(B)接口。
A、Cloneable
B、Runnable
C、Iterable
D、Serializable
二
▲▲
3.2线程的创建和启动
17
创建线程的方式有哪些?
线程的入口方法是?
启动线程的方法是
答案:
继承Thread实现Runnable,入口是run启动方法是start。
七
▲▲▲
3.2线程的创建和启动
18
下列关于线程的说法以中,正确的一项是(ABC)
A.由同一类创建的多个线程都同时运行结束
B.创建线程只能通过继承java.lang.Thread类
C.调用suspend()方法暂停的一个线程将不会再被重新执行
D.程序的执行完毕与超级线程(daemonthreads)无关
三
▲▲
3.2线程的创建和启动
19
下列说法中错误的一项是(D)
A.一个线程是一个Thread类的实例
B.线程从传递给纯种的Runnable实例run()方法开始执行
C.线程操作的数据来自Runnable实例
D.新建的线程调用start()方法就能立即进入运行状态
二
▲▲
3.2线程的创建和启动
20
编译运行下面的代码会发生什么?
答案:
D
publicclassBgroundextendsThread{
publicstaticvoidmain(Stringargv[])
{
Bgroundb=newBground();
b.run();
}
publicvoidstart()
{
for(inti=0;i<10;i++){
System.out.println("Valueofi="+i);
}}}
A.编译错误,Thread类中的run方法没有定义
B.运行时错误,Thread类中的run方法没有定义
C.编译无错,打印0到9.
D.编译无错,不打印任何值
二
▲▲
3.2线程的创建和启动
21
下列方法中可以用来创建一个新线程的是(BC)
A、实现java.lang.Runnable接口并重写start()方法
B、实现java.lang.Runnable接口并重写run()方法
C、继承java.lang.Thread类并重写run()方法
D、实现java.lang.Thread类并重写start()方法
三
▲▲
3.2线程的创建和启动
22
在Java程序中,run()方法的实现有两种方式:
实现(Runnable)接口和继承(Thread)类。
一
▲▲
3.2线程的创建和启动
23
启动一个线程是用run()还是start()?
答:
启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。
这并不意味着线程就会立即运行。
run()方法可以产生必须退出的标志来停止一个线程。
六
▲▲
3.2线程的创建和启动
24
能够创建线程的方法,以下说法正确的是(D)
A.继承Runnable
B.实现Thread
C.实例化Runnalbe
D.没有正确答案
二
▲▲
3.2线程的创建和启动
25
关于线程的启动是通过哪个方法来实现的(A)
A.start()B.join()C.Sleep()D.currentThread()
二
▲▲
3.2线程的创建和启动
26
下列方法中可以用来创建一个新线程的是(BC)
A、实现java.lang.Runnable接口并重写start()方法
B、实现java.lang.Runnable接口并重写run()方法
C、继承java.lang.Thread类并重写run()方法
D、实现java.lang.Thread类并重写start()方法
三
▲▲
3.2线程的创建和启动
第四单元多线程
(二)
题号
试题
题型
难度
第节课内容知识点
1
下列说法中错误的项有(BD)
A. 一个类继承Thread类,该类的实例就是一个线程对象
B.通过调用run方法启动一个线程
C.通过调用start方法启动一个线程
D.新建的线程调用start()方法就能立即进入运行状态
三
▲
3.2线程的创建和启动
4.1掌握线程的生命周期
2
开启线程需要使用的方法是:
(B)
A.sleep()B.start()C.run()D.stop()
二
▲▲
4.1掌握线程的生命周期
3
以下属于多线程生命周期的是:
(ABCD)
A.开始B.就绪C.运行D.结束
三
▲▲
4.1掌握线程的生命周期
4
以下关于多线程说法正确的是:
(ABCD)
A.线程都可以设置名字,也可以获取线程的名字,连主线程也不例外。
B.获取当前线程的对象的方法是:
Thread.currentThread();
C.当线程目标run()方法结束时该线程完成。
D.线程的调度是JVM的一部分,在一个CPU的机器上,实际上一次只能运行一个线程。
一次只有一个线程栈执行。
三
▲▲
3.1线程概述
4.1掌握线程的生命周期
5
java线程的基本状态和阻塞状态都有哪些?
新建,就绪,阻塞,运行态,死亡
七
▲▲▲
4.1掌握线程的生命周期
6
Thread类里面,等待该线程终止的方法是(C)
A.getName()B.setName(true)C.join()D.run()
二
▲▲
4.2控制线程
7
关于sleep方法,下面描述不正确的是(A)
A.Sleep方法指让线程结束运行。
B.Sleep方法指定的毫秒数内让当前正在执行的线程休眠(暂停执行),
C.Sleep(1000):
是指让线程休眠1000毫秒
D.当前运行的线程休眠,其他线程可以照常运行。
二
▲▲
4.2控制线程
8
程序开发者必须创建一个线程去管理内存的分配。
(错)
四
▲▲
4.2控制线程
9
线程的休眠方法是(A)
A.sleep
B.wait
C.yield
D.start
二
▲▲
4.2控制线程
10
以下哪个方法可以让正在执行的线程暂停一段时间,并进入阻塞状态不需要其它线程唤醒它(A)
A.sleep
B.wait
C.Notify
D.run
二
▲▲
4.2控制线程
11
下列哪个方法可以使线程从运行状态进入阻塞状态(A)
A.sleepB.wait
C.yieldD.start
二
▲
4.2控制线程
12
下列哪个一个操作不能使线程从等待阻塞状态进入对象阻塞状态(D)
A.等待阴塞状态下的线程notify()唤
B.等待阻塞状态下的纯种被interrput()中断
C.等待时间到
D.等待阻塞状态下的线程调用wait()方法
二
▲▲
4.2控制线程
13
线程的执行可通过使用(sleep())方法来暂时中止。
在睡眠后,线程将进入就绪状态
一
▲▲
4.2控制线程
14
当调用一个正在进行线程的stop()方法时,该线程便会进入休眠状态。
(错)
四
▲
4.2控制线程
15
Java语言中提供了一个▁d▁线程,自动回收动态分配的内存。
A异步
B消费者
C守护
D垃圾收集
二
▲▲
4.2.2了解什么是后台线程(DaemonThread)
16
主线程结束时守护线程立即结束(y)
四
▲▲
4.2控制线程
17
线程间调用涉及的开销比进程间通信多(n)
四
▲▲
4.2控制线程
18
关于多线程,下列说法正确的是:
(ABC)
A.Run()是执行方法,start()是启动方法。
B.之所以出现线程,就是为了更好的利用CPU,让她更加“精明”的干活。
C.start()在执行时调用的是run方法体。
D.调用start()方法线程立马运行。
三
▲▲
4.1掌握线程的生命周期
19
下列关于Thread类提供的线程控制方法的说法中,错误的一项是(D)
A.在线程A中执行线程B的join()方法,则线程A等待直到B执行完成
B.线程A通过调用interrupt()方法来中断其阻塞状态
C.若线程A调用方法isAlive()返回值为true,则说明A正在执行中
D.currentThread()方法返回当前线程的引用
二
▲▲
4.2控制线程
20
▁b▁方法使对象等待队列的第一个线程进入就绪状态。
Arun
Bnotify
Cyield
Dsleep
二
▲▲
4.2控制线程
21
方法resume()负责重新开始▁d▁线程的执行。
A被stop()方法停止
B被sleep()方法停止
C被wait()方法停止
D被suspend()方法停止
二
▲
4.2控制线程
22
下面哪个能直接导致一个线程停止执行?
(ABD)
A.调用yield()方法
B.在一个对象上调用wait()方法
C.在一个对象上调用notify()方法
D.在一个对象上调用Interrupt()方法
三
▲▲
4.2控制线程
23
下列哪些方法不可以使线程从运行状态进入其他阻塞状态(BCD)
A.sleepB.wait
C.yieldD.start
三
▲▲
4.2控制线程
24
处于新建状态的线程可以使用的控制方法是(start())和(stop())
一
▲
4.2控制线程
4.1掌握线程的生命周期
25
一个线程在调用它的start方法,之前,该线程将一直处于出生期。
(对)
四
▲▲
4.1掌握线程的生命周期
4.2控制线程
26
如果线程的run方法执行结束或抛出一个不能捕获的例外,线程便进入等待状态。
(错)
四
▲▲
4.2控制线程
27
如果线程死亡,它便不能运行。
(对)
四
▲▲
4.2控制线程
28
线程的生命周期是一个线程从创建到执行完的整个过程。
(√)
四
▲▲
4.1掌握线程的生命周期
29
下列关于Thread类提供的线程控制方法的说法中,错误的一项是(C)
A.在线程A中执行线程B的join()方法,则线程A等待直到B执行完成
B.线程A通过调用interrupt()方法来中断其阻塞状态
C.若线程A调用方法isAlive()返回值为true,则说明A正在执行中
D.currentThread()方法返回当前线程的引用
二
▲▲
4.2控制线程
30
以下代码的调试结果为?
(D)
publicclassBgroundextendsThread{
publicstaticvoidmain(Stringargv[]){
Bgroundb=newBground();
b.run();
}
publicvoidstart(){
for(inti=0;i<10;i++){
System.out.println("Valueofi="+i);
}}}
A.编译错误,没有定义线程的run方法;
B.由于没有定义线程的run方法,而出现运行错误;
C.编译通过,运行输出values0to9
D.编译通过,运行无输出
二
▲▲▲
4.1掌握线程的生命周期
31
下列关于线程优先级的说法中,正确的是(AC)
A、线程的优先级是可以改变的
B、线程的优先级是在创建线程时设置的
C、在创建线程后的任何时候都可以设置
D、B和C
三
▲▲
4.2控制线程
32
下列哪个方法可以使当前运行的线程回到可运行的状态,让具有相同优先级的线程获得运行的机会,也就是线程的让步。
(C)
A.Join()B.Sleep()C.yield()D.interrupt()
二
▲▲
4.2控制线程
33
线程的优先级是在Thread类的常数(MIN_PRIORITY)和(MAX_PRIORITY)之间的一个值
一
▲▲
4.2控制线程
34
在Java中,高优先级的可运行线程会抢占低优先级线程。
(对)
四
▲▲
4.2控制线程
35
线程可以用yield方法使低优先级的线程运行。
(错)
四
▲▲
4.2控制线程
36
一个线程可以调用yield方法使其他线程有机会运行。
(对)
四
▲▲
4.2控制线程
37
用▁b▁方法可以改变线程的优先级。
Arun
BsetPrority
Cyield
Dsleep
二
▲▲
4.2控制线程
38
线程通过▁c▁方法可以使具有相同优先级线程获得处理器。
Arun
BsetPrority
Cyield
Dsleep
二
▲▲
4.2控制线程
39
下列哪个方法可以使当前运行的线程回到可运行的状态,让具有相同优先级的线程获得运行的机会,也就是线程的让步。
(C)
A.Join()B.Sleep()C.yield()D.interrupt()
二
▲▲
4.2控制线程
第五单元多线程(三)
题号
试题
题型
难度
第节课内容知识点
1
同步是用于确保资源一次只能被一个线程使用的过程(y)
四
▲
5.1线程同步
2
synchronized关键字不可以用于修饰方法。
(n)
四
▲▲
5.1线程同步
3
使用synchronized来实现线程的同步,但是也会产生(A)的问题。
A.线程的死锁B.线程的睡眠C.线程的启动D.线程的运行
二
▲▲
5.1线程同步
4
synchronized关键字不可以用于修饰方法。
(错)
四
▲
5.1线程同步
5
同步是用于确保资源一次只能被一个线程使用的过程(对)
四
▲
5.1线程同步
6
同步和异步有何异同,在什么情况下分别使用他们?
举例说明。
答:
如果数据将在线程间共享。
例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这