Java程序设计课堂练习题.docx
《Java程序设计课堂练习题.docx》由会员分享,可在线阅读,更多相关《Java程序设计课堂练习题.docx(28页珍藏版)》请在冰豆网上搜索。
Java程序设计课堂练习题
《Java程序设计》练习题
第一章Java编程基础
一、选择题
1、可以使用【 】实用程序编译Java程序。
A.javaB.javacC.javadocD.cmd
2、可以使用【 】实用程序运行java应用程序。
A.javaB.javacC.javadocD.cmd
3、可以使用【 】实用程序从Java源文件代码中抽取Java文档注释,生成相应的HTML帮助文档。
A.javaB.javacC.javadocD.cmd
4、Java编译单元(源程序文件)的扩展名为【 】
A..javaB..classC..docD..exe
5、编译Java源程序文件产生的字节码文件的扩展名为【 】
A..javaB..classC..htmlD..exe
6、以下Java应用程序执行入口main方法的声明中,正确的是【 】
A、publicstaticvoidmain()
B、publicstaticvoidmain(String[]args)
C、publicstaticintmain(String[]args)
D、publicvoidmain(String[]args)
7、Java属于以下哪种语言?
【 】
A.机器语言B.汇编语言C.高级语言D.以上都不对
8、下面哪种类型的文件可以在Java虚拟机中运行?
【 】
A..javaB..jreC..exeD..classs
9、Java程序中声明包的关键字是【 】
A、java B、package C、javadoc D、cmd
10、如果JDK的安装路径为“d:
\jdk”,若想在命令窗口中任何当前路径下,都可以直接使用javac和java命令,需要将环境变量path设置为以下哪个选项?
【 】
A、d:
\jdk;B、d:
\jdk\bin;C、d:
\jre\bin;D、d:
\jre;
11、下列说法中,不正确的是【 】。
A、一个Java源文件编译通过后,得到的结果文件数也只有一个
B、一个Java源文件经过编译后,得到的文件的扩展名一定是.class
C、一个Java源文件只能有一个public类定义,其类名与源文件名相同
D、一个Java源文件可以包含多个类
12、安装好JDK后,在其bin目录下有许多exe可执行文件,其中“java.exe”命令的作用是以下哪一种?
【 】。
A、Java文档制作工具B、Java解释器
C、Java编译器D、Java启动器
13、以下关于变量的说法错误的是【 】
A.变量名必须是一个有效的标识符
B.变量在定义时可以没有初始值
C.变量一旦被定义,在程序中的任何位置都可以被访问
D.在程序中,可以将一个byte类型的值赋给一个int型类型的变量,不需要特殊声明
14、假设intx=2,三元表达式x>0?
x+1:
5的运行结果是以下哪一个?
【 】
A.0B.2C.3D.5
15、下面的运算符中,用于执行除法运算的是哪个?
【 】
A./B.\C.%D.*
16、下面哪种写法可以实现访问数组arr的首个元素?
【 】
A.arr[0]B.arr(0)C.arr[1]D.arr
(1)
17、以下哪个选项可以正确创建一个长度为3的二维数组?
【 】
A.newint[2][3]B.newint[3][]
C.newint[][3]D.以上答案都不对
18、关于变量的作用域,下列说法错误的是【 】
A.类成员变量的作用域为类定义体
B.方法参数的作用域为方法体
C.对于for语句中定义的变量,当for语句执行完时,该变量就消亡了
D.在方法voidf(inti)的for语句块中,可以声明变量“inti;”
19、Java字符类型采用的是Unicode编码方案,每个Unicode码占用的位数是【 】。
A.8B.16C.32D.64
20、下列赋值语句中,不合法的是【 】。
A.floatf=1.2B.floatf2=1.2f
C.doubled=1.2D.doubled2=1.2f
二、填空题
1、Java的三个技术平台分别是_javase___、__javaee__、__javame__。
2、Java程序的运行环境简称之为_jre___。
3、编译Java程序需要使用__javac__命令。
4、_____path____环境变量用来存储Java的编译和运行工具所在路径,而___classpath__环境变量则用来保存Java虚拟机要运行的“.class”文件路径。
5、在Java语言中,main()方法的参数是表示命令行参数的String数组,其中,__args[0]__表示第一个参数。
6、Java应用程序的入口方法是_____main()__,用于控制程序的开始和结束。
7、Java系统运行时,通过__自顶垃圾收集___机制周期性地释放无用对象所使用的内存,完成对象的清除。
8、Java中的程序代码都必须在一个类中定义,类使用_class__关键字来定义。
9、布尔常量即布尔类型的两个值,分别是__true__和__false___。
10、Java中的注释可分为三种类型,分别是__单行___、___多行____、____文档___。
三、判断题
1、Java语言采用面向对象的思想编程,具有跨平台、分布式、多线程等优点。
2、Java语言的语法与C或C++类似,也支持面向过程的程序设计技术。
3、Java提供了自动垃圾收集机制进行内存管理,减小了内存出错的可能性。
4、Java语言的平台无关性使得Java程序可以跨平台运行。
5、Java虚拟机是实现Java语言平台无关性的基础。
四、简答题
1、简述JRE与JDK的区别。
JRE,它相当于操作系统部分,提供了Java程序运行时所需要的基本条件和许多Java基础类,如果你只想运行别人开发好的Java程序,那么,你的计算机上必须且只需安装JRE。
它包含编译工具、解释工具、文档制作工具、打包工具等多种与开发相关的工具,是提供给Java开发人员使用的。
初学者学习和使用Java语言时,首先必须下载和安装JDK。
JDK中已经包含了JRE部分,初学者安装JDK后不必再去下载和安装JRE了。
2、什么是方法重载?
方法重载指的是在一个类中可以声明多个同名的方法,而方法中参数的个数或者数据类型不一致。
调用这些同名的方法时,JVM会根据实际参数的不同绑定到不同的方法。
第二章面向对象思想
一、选择题
1、类的定义必须包含在以下哪种符号之间?
【 】
A.方括号[]B.花括号{}C.双引号“”D.圆括号()
2、在以下什么情况下,构造方法会被调用?
【 】
A.类定义时B.创建对象时
C.调用对象方法时D.使用对象的变量时
3、在类的继承关系中,需要遵循以下哪个继承原则?
【 】
A.多重B.单一C.双重D.不能继承
4、在Java语言中,以下哪个关键字用于在方法上声明抛出异常【 】
A、tryB、catchC、throwsD、throw
5、关于super关键字以下说法哪些是不正确的【 】。
A.super关键字可以调用父类的构造方法
B.super关键字可以调用父类的普通方法
C.super与this不能同时存在于同一个构造方法中
D.super与this可以同时存在于同一个构造方法中
6、类中的一个成员方法被下面哪个修饰符修饰时,该方法只能在本类被访问?
【 】。
A.publicB.protectedC.privateD.default
7、在Java中,要想让一个类继承另一个类,可以使用以下哪个关键字?
【 】
A、inheritsB、implementsC、extendsD、modifies
8、System类位于以下哪个包中?
【 】。
A、java.ioB、java.utilC、java.awtD、java.lang
9、以下关于继承的说法,正确的是【 】。
A.继承可以避免代码复制和相关的代码维护等问题
B.Java语言中一个子类可以继承多个基类(多重继承)
C.Java语言不允许实现多个接口
D.子类可以继承父类的方法,但不能重新改写父类的方法
10、下列修饰符中,不能用来修饰类的是【 】。
A.publicB.abstractC.finalD.static
二、填空题
1、面向对象的三大特征是__封装___、___继承___和____多态___。
2、在Java中,可以使用关键字__new___来创建类的实例对象。
3、定义在类中的变量被称为__成员变量_____,定义在方法中的变量被称为__局部变量___。
4、在非静态成员方法中,可以使用关键字_this_访问类的其他非静态成员。
5、被static关键字修饰的成员变量被称为__静态变量____,它可以被该类所有的实例对象共享。
6、在一个类中,除了可以定义属性、方法,还可以定义类,这样的类被称为__内部类___。
7、在Java语言中,允许使用已存在的类作为基础创建新的类,这种技术称为___继承__。
8、一个类如果实现一个接口,那么它就需要实现接口中定义的全部_方法_,否则该类就必须定义成____抽象类__。
9、在程序开发中,要想将一个包中的类导入到当前程序中,可以使用_import_关键字。
10、一个类可以从其他的类派生出来,派生出来的类称为__子类__,用于派生的类称为__父类__或者_基类__。
三、判断题
1、在定义一个类的时候,如果类的成员被private所修饰,该成员不能在类的外部被直接访问。
2、Java中的每个类都至少有一个构造方法,一个类中如果没有定义构造方法,系统会自动为这个类创建一个默认的构造方法。
3、声明构造方法时,不能使用private关键字修饰。
4、类中static修饰的变量或方法,可以使用类名或对象的引用变量访问。
5、方法内部类中不能访问外部类的成员变量。
四、简答题
1、构造方法和普通的成员方法有什么区别?
2、抽象类和接口的区别是什么?
3、什么叫多态?
1.构造方法是类的一个特殊成员,它会在类实例化对象时被自动调用。
而普通方法只有在使用的时候才会被调用。
在定义构造方法时要求方法名与类名相同、在方法名的前面没有返回值类型的声明、在方法中不能使用return语句返回一个值。
2.在Java中,使用abstract关键字修饰的类称之为抽象类。
抽象类是不能被实例化的,通常需要写一个子类来继承抽象类,同时实例化子类来获得该类的对象。
抽象类通常用于表示一种抽象的概念。
接口可以说是一种特殊的抽象类,接口中只能定义常量和抽象方法。
由于接口的特殊性,在定义时需要使用interface关键字。
3.多态意味着一个对象有着多种形态,可以在特定的情况下,表现不同的状态,从而对应着不同的属性和方法。
简单的说,多态就是使用父类类型的变量引用子类对象,根据被引用子类对象的特性,程序会得到不同的运行效果。
第三章多线程
一、选择题
1、Thread类位于下列哪个包中?
【 】
A.java.ioB.java.langC.java.utilD.java.awt
2、线程调用sleep()方法后,该线程将进入以下哪种状态?
【 】
A.就绪状态B.运行状态C.阻塞状态D.死亡状态
3、在以下哪种情况下,线程进入就绪状态?
【 】。
A.线程调用了sleep()方法时B.线程调用了join()方法
C.线程调用了yield()方法时D.线程调用了notify()方法
4、对于通过实现Runnable接口创建线程,下面说法不正确的是【 】。
A、适合多个相同程序代码的线程去处理同一个资源的情况
B、把线程同程序代码、数据有效的分离,很好地体现了面向对象的设计思想
C、可以避免由于Java的单继承带来的局限性
D、编写简单,可以不通过Thread类直接创建线程
5、对于死锁的描述,下面四种说法不正确的是【 】。
A.当两个线程互相等待对方释放同步锁时会发生死锁
B.Java虚拟机没有检测和处理死锁的措施
C.一旦出现死锁,程序会发生异常
D.处于死锁状态的线程处于阻塞状态,无法继续运行
6、下面四个选项中,不是线程进入阻塞状态的原因是【 】。
A.线程试图获取某个对象的同步锁,而该锁被其他线程持有
B.线程调用了另一个线程的join()方法
C.线程调用了一个阻塞式的IO方法
D.线程调用了setDaemon(booleanb)方法
7、要创建一个线程类,可通过继承【 】类。
A、ObjectB、ThreadC、RunnableD、Task
8、通过实现【 】接口,可创建一个线程类
A、ObjectB、ThreadC、RunnableD、Task
9、通过重写继承的方法【 】,可实现线程要执行的逻辑操作。
A.start()B.main()C.run()D.execute()
10、通过调用线程对象实例的【 】方法,可以启动执行该线程。
A.start()B.main()C.run()D.execute()
二、填空题
1、一个应用程序中有多条并发执行的线索,每条线索都被称作一个__线程_,它们会交替执行,彼此间可以进行__通信__。
2、在实现多线程的程序时有两种方式,一是通过继承__thread_类,二是通过实现__runnable___接口。
3、yield()方法只能让相同优先级或者更高优先级、处于__就绪_状态的线程获得运行的机会。
4、在Java语言中,同步方法需要用到关键字__synchronized___,对于同步方法而言无须指定同步锁,它的同步锁是方法所在的_对象__,也就是_this__(关键字)。
5、在Thread类中,start()方法用于开启一个_新线程___,当线程启动后,系统会自动调用___run()__方法。
三、判断题
1、当创建一个线程对象时,该对象表示的线程就立即开始运行。
2、如果前台线程全部死亡,后台线程也会自动死亡。
3、同步代码块中的锁对象可以是任意类型的对象。
4、静态方法不能使用synchronized关键字来修饰。
5、线程结束等待或者阻塞状态后,会进入运行状态。
四、简答题
1、在Java中创建线程有几种方式?
2、sleep()和wait()有什么区别?
五、分析题
1、阅读下面的程序,分析代码是否能编译通过,如果能编译通过,请列出运行的结果。
如果不能编译通过,请说明原因。
classRunHandler{
publicvoidrun(){
System.out.println("run");
}
}
publicclassTest{
publicstaticvoidmain(String[]args){
Threadt=newThread(newRunHandler());
t.start();
}
}
2、阅读下面的程序,分析代码是否能编译通过,如果能编译通过,请列出运行的结果。
如果不能编译通过,请说明原因。
publicclassAextendsThread{
protectedvoidrun(){
System.out.println("thisisrun()");
}
publicstaticvoidmain(String[]args){
Aa=newA();
a.start();
}
}
3、阅读下面的程序,分析代码是否能编译通过,如果能编译通过,请列出运行的结果。
如果不能编译通过,请说明原因。
publicclassTest{
privateObjectobj=newObject();
publicsynchronizedvoida(){
try{
obj.wait();
System.out.println("waiting");
}catch(InterruptedExceptione){
System.out.println("Exception");
}
}
publicstaticvoidmain(String[]args){
newTest().a();
}
}
六、设计题
1、声明线程类TalkThread,循环打印线程名称10次(表示10次发言机会);创建测试类,创建3个对象(表示3个发言人)并启动线程,观察输出结果(3个发言人的发言顺序)。
第四章JavaAPI
一、选择题
1、先阅读下面的程序片段
Stringstr="abccdefcdh"
String[]arr=str.split("c");
System.out.println(arr.length);
程序执行后,打印的结果是几?
【 】
A.2B.3C.4D.5
2、以下都是Math类的常用方法,其中用于计算绝对值的方法是哪个【 】。
A.ciel()B.floor()C.abs()D.random()
3、Random对象能够生成以下哪种类型的随机数?
【 】。
A.intB.StringC.doubleD.A和C
4、Strings=“abcdedcba”;则s.subString(3,4)返回的字符串是以下选项中的哪个?
【 】。
A、cdB、deC、dD、e
5、假如indexOf()方法未能找到所指定的子字符串,则返回以下选项中的哪个?
【 】。
A.falseB.0C.-1D.以上答案都不对
6、以下Math类的方法中,-4.4通过哪个方法运算后,结果为-5.0【 】。
A.round()B.min()C.floor()D.ceil()
7、已知inti=(int)(Math.random()*100),则i不可能为【 】。
A.0B.1C.99D.100
8、已知Stringstr=“abc计算机123”,则str.length()的值为【 】。
A.9B.10C.12D.18
9、已知Stringa=“Hello”,Stringb=a.subString(0,2),则b=【 】。
A.HelloB.HeC.HelD.null
10、下列方法中,【 】不是StringBuffer类的成员方法
A.compareTo()B.indexOfC.appendD.charAt()
二、填空题
1、在Java中定义了两个类来封装对字符串的操作,它们分别是___________和_________________。
2、Java中操作日期的类有____________、_____________、_______________。
3、Math类中用于计算所传递参数平方根的方法是_______________。
4、Java中专门用于将日期格式化为字符串的类是________________。
5、Java中用于产生随机数的类是_____________,它位于_____________包中。
6、String类中用于返回字符串字符个数的方法是________________。
三、判断题
1、String对象和StringBuffer对象都是字符串变量,创建后都可以修改。
2、用运算符==比较字符串对象时,如果两个字符串的值相同,结果为true。
3、Ssytem类中的currentTimeMillis()方法返回一个long类型的值。
4、Date、Calendar以及DateFormat类都位于java.util包中。
5、String类的方法replace(CharSequencestr1,CharSequencestr2)返回一个新的字符串,它是通过用str2替换此字符串中出现的所有str1得到的。
四、简答题
1、String和StringBuffer有什么区别?
2、Date和Calendar类有什么区别和联系?
第五章集合类
一、选择题
1、Java语言中,集合类都位于哪个包中?
【】
A.java.utilB.java.langC.java.arrayD.java.collections
2、使用Iterator时,判断是否存在下一个元素可以使用以下哪个方法?
【】
A.next()B.hash()C.hasPreviousD.hasNext()
3、在程序开发中,经常会使用以下哪个类来存储程序中所需的配置?
【】
A.HashMapB.TreeSetC.PropertiesD.TreeMap
4、要想集合中保存的元素没有重复并且按照一定的顺序排列,可以使用以下哪个集合?
【】
A.LinkedListB.ArrayListC.HashSetD.TreeSet
5、以下哪个方法不是LinkedList集合中定义的?
【】
A.getLast()B.getFirst()C.remove(intindex)D.next()
6、获取单列集合中元素的个数可以使用以下哪个方法?
A.length()B.size()C.get(intindex)D.add(Objectobj)
7、下列集合类型中,不允许集合中存在重复项的是【】
A.CollectionB.ListC.SetD.Queue
8、下列关于List接口的说法,错误的是【】
A.继承Collection接口B.不允许重复项
C.支持遍历D.可以使用访问索引
9、下列关于Set接口的说法,错误的是【】
A.继承Collection接口B.不允许重复项
C.支持遍历D.可以使用访问索引
10、下列关于Collections类的静态方法binarySerach()的说法,错误的是【】
A.使用二分搜索法搜索指定列表
B.如果没有找到,则返回负值
C.查找前列表必须先排序
D.如果有多个相同元素,则返回第一个的索引
二、填空题
1、JDK中提供了一系列可以存储任意对象的类,统称为____________
2、在创建TreeSet对象时,可以传入自定义的比较器,自定义比较器需要实现_______________接口。
3、使用Iterator遍历集合时,首先需要调用______________方法判断是否存在下一个元素,若存在下一个元素,则调用_____________方法取出该元素。
4、使用Iterator遍历集合时,首先需要调用______________方法判断是否存在下一个元素,若存在下一个元素,则调用_____________方法取出该元素。
5、集合按照存储结构的不同可分为单列集合和双列集合,单列集合的根接口是________________,双列集合的根接口是___________。
6、Map集合中的元素都是成对出现的,并且都是以__________、_________的映射关系存在。
7、Iterator有一个子类,不仅可以对集合进行从前向右遍历,还可以从后向前遍历,该类是______________。
8、List