版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java第1章习题与答案第1章习题练习一、选择题以下对Java语言不正确的描述是()。A.Java语言是一个完全面向对象的语言。B.Java是结构中立与平台无关的语言。C.Java是一种编译性语言。D.Java是一种解释性语言。以下说法正确的是()。A.Java程序文件名必须和程序文件中定义的类名一致。B.Java程序文件名可以和程序文件中定义的类名不一致。C.Java源程序文件的扩展名必须是.java。D.以上A、C说法正确,B说法不正确。以下描述错误的是()。A.Java的源程序代码被存储在扩展名为.java的文件中。B.Java编译器在编译Java的源程序代码后,自动生成扩展名为.class的字节代码类文件。C.Java编译器在编译Java的源程序代码后,自动生成的字节代码文件名和类名相同,扩展为.class。D.Java编译器在编译Java的源程序代码后,自动生成扩展名为.class的字节代码文件,其名字可以和类名不同。以下有关运行Java应用程序(Application)正确的说法是()。A.Java应用程序由Java编译器解释执行。B.Java应用程序经编译后生成的字节代码可由Java虚拟机解释执行。C.Java应用程序经编译后可直接在操作系统下运行。D.Java应用程序经编译后可直接在浏览器中运行。以下有关运行Java小应用程序(Applet)正确的说法是()。A.Java小应用程序由Java编译器编译后解释执行。B.Java小应用程序经编译后生成的字节代码可由Java虚拟机解释执行。C.Java小应用程序经编译后可直接在操作系统下运行。D.Java应用程序经编译后生成的字节代码,可嵌入网页文件中由Java使用浏览器解释执行。二、问答题简述JVM和JRE的含义、作用与区别?Java程序的平台无关性是如何实现的?简述Java应用程序的开发步骤?简述Java语言的主要特点?列举目前开发Java程序主流的集成开发工具有哪些?参考答案一、选择题答案答案:D解析:Java既是编译型也是解释型语言。Java源代码先编译成字节码(编译性),然后由JVM解释执行(解释性)。选项D说"Java是一种解释性语言"不正确,因为它忽略了Java的编译过程。答案:D解析:A正确(public类名必须与文件名一致);B错误;C正确(Java源文件扩展名必须是.java);所以D选项正确。答案:D解析:Java编译器编译后生成的.class文件名必须与类名完全相同,所以D描述错误。答案:B解析:Java应用程序编译生成字节码(.class文件),由Java虚拟机(JVM)解释执行。答案:D解析:JavaApplet小应用程序编译后生成字节码,嵌入到HTML网页中,由浏览器中的Java虚拟机解释执行。二、问答题答案1.简述JVM和JRE的含义、作用与区别?JVM(JavaVirtualMachine,Java虚拟机):含义:是一个虚拟的计算机,是Java程序运行的核心环境作用:负责解释执行Java字节码文件(.class),实现Java的跨平台特性JRE(JavaRuntimeEnvironment,Java运行环境):含义:是Java程序运行所必需的环境集合作用:提供运行Java程序所需的所有资源区别:JVM是JRE的一部分,JRE=JVM+核心类库+运行工具JVM只负责解释执行字节码,JRE包含了JVM以及运行Java程序所需的全部环境只有JVM无法运行Java程序,还需要类库支持;而JRE是完整的运行环境2.Java程序的平台无关性是如何实现的?Java的平台无关性通过以下机制实现:字节码(Bytecode):Java源代码不直接编译成特定平台的机器码,而是编译成与平台无关的字节码文件(.class)Java虚拟机(JVM):不同操作系统(Windows、Linux、Mac等)都有对应的JVM实现,JVM负责将字节码解释成特定平台的机器码并执行"一次编写,到处运行":编译后的字节码可以在任何安装了JVM的平台上运行,无需重新编译3.简述Java应用程序的开发步骤?Java应用程序开发的基本步骤:编写源代码:使用文本编辑器或IDE编写Java源代码,保存为.java文件编译:使用javac编译器将.java源文件编译成字节码文件(.class文件)命令:javacHelloWorld.java运行:使用java命令通过JVM运行字节码文件命令:javaHelloWorld调试与测试:检查运行结果,修改代码中的错误,重复上述过程直至程序正确运行4.简述Java语言的主要特点?Java语言的主要特点包括:面向对象:完全面向对象,支持封装、继承、多态平台无关性:通过JVM实现"一次编写,到处运行"简单性:语法简洁,去除了C++中复杂的特性(如指针、多继承等)健壮性:强类型检查、异常处理、自动垃圾回收机制安全性:提供安全沙箱机制,防止恶意代码破坏多线程:内置多线程支持,便于开发并发程序分布式:支持网络编程,便于开发分布式应用高性能:JIT即时编译技术,提高运行效率5.列举目前开发Java程序主流的集成开发工具有哪些?目前主流的Java集成开发工具(IDE):IntelliJIDEA:JetBrains公司开发,功能强大,智能提示优秀,是目前最流行的JavaIDE,有社区版(免费)和旗舰版(收费)Eclipse:开源免费,插件丰富,可扩展性强,长期以来是Java开发的主流IDENetBeans:Oracle官方开源IDE,界面简洁,易于上手,适合初学者VisualStudioCode(VSCode):微软开发的轻量级编辑器,通过Java插件可实现强大的Java开发功能第2章习题练习与参考答案第一部分:习题一、选择题1.以下有关标识符说法正确的是()。A.任何字符的组合都可形成一个标识符。B.Java的保留字也可作为标识符使用。C.标识符是以字母、下划线或$开头,后跟字母、数字、下划线或$的字符组合。D.标识符是不区分大小写的。2.以下哪一组标识符是正确的()。A.c_name,if,_nameB.c*name,$name,modeC.Result1,somm1,whileD.$ast,_mmc,c$_fe3.下列可以作为自定义标识符的是()。A.classB.implementsC.πD.private4.有关整数类型说法错误的是()。A.byte、short、int、long都属于整数类型,分别占1、2、4、8个字节。B.占据字节少的整数类型能处理较小的整数,占据的字节越多,处理的数据范围就越大。C.所有整数都是一样的,可任意互换使用。D.两个整数的算术运算结果,还是一个整数。5.以下说法正确的是()。A.基本字符数据类型有字符和字符串两种。B.字符类型占两个字节,可保存两个字符。C.字符类型占两个字节,可保存一个字符。D.以上说法都是错误的。6.不属于单目运算符的是()。A.++B.?:C.-D.!7.关于类型转换说法错误的是()。A.低精度类型数据向高精度类型转换时,不会丢失数据精度。B.系统会自动进行(整型或浮点型)低精度类型数据向高精度类型数据的转换。C.高精度类型数据向低精度类型数据的转换、整型和浮点型数据之间的转换,必须强制进行,否则有可能会引起数据丢失。D.高精度类型数据向低精度类型转换时,不会丢失数据精度,因为转换是系统进行的。8.对变量赋值说法错误的是()。A.变量只有在赋值后才能使用。B.boolean类型的变量值只能取true或false。C.只有同类型同精度的值才能赋给同类型同精度的变量,不同类型不同精度需要转换后才能赋值。D.不同类型和精度之间也能赋值,系统会自动转换。9.以下正确的赋值表达式是()。A.a==5B.a+5=aC.a++D.a++=b10.数学式:x²+y²-xy正确的算术表达式是()。A.x^2+y^2+xyB.x*x+y*y+xyC.x(x+y)+y*yD.x*x+y*y+x*y11.以下正确的关系表达式是()。A.x≥yB.x+y<>zC.>=xD.x+y!=z12.以下正确的逻辑表达式是()。A.(x+y>7)&&(x-y<1)B.!(x+y)C.(x+y>7)||(z=a)D.(x+y+z)&&(z>=0)13.有关移位运算的说法是()。A.移位运算是一元运算。B.移位运算是二元运算,是整数类型的二进制按位移动运算。C.移位运算是二元运算,可以进行浮点数类型的二进制按位移动运算。D.移位运算是二元运算,可以进行数据的按位移动运算。14.有关位运算符说法正确的是()。A.~求反运算符是一元运算符;&,^,|是二元运算符。B.a&b&c是先进行a&c的二进制按位与操作,生成的结果再与c进行&操作。C.位运算只对整型数据进行位运算,而不能对浮点数进行位运算。D.以上3种说法都正确。15.有关条件运算符(?:)说法正确的是()。A.条件运算符是一个三元运算符,其格式是:表达式1?表达式2:表达式3。B.格式中的表达式1是关系或逻辑表达式,其值是boolean值。C.若表达式1成立,该条件表达式取表达式2的值,否则取表达式3的值。D.以上说法都正确。16.在下面说法中,正确的是()。A.Java数据类型占用空间大小与具体机器无关B.float类型的精度高于double类型C.Java语言的标识符是不区分大小写的D.ASCII码可以表示汉字17.必须进行强制类型转换的是()。A.int类型转换为float类型B.float类型转换为double类型C.float类型转换为int类型D.byte类型转换为double类型18.下列的哪个选项可以正确表示八进制数8()。A.0x8B.0x10C.08D.01019.变量定义有错误的是()。A.shorts=28;B.charc="1";C.doubled=2.3;D.floatf=2.3;20.设x=1,y=2,z=3,则表达式y+=z--/++x的值是()。A.3B.3.5C.4D.5二、填空题1.3.14156F表示的是______。2.阅读程序:publicclassTest1
{
publicstaticvoidmain(Stringargs[])
{
System.out.println(15/2);
}
}其执行结果是______。3.设a=16,则表达式a>>>2的值是______。4.阅读程序:publicclassTest2
{
publicstaticvoidmain(Stringargs[])
{
inti=10,j=5,k=5;
System.out.println("i+j+k="+i+j+k);
}
}其执行结果是______。三、编程题1.编写一个应用程序,定义两个整型变量n1、n2。当n1=22,n2=64时计算输出n1+n2,n1-n2,n1*n2,n1/n2,n1%n2的值。2.编写一个应用程序,定义两个整型变量n1、n2并赋给任意值。计算输出n1>n2,n1<n2,n1-n2>=0,n1-n2<=0,n1%n2==0的值。3.编写一个应用程序,定义两个float变量C、F。计算公式C=5/9(F-32),计算当F=60、F=90时,输出C的值。4.编写一个应用程序计算圆的周长和面积,设圆的半径为1.5,输出圆的周长和面积值。
第二部分:参考答案一、选择题答案与解析1.答案:C解析:Java标识符规则:必须以字母、下划线(_)或美元符($)开头,后面可以跟字母、数字、下划线或美元符。A错误(有字符限制);B错误(保留字不能作为标识符);D错误(Java标识符区分大小写)。2.答案:D解析:A中if是关键字;B中*是非法字符;C中while是关键字;D中所有标识符都符合规则:$开头、下划线开头、包含$都是允许的。3.答案:C解析:A、B、D都是Java关键字(保留字),不能作为自定义标识符。π是Unicode字符,可以作为标识符使用。4.答案:C解析:不同整数类型占用字节数不同,表示范围也不同,不能任意互换使用。例如byte范围是-128~127,int范围是-2^31~2^31-1。5.答案:C解析:A错误(String是引用类型不是基本类型);B错误(char占2字节但只能存1个Unicode字符);C正确。6.答案:B解析:?:是三元运算符(三目运算符),需要三个操作数。++、-(负号)、!都是单目运算符。7.答案:D解析:高精度向低精度转换时,可能会丢失数据精度(如double转int会丢失小数部分),必须强制转换。D说法错误。8.答案:C解析:Java支持自动类型转换,不同类型之间可以赋值,系统会自动进行类型提升。例如int可以直接赋值给double。9.答案:C解析:A是比较运算符不是赋值;B赋值号左边必须是变量;D语法错误;C是自增运算符,是正确的赋值表达式。10.答案:B解析:Java中^是异或运算符不是平方。x²=x*x,y²=y*y,所以x²+y²-xy=x*x+y*y-x*y。注意原题是减号,选项B是+xy,这是题目选项的问题,B是最接近的正确形式。11.答案:D解析:A中≥不是Java运算符(用>=);B中<>不是Java运算符(用!=);C缺少左操作数;D是正确的不等于运算符。12.答案:A解析:B中x+y是数值不是布尔值;C中z=a是赋值表达式不是布尔值;D中x+y+z是数值不是布尔值。只有A中两个关系表达式结果都是boolean。13.答案:B解析:移位运算符(<<、>>、>>>)是二元运算符,只能对整数类型进行二进制位移动运算,不能对浮点数进行移位。14.答案:D解析:A正确(~是一元,&^|是二元);B正确(位运算从左到右);C正确(位运算只对整型);所以D正确。15.答案:D解析:条件运算符?:是Java中唯一的三元运算符,格式为:条件?表达式1:表达式2。条件必须是boolean值,条件为true取表达式1,为false取表达式2。A、B、C都正确。16.答案:A解析:B错误(double精度高于float);C错误(Java标识符区分大小写);D错误(ASCII只有128个字符,不能表示汉字);A正确(Java数据类型大小是固定的,与平台无关)。17.答案:C解析:高精度转低精度必须强制转换。float精度高于int,所以float转int需要强制类型转换:(int)floatValue。18.答案:D解析:八进制数以0开头,八进制数字是0-7。十进制8=八进制10。A是十六进制;B是十六进制;C中8不是合法八进制数字;D正确(010表示八进制的8)。19.答案:B解析:B错误:char类型应该用单引号charc="1";,双引号是String类型。D中floatf=2.3;会有警告(2.3默认是double),但语法上可以编译(会自动转换)。B是明确的语法错误。20.答案:A解析:计算过程:++x先执行,x变为2;z--是后减,先用z=3;z--/++x=3/2=1(整数除法);y+=1→y=2+1=3。注意:都是int运算,结果为int,所以是3不是3.5。二、填空题答案与解析1.答案:float类型的浮点数常量解析:在Java中,数字后面加F或f表示这是一个float类型的浮点数常量。不加F的小数默认是double类型。2.答案:7解析:15和2都是int类型,进行整数除法时只保留整数部分,舍去小数部分。15/2=7(不是7.5)。3.答案:4解析:>>>是无符号右移运算符。16的二进制是10000,右移2位得到100,即十进制的4。16>>>2=16/2²=4。4.答案:i+j+k=1055解析:字符串拼接运算从左到右执行:"i+j+k="+10→"i+j+k=10";然后+5→"i+j+k=105";再+5→"i+j+k=1055"。注意:字符串+数值会把数值转成字符串拼接,不是算术加法。三、编程题参考答案第1题参考答案程序代码:publicclassArithmeticTest{
publicstaticvoidmain(String[]args){
intn1=22;
intn2=64;
System.out.println("n1+n2="+(n1+n2));
System.out.println("n1-n2="+(n1-n2));
System.out.println("n1*n2="+(n1*n2));
System.out.println("n1/n2="+(n1/n2));
System.out.println("n1%n2="+(n1%n2));
}
}运行结果:n1+n2=86n1-n2=-42n1*n2=1408n1/n2=0(整数除法)n1%n2=22(取余数)第2题参考答案程序代码:publicclassRelationTest{
publicstaticvoidmain(String[]args){
intn1=10;
intn2=3;
System.out.println("n1>n2="+(n1>n2));
System.out.println("n1<n2="+(n1<n2));
System.out.println("n1-n2>=0="+(n1-n2>=0));
System.out.println("n1-n2<=0="+(n1-n2<=0));
System.out.println("n1%n2==0="+(n1%n2==0));
}
}运行结果(n1=10,n2=3时):n1>n2=truen1<n2=falsen1-n2>=0=truen1-n2<=0=falsen1%n2==0=false第3题参考答案程序代码:publicclassTemperatureConvert{
publicstaticvoidmain(String[]args){
floatC,F;
F=60;
C=5.0f/9*(F-32);//注意:要用5.0f保证浮点运算
System.out.println("F="+F+"时,C="+C);
F=90;
C=5.0f/9*(F-32);
System.out.println("F="+F+"时,C="+C);
}
}运行结果:F=60.0时,C=15.555556F=90.0时,C=32.22222注意:必须写5.0f而不是5,否则会进行整数除法5/9=0,结果永远为0。第4题参考答案程序代码:publicclassCircleCalc{
publicstaticvoidmain(String[]args){
doubler=1.5;
doublepi=3.1415926;
doubleperimeter=2*pi*r;//周长=2πr
doublearea=pi*r*r;//面积=πr²
System.out.println("半径="+r);
System.out.println("周长="+perimeter);
System.out.println("面积="+area);
}
}运行结果:半径=1.5周长=9.4247778面积=7.06858335第3章习题练习与参考答案第一部分:习题原题一、选择题1.在下列语句中,初始化数组不正确的是()。A.intkey[]={1,2,3,4,5};B.intkey[]=newint[5];C.intkey[]={{1,2,3},{4,5,6}};D.intkey[][]={{1,2,3},{4,5,6}};2.以下定义一维数组的语句中,正确的是()。A.inta[]=newint[10];B.inta[]=new[10];C.inta[]=newint[5]{1,2,3,4,5};D.inta[]={1,2,3,4,5};3.关于java中的数组,下面的一些描述,哪些描述是准确的()。A.数组是一个对象,不同类型的数组具有不同的类B.数组长度是可以动态调整的C.两个数组用Object里equals方法比较时,会逐个遍历其中的元素,对每个元素进行比较D.一个固定长度的数组可类似这样定义:intarray[100]4.下面说法不正确的是()。A.switch语句的功能可以由if...else语句来实现B.若比较的数据类型为double,则不可以用switch语句来实现C.if...else语句的执行效率总是比switch语句高D.case子句中可以有多个语句,并且不需要大括号{}括起来5.以下程序的输出结果是()。A.输出结果为valueis99.9B.输出结果为valueis9C.输出结果为valueis9.0D.编译错误6.如下程序代码段,若a的值为3,则执行后c的值为()。A.1B.2C.3D.47.会导致死循环的语句是()。A.for(intk=0;k<0;k++)B.for(intk=10;k>0;k--)C.for(intk=0;k<10;k--)D.for(intk=0;k>0;k++)8.以下程序执行后,正确的结果是()。A.true,true,trueB.true,false,falseC.false,true,falseD.false,true,true9.关于String、StringBuffer、StringBuilder以下说法错误的是()。A.StringBuilder运行速度最快B.StringBuffer是线程安全的C.String的值是可变的D.StringBuffer运行速度比String快10.下列关于while循环、do-while循环和for循环说法错误的是()。A.while循环先执行条件判断,do-while循环执行循环体B.do-while循环结束的条件是关键字while后的条件表达式成立C.for循环结构中的3个表达式可以都不写D.while循环能够实现的操作,for循环也能实现第5题代码:publicclassTest{
publicstaticvoidmain(String[]args){
intx=4;
System.out.println("valueis"+(x>4)?99.9:9);
}
}第6题代码:if(a>0)
if(a>3)
c=2;
elsec=3;
elsec=4;第8题代码:publicclassTest{
privateStringname="abc";
publicstaticvoidmain(String[]args){
Testtest=newTest();
TesttestB=newTest();
Stringresult=test.equals(testB)+",";
result+=.equals(testB.name)+",";
result+===testB.name;
System.out.println(result);
}
}二、编程题1.某班有10位同学,请顺序输入10位同学的学号,保存在数组中,并输出所有同学的学号,输入字母n则提前退出输入。2.输入一个数组,输出所有奇数下标元素。3.已知一个数组A,将奇数位置元素存到B数组中,偶数元素存到C数组中。4.把1~36分别放入6×6的数组中,计算数组对角元素之和。5.有一个长度是10的数组,数组内有10个随机数字,要求按从小到大排序。6.通过Random类生成0~9之间的随机数10个,保存在数组中,分别统计0~9这10个数字分别出现了多少次。7.在排序好的数组中添加一个数字,将添加后的数字插入到数组合适的位置。8.现在定义如下的一个数组:intoldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5},要求将以上数组中值为0的去掉,将不为0的值存入一个新的数组,生成的新数组为:intnewArr[]={1,3,4,5,6,6,5,4,7,6,7,5}9.计算1/1+1/2+1/3+........+1/100的值。
第二部分:参考答案一、选择题答案与解析1.答案:C解析:C选项声明的是一维数组但初始化用了二维数组格式,错误。A是一维数组静态初始化;B是动态初始化;D是二维数组正确初始化。2.答案:D解析:A错误(Java中[]应在类型后或变量名后,但newint[10]是对的,不过D更标准);B语法错误;C不能同时指定长度和初始化;D是正确的静态初始化方式。3.答案:A解析:A正确,数组是对象,不同类型数组属于不同类;B错误(数组长度固定);C错误(Object的equals比较引用地址);D错误(Java声明数组不能在方括号中写长度)。4.答案:C解析:switch在多分支时效率更高,因为使用跳转表。if-else是顺序判断,不一定总是比switch效率高。5.答案:C解析:运算符优先级问题:+高于?:,所以实际执行的是("valueis"+(x>4))?99.9:9。字符串拼接后非空为true,返回99.9,但因为三元运算符类型一致,结果为99.9,输出valueis99.9。注意:这题有争议,实际运行结果因JDK版本可能不同,正确答案应为valueis9.0(C),因为x>4为false,返回9,但99.9是double,所以9被提升为9.0。6.答案:C解析:a=3时,a>0为true进入外层if;a>3为false(3不大于3),所以执行elsec=3。注意Java的else匹配最近的if。7.答案:C解析:k从0开始,k<10永远为true,k--使k越来越小,条件永远满足,死循环。A初始k=0,k<0不成立,不执行;B正常递减;D初始k=0,k>0不成立。8.答案:C解析:test.equals(testB):不同对象,返回false;.equals(testB.name):字符串内容比较,"abc"等于"abc",返回true;==testB.name:字符串常量池,"abc"是同一个对象引用,返回true。所以结果是false,true,true。但注意:实际上因为字符串驻留,==也为true,所以正确答案是D。9.答案:C解析:String是不可变的,一旦创建值不能改变。StringBuffer和StringBuilder是可变的。StringBuffer线程安全,StringBuilder速度最快。10.答案:B解析:do-while循环结束的条件是while后的条件表达式为false(不成立),而不是成立。A正确(while先判断);C正确(for(;;)是死循环);D正确(三种循环可互相转换)。二、编程题参考答案第1题参考答案程序代码:importjava.util.Scanner;
publicclassStudentIDs{
publicstaticvoidmain(String[]args){
Scannersc=newScanner(System.in);
String[]ids=newString[10];
intcount=0;
for(inti=0;i<10;i++){
System.out.print("请输入第"+(i+1)+"位同学的学号(输入n退出):");
Stringinput=sc.next();
if(input.equalsIgnoreCase("n")){
break;
}
ids[i]=input;
count++;
}
System.out.println("
已输入的学号:");
for(inti=0;i<count;i++){
System.out.println(ids[i]);
}
}
}第2题参考答案程序代码:publicclassOddIndex{
publicstaticvoidmain(String[]args){
int[]arr={1,2,3,4,5,6,7,8,9,10};
System.out.println("奇数下标元素:");
for(inti=1;i<arr.length;i+=2){
System.out.print(arr[i]+"");
}
}
}说明:数组下标从0开始,奇数下标就是1,3,5...第3题参考答案程序代码:publicclassSplitArray{
publicstaticvoidmain(String[]args){
int[]A={1,2,3,4,5,6,7,8,9,10};
//计算B、C数组长度
intlenB=(A.length+1)/2;//奇数位置
intlenC=A.length/2;//偶数位置
int[]B=newint[lenB];
int[]C=newint[lenC];
intidxB=0,idxC=0;
for(inti=0;i<A.length;i++){
if(i%2==0){//奇数位置(下标0,2,4...)
B[idxB++]=A[i];
}else{//偶数位置(下标1,3,5...)
C[idxC++]=A[i];
}
}
System.out.print("B数组(奇数位置):");
for(intn:B)System.out.print(n+"");
System.out.print("
C数组(偶数位置):");
for(intn:C)System.out.print(n+"");
}
}第4题参考答案程序代码:publicclassMatrixSum{
publicstaticvoidmain(String[]args){
int[][]matrix=newint[6][6];
intnum=1;
//填充数组
for(inti=0;i<6;i++){
for(intj=0;j<6;j++){
matrix[i][j]=num++;
}
}
//计算主对角线和
intsum=0;
for(inti=0;i<6;i++){
sum+=matrix[i][i];//主对角线:i==j
}
System.out.println("主对角线元素之和:"+sum);
//验证:1+8+15+22+29+36=111
}
}运行结果:主对角线元素之和=111第5题参考答案程序代码(冒泡排序):importjava.util.Random;
publicclassArraySort{
publicstaticvoidmain(String[]args){
Randomrand=newRandom();
int[]arr=newint[10];
//生成随机数
for(inti=0;i<10;i++){
arr[i]=rand.nextInt(100);//0-99
}
System.out.print("排序前:");
for(intn:arr)System.out.print(n+"");
//冒泡排序
for(inti=0;i<arr.length-1;i++){
for(intj=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
inttemp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
System.out.print("
排序后:");
for(intn:arr)System.out.print(n+"");
}
}第6题参考答案程序代码:importjava.util.Random;
publicclassCountNumbers{
publicstaticvoidmain(String[]args){
Randomrand=newRandom();
int[]arr=newint[10];
int[]count=newint[10];//统计0-9出现次数
//生成随机数并统计
for(inti=0;i<10;i++){
arr[i]=rand.nextInt(10);//0-9
count[arr[i]]++;
}
System.out.print("生成的随机数:");
for(intn:arr)System.out.print(n+"");
System.out.println("
各数字出现次数:");
for(inti=0;i<10;i++){
System.out.println(i+"出现了"+count[i]+"次");
}
}
}第7题参考答案程序代码:publicclassInsertNumber{
publicstaticvoidmain(String[]args){
int[]arr={1,3,5,7,9,11,13};
intnum=8;//要插入的数字
int[]newArr=newint[arr.length+1];
inti=0;
//找到插入位置
while(i<arr.length&&arr[i]<num){
newArr[i]=arr[i];
i++;
}
newArr[i]=num;//插入新数字
//复制剩余元素
while(i<arr.length){
newArr[i+1]=arr[i];
i++;
}
System.out.print("插入后数组:");
for(intn:newArr)System.out.print(n+"");
}
}运行结果:插入后数组:1357891113第8题参考答案程序代码:publicclassRemoveZero{
publicstaticvoidmain(String[]args){
int[]oldArr={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};
//统计非0元素个数
intcount=0;
for(intn:oldArr){
if(n!=0)count++;
}
//创建新数组
int[]newArr=newint[count];
intidx=0;
for(intn:oldArr){
if(n!=0){
newArr[idx++]=n;
}
}
System.out.print("新数组:");
for(intn:newArr)System.out.print(n+"");
}
}运行结果:新数组:134566547675第9题参考答案程序代码:publicclassSumSeries{
publicstaticvoidmain(String[]args){
doublesum=0;
for(inti=1;i<=100;i++){
sum+=1.0/i;//注意:必须用1.0保证浮点除法
}
System.out.println("1/1+1/2+...+1/100="+sum);
}
}运行结果:约等于5.187377517639621注意:必须写1.0/i而不是1/i,否则1/i是整数除法,结果永远为0。第4章习题练习与参考答案第一部分:习题一、选择题1.()不是面向对象编程的特征A.封装性B.健壮性C.多态性D.继承性2.关于类的定义错误的是()A.publicclasstestextendsObject{......}B.finalclassoperators{......}C.classPoint{......}D.voidclassPoint{......}3.关于构造方法,下面说法错误的是()A.构造方法不可以进行方法重载B.构造方法用来初始化该类的一个新对象C.构造方法具有和类名相同的名称D.构造方法不返回任何值4.this的作用包括()A.调用本类的构造方法B.表示类中的数据成员C.调用本类的成员方法D.以上都是5.构造方法在()时被调用A.类定义B.创建对象C.调用对象方法D.使用对象变量6.尝试编译以下程序会产生怎么样的结果?A.编译错误将发生在(1),因为构造函数不能指定返回值B.编译错误将发生在(2),因为该类没有默认构造函数C.编译错误将在(3)处发生,因为该类没有构造函数,该构造函数接受一个int类型的参数D.该程序将正确编译和执行7.在下列关于静态方法的描述中,错误的是()A.静态方法并不操作调用它的对象,所以不能用静态方法来访问实例属性B.可以使用"类名.方法名"来调用静态方法C.可以使用"对象.方法名"来调用静态方法D.静态方法需要先创建实例之后,才可以引用8.下面关于静态方法和实例方法的描述中,正确的是()A.静态方法可以访问静态数据成员,不可以访问实例数据成员B.实例方法可以访问静态数据成员,不可以访问实例数据成员C.静态方法可以访问静态数据成员,也可以访问实例数据成员D.静态方法不可以访问静态数据成员,也不可以访问实例数据成员9.关于static说法不正确的是()A.可以直接用类名来访问类中静态方法(public权限)B.静态块仅在类加载时执行一次C.static方法中不能有用this调用的方法D.不可以用对象名来访问类中的静态方法(public权限)10.关于下面的程序Test.java说法正确的是()A.3B.112C.13D.程序编译错误第6题代码:publicclassMyClass{
longvar;
publicvoidMyClass(longparam){var=param;}//(1)
publicstaticvoidmain(String[]args){
MyClassa,b;
a=newMyClass();//(2)
b=newMyClass(5);//(3)
}
}第10题代码:publicclassTest{
staticStringx="1";
staticinty=1;
publicstaticvoidmain(Stringargs[]){
staticintz=2;
System.out.println(x+y+z);
}
}二、问答题1.举例说明类和对象的关系。2.为什么说构造方法是一种特殊的方法?它与一般的成员方法有什么不同?3.举例说明类方法和实例方法,以及类变量和实例变量的区别。4.子类将继承父类的哪些成员变量和方法?子类在什么情况下隐藏父类的成员变量和方法?在子类中是否允许有一个方法与父类的方法名字和参数相同,而类型不同?说明理由。三、编程题1.编写一个Java应用程序,描写一个矩形类,并输出某个矩形的长、宽、周长和面积。具体要求如下:(1)定义Rectangle类,声明两个成员变量分别描述矩形的长和宽。(2)在Rectangle中声明两个方法分别计算矩形的周长和面积。(3)编写应用程序类,创建一个具体的矩形对象,在屏幕上打印输出该矩形的长、宽、周长和面积。2.按以下要求创建一个学生类(Student),并完成相应的操作。(1)其成员变量:姓名(name)、年龄(age)、身高(height)、体重(weight)(2)成员方法1:setAge用于给变量age赋值。(3)成员方法2:showInfo按一定格式输出各成员变量的值。(4)构造方法:通过参数传递,分别对name、height、weight初始化。(5)最后,创建这个类的对象,并完成对成员变量赋值和输出的操作。3.补充程序,验证方法的重载。下面已给出Area类的定义,定义应用程序类AreaTest,创建Area类的对象并调用每一个成员方法,观察不同的参数与调用方法的之间的关系。Area类程序清单:classArea
{
floatgetArea(floatr)
{
System.out.print("方法一:");
return3.14f*r*r;
}
doublegetArea(floatx,inty)
{
System.out.print("方法二:");
returnx*y;
}
floatgetArea(intx,floaty)
{
System.out.print("方法三:");
returnx*y;
}
doublegetArea(floatx,floaty,floatz)
{
System.out.print("方法四:");
return(x+x+y*y+z*z)*2.0;
}
}
第二部分:参考答案一、选择题答案与解析1.答案:B解析:面向对象编程的三大特征是:封装性、继承性、多态性。健壮性是程序质量特征,不是面向对象的特征。2.答案:D解析:类的定义前面不能加void返回类型。class前面可以加public、final、abstract等修饰符,但不能加void。3.答案:A解析:构造方法可以重载(多个构造方法,参数不同)。B、C、D都是构造方法的正确特征。4.答案:D解析:this关键字的作用:1)this(...)调用本类其他构造方法;2)this.成员变量表示当前对象的成员;3)this.方法()调用本类成员方法。5.答案:B解析:构造方法在使用new创建对象时自动调用,用于初始化对象的成员变量。6.答案:A解析:构造方法不能有返回类型,连void都不行。publicvoidMyClass(...)错误,应该是publicMyClass(...)。7.答案:D解析:静态方法属于类,不需要创建实例,可以直接用类名调用,也可以用对象名调用(不推荐)。D说法错误。8.答案:A解析:静态方法只能访问静态成员(static变量和static方法),不能访问实例成员;实例方法既可以访问静态成员也可以访问实例成员。9.答案:D解析:静态方法可以用对象名访问(虽然不推荐),也可以用类名访问。静态块在类加载时执行一次,static方法中不能用this。10.答案:D解析:staticintz=2;错误,方法内部的局部变量不能用static修饰。static只能修饰类成员,不能修饰局部变量。二、问答题参考答案1.类是对象的模板,对象是类的实例。解答:类是抽象的概念,描述一类对象的共同属性和行为;对象是具体的实体,拥有类定义的属性和方法。
例如:学生是一个类,描述所有学生的共同属性(姓名、学号、年龄)和行为(学习、考试);张三是学生类的一个具体对象,有具体的姓名、学号值。
一个类可以创建多个对象,每个对象有独立的内存空间。2.构造方法特殊性:与类同名、无返回值、new时自动调用。解答:构造方法与一般成员方法的区别:
1)**名称**:构造方法名必须与类名完全相同;成员方法名可以任意。
2)**返回值**:构造方法没有返回类型(连void都不能写);成员方法必须有返回类型。
3)**调用时机**:构造方法在创建对象(new)时自动调用,只调用一次;成员方法需要对象显式调用,可多次调用。
4)**作用**:构造方法用于初始化对象成员变量;成员方法用于实现特定功能。
5)**重载**:都可以重载,但构造方法重载是提供不同初始化方式。3.类成员(static)属于类,实例成员属于对象。解答:**类变量(static变量)vs实例变量**:
-类变量:用static修饰,所有对象共享一份内存,通过类名访问
-实例变量:无static,每个对象有独立副本,通过对象访问
**类方法(static方法)vs实例方法**:
-类方法:用static修饰,属于类,只能访问静态成员,无this
-实例方法:无static,属于对象,可访问所有成员,有this
**举例**:
4.子类继承非private成员;重写要求方法签名完全相同。解答:**继承内容**:子类继承父类所有非private的成员变量和方法(public、protected、默认访问权限)。
**隐藏/覆盖**:
-成员变量:子类定义同名变量会隐藏父类变量(不推荐)
-成员方法:子类定义**方法签名完全相同**的方法会重写(Override)父类方法
**方法重写要求**:
方法名、参数列表必须完全相同,返回类型必须兼容(可以是子类型)。
如果只是名字和参数相同但返回类型不同,不是重写,是编译错误!因为JVM无法仅通过返回类型区分方法调用。三、编程题参考答案第1题参考答案程序代码://矩形类
classRectangle{
doublelength;//长
doublewidth;//宽
//计算周长
doublegetPerimeter(){
return2*(length+width);
}
//计算面积
doublegetArea(){
returnlength*width;
}
}
//主类
publicclassRectangleTest{
publicstaticvoidmain(String[]args){
Rectanglerect=newRectangle();
rect.length=10;
rect.width=5;
System.out.println("矩形长:"+rect.length);
System.out.println("矩形宽:"+rect.width);
System.out.println("矩形周长:"+rect.getPerimeter());
System.out.println("矩形面积:"+rect.getArea());
}
}运行结果:矩形长:10.0矩形宽:5.0矩形周长:30.0矩形面积:50.0第2题参考答案程序代码:classStudent{
Stringname;
intage;
doubleheight;
doubleweight;
//构造方法
publicStudent(Stringname,doubleheight,doubleweight){
=name;
this.height=height;
this.weight=weight;
}
//设置年龄
voidsetAge(intage){
this.age=age;
}
//显示信息
voidshowInfo(){
System.out.println("姓名:"+name);
System.out.println("年龄:"+age+"岁");
System.out.println("身高:"+height+"cm");
System.out.println("体重:"+weight+"kg");
}
}
publicclassStudentTest{
publicstaticvoidmain(String[]args){
Studentstu=newStudent("张三",175.5,65.0);
stu.setAge(20);
stu.showInfo();
}
}运行结果:姓名:张三年龄:20岁身高:175.5cm体重:65.0kg第3题参考答案AreaTest程序代码:publicclassAreaTest{
publicstaticvoidmain(String[]args){
Areaarea=newArea();
//根据参数类型自动匹配调用的方法
System.out.println(area.getArea(5.0f));//调用方法一
System.out.println(area.getArea(3.0f,4));//调用方法二
System.out.println(area.getArea(3,4.0f));//调用方法三
System.out.println(area.getArea(1.0f,2.0f,3.0f));//调用方法四
}
}
//Area类(题目已给出)
classArea{
floatgetArea(floatr){
System.out.print("方法一:");
return3.14f*r*r;
}
doublegetArea(floatx,inty){
System.out.print("方法二:");
returnx*y;
}
floatgetArea(intx,floaty){
System.out.print("方法三:");
returnx*y;
}
doublegetArea(floatx,floaty,floatz){
System.out.print("方法四:");
return(x+x+y*y+z*z)*2.0;
}
}运行结果:方法一:78.5方法二:12.0方法三:12.0方法四:36.0第5章习题练习与参考答案第一部分:习题一、选择题1.采用()关键字修饰该类,则该类不能被继承。A.privateB.finalC.publicD.stop2.以下java程序代码,执行后的结果是()A.FredB.trueC.编译错误D.运动时抛出异常3.以下关于Object类的说法正确的是()A.Java中所有的类都直接或间接继承自Object,无论是否明确的指明,无论其是否是抽象类。B.Java中的接口(interface)也继承了Object类C.利用"=="比较两个对象时,Java调用继承自Object的equals方法,判断是否相等。D.如果类的定义中没有重新定义toString()方法,则该类创建的对象无法使用toStrig()方法。4.下列代码输出结果为()A.动物可以移动狗可以跑和走狗可以吠叫B.动物可以移动动物可以移动狗可以吠叫C.运行错误D.编译错误5.Java类之间的继承关系是()A.多重的B.单重的C.线程的D.不能继承6.在Java中,一个类中可同时定义多个同名的成员方法,但这些同名方法的形式参数的个数、类型或顺序不相同,这种面向对象程序特性称为()A.隐藏B.覆盖C.重载D.继承7.已知类B是类C的父类,()语句不正确A.Bx1=newB();B.Bx1=newC();C.Cx1=newC();D.Cx1=newB();8.子类调用父类的构造方法,描述正确的是()A.子类定义了自己的构造方法,就不会调用父类的构造方法B.子类必须通过this关键字调用父类的构造方法C.如果子类的构造方法没有通过super调用父类的构造方法,那么子类会先调用父类的不含参数的默认构造方法,再调用子类自己的构造方法D.创建子类对象时,先调用子类自己的构造方法,然后调用父类的构造方法9.下面关于包的说法中,正确的是()A.定义包必须是Java程序的第一条语句B.定义包不必是Java程序的第一条语句C.包的名称必须大写D.包的名称必须小写10.一个类只能被自己包中的类访问,类前面加()关键字A.缺省B.protectedC.publicD.private第2题代码:publicclassTest{
publicstaticvoidmain(String[]args){
Objecto=newObject(){
publicbooleanequals(Objectobj){
returntrue;
}
};
System.out.println(o.equals("Fred"));
}
}第4题代码:classAnimal{
publicvoidmove(){
System.out.println("动物可以移动");
}
}
classDogextendsAnimal{
publicvoidmove(){
System.out.println("狗可以跑和走");
}
publicvoidbark(){
System.out.println("狗可以吠叫");
}
}
publicclassTestDog{
publicstaticvoidmain(Stringargs[]){
Animala=newAnimal();
Animalb=newDog();
a.move();
b.move();
b.bark();
}
}二、编程题1.定义Person类,有4个属性:Stringname、intage、Stringschool和Stringmajor。①定义Person类的3个构造方法:第一个构造方法Person(Stringn,inta)设置类的name和age属性;第二个构造方法Person(Stringn,inta,Strings)设置类的name、age和school属性;第三个构造方法Person(Stringn,inta,Strings,Stringm)设置类的name、age、school和major属性。②在main方法中分别调用由不同的构造方法创建的对象,并输出其属性值。2.设计并封装Student类,包含有必要的成员属性和方法,其中成员属性中包含属性teacher(班主任),将该属性置为静态的,在主类中创建若干名学生对象(对象数组实现),并输出各学生的信息以及班主任信息。
第二部分:参考答案一、选择题答案与解析1.答案:B解析:final修饰的类不能被继承(最终类)。private修饰类只能在内部类中使用;public修饰类可以被继承;stop不是Java关键字。2.答案:B解析:这是匿名内部类重写了equals方法,无论传入什么参数都返回true。所以o.equals("Fred")返回true。3.答案:A解析:A正确,所有Java类都直接或间接继承自Object。B错误(接口不继承类);C错误(==比较引用地址,equals是方法调用);D错误(即使不重写也能使用Object的默认toString)。4.答案:D解析:编译错误!b的声明类型是Animal,Animal类中没有b
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 热力管网直埋管道施工方案
- 2026年健康管理师三级考试试题考试题库模拟训练含答案
- 2026年R1快开门式压力容器操作考题模拟考试试题(含答案)
- 2026浙江宁波市鄞州区公立学校招聘编外员工3人备考题库及1套参考答案详解
- 污水管道工程施工方案
- 2026年西式面点师初级证考试题及答案
- 2026广西中医药大学招聘46人备考题库及答案详解1套
- 2026山东德州市中心血站招聘1人备考题库及完整答案详解1套
- 2026江西赣州崇义县邦众人力资源有限公司第十四次招聘1人备考题库及一套参考答案详解
- 2026宁波公交通成巴士传媒有限公司招聘劳务派遣人员5人备考题库参考答案详解
- 2024年四川省凉山州中考地理试卷(含答案与解析)
- 全屋定制木作合同专业版
- 2024年上海松江国有资产投资经营管理集团有限公司招聘笔试参考题库含答案解析
- 人工晶体脱位护理查房
- 2021年人影高炮安全作业知识技能竞赛题库
- 作文方格纸400字
- 【标杆学习】阿里面试官手册
- 教练场地技术条件说明
- 旁站监理培训课件
- 辽宁省辽阳市各县区乡镇行政村村庄村名居民村民委员会明细及行政区划代码
- 【高中数学优质公开课】对数概念公开课课件
评论
0/150
提交评论