Java2实⽤教程第五版课后习题解析(持续更新,适合初学者)
习题1
写下这篇⽂章的主要⽬的是帮助初学者更好地学习Java语⾔,所有题⽬都是照着书⼀个字⼀个字敲出来的,代码都是经过思考写上去的,每道题会有详细的解析,并⾮随便写个答案糊弄⼀下的,写作不易且看且珍惜。如果有错误或者有更优解请留⾔,我会注明ID并修改。
⼀. P15 习题1
java switch case string1.问答题
1.Java语⾔的主要贡献者是谁?
-James Gosling
2.开发Java应⽤程序需要经过哪些主要步骤?
-编写源⽂件、编译源⽂件⽣成字节码和加载运⾏字节码。
3.Java源⽂件是由什么组成的?⼀个源⽂件中必须要有public类吗?
-Java源⽂件是由若⼲个书写形式互相独⽴的类组成。不⼀定,可以没有public类。(具体的分析见本章结尾总结。)
4.如果JDK的安装⽬录是D:\jdk,应当怎样设置path和classpath的值?
-path配置时将⽬录改为D:\jdk下的bin⽂件夹。
-classpath配置时没有固定⽬录,⽅便查阅即可。
5.Java源⽂件的扩展名是什么?Java字节码的扩展名是什么?
-Java原⽂件的扩展名是.java,Java字节码的扩展名是.class
6.如果Java应⽤程序主类的名字是Bird,编译之后,应当怎样运⾏该程序?
-在Windows的cmd命令窗⼝下,编译之后,使⽤java Bird命令运⾏该程序。
7.有哪两种编程风格,在格式上各有怎样的特点?
-Allmans风格:也称“独⾏风格”,左右⼤括号各独占⼀⾏,如下列代码(不需要看懂代码只需要体会编程风格):
class Allmans
{
public static void main(String[] args)
{
int result =0;
for(int x =1; x <101; x++)
{
result = result + x;
}
}
}
※:当代码量较⼩时适合使⽤“独⾏”风格,代码布局清晰,可读性强。
-Kernighan风格:也称“⾏尾”风格,如下列代码所⽰(不需要看懂代码只需要体会编程风格):
public class Test01 {
public static void main(String[] args){
// TODO Auto-generated method stub
//CSDN \u6d3e duke \u661f
//需求:⽤for循环出1~10000中所有的素数,要求每8个换⼀⾏输出
//素数:只能被1和⾃⾝整除的数。
int sum =0;
for(int i=2;i<=10000;i++){
boolean isSuShu =true;
for(int j=2;j<i;j++){
if(i % j ==0){
isSuShu =false;
break;
}
}
if(isSuShu){
System.out.print(i +" ");
sum++;
if(sum %8==0){System.out.println();
}
}
}
}
}
⼆.选择题
1.下列哪个是JDK提供的编译器? (B)
A.
B.
C.
D.
※:A是Java解释器。B是Java编译器。C是Java反编译器。D⼤多⽤来运⾏GUI程序。
2.下列哪个是Java应⽤程序主类中正确的main⽅法? (D)
A. public void main(String args[ ])
B. static void main(String args[ ])
C. public static void Main(String args[ ])
D. public static void main(String args[ ])
3.阅读下列Java源⽂件,并回答问题。
public class Person {
void speakHello(){
System.out.println("您好,很⾼兴认识您");
System.out.println("nice to meet you");
}
}
class Xiti {
public static void main(String[] args){
Person zhang =new Person();
zhang.sperkHello;
}
}
(1)上述源⽂件的名字是什么?
-Person.java
(2)编译上述源⽂件将⽣成⼏个字节码⽂件?这些字节码⽂件的名字都是什么?
-两个字节码⽂件。Person.java和Xiti.java。
```
这⾥后缀应该是.class,写的时候没仔细看。(感谢咕噜咕噜崩的纠错)···
(3)在命令执⾏java Person 得到怎样的错误提⽰?执⾏java xiti得到怎样的错误提⽰? 执⾏java Xiti.class 得到怎样的错误提⽰?执⾏java Xiti得到怎样的输出结果?
-错误: 错误: 在类 Person 中不到 main ⽅法, 请将 main ⽅法定义为:public static void main(String[] args)否则 JavaFX 应⽤程序类必须扩展javafx.application. Application
-错误: 不到或⽆法加载主类 xiti 原因: java.lang.ClassNotFoundException: xiti
-您好,很⾼兴认识您 nice to meet you
⼩结:
public class和class的区别:
*⼀个java源⽂件当中可以定义多个class
*⼀个java源⽂件当中public class不是必须的
*⼀个class会定义⽣成⼀个xxx.class字节码⽂件
*⼀个java源⽂件当中定义公开的类的话,只能有⼀个,并且该类名称必须和java源⽂件名称⼀致。
*每⼀个class当中都可以编写main⽅法,都可以设定程序的⼊⼝
*※:在cmd命令窗⼝执⾏java xxx,那么要求xxx.class当中必须有main⽅法,否则报错。
习题2
⼀.P30 习题2
1.问答题
(1)什么叫标识符?标识符的规则是什么?false是否可以作为标识符?
第⼀问:
⽤来标识类名、变量名、⽅法名、类型名、数组名、⽂件名的有效字符序,称为标识符。
第⼆问:
-
只能由"数字、字母、下划线_、美元符号S”组成,不能含有其他符号
-不能以数字开头
-严格区分⼤⼩写
-关键字不能做标识符
-理论上⽆长度限制,但是最好不要太长
-Java语⾔源代码采⽤的是Unicode编码⽅式,所以"标识符”可以中⽂。
第三问:false属于数据类型的关键字不能作为标识符。
(2)什么叫关键字?true和false是否是关键字?请说出6个关键字。
第⼀问:关键字就是Java语⾔中已经被赋予特定意义的⼀些单词
第⼆问:if、for、while、public、return、class(其实有很多关键字,可以⾃⾏百度)
(3)Java的基本数据类型都是什么?
⼋种基本数据类型:byte,int,short,long,float,double,boolean,char
(4)float型常量和double型常量在表⽰上有什么区别?
在Java语⾔当中,带⼩数点的字⾯值默认时被当作double型数据,如果在数据后⾯加f/F表⽰float型,加d/D表⽰double型。
(5)怎样获取⼀维数组的长度,怎样获取⼆维数组中⼀维数组的个数?
第⼀问:⼀维数组名.length。
第⼆问:⼆维数组名.length。
2.选择题
(1)下列哪项字符可以作为标识符? (C)
B.default
C._int
解析:A和B都是关键字不能作为标识符,D中含有除下划线_美元符号$外的其他字符,所以不能做为标识符。
(2)下列哪三项是正确的float变量的声明? (ADF)
A.float foo = -1;
B.float foo = 1.0;
C.float foo = 42e1;
D.float foo = 2.02f;
E.float foo = 3.03d;
F. float foo = 0x0123;
解析:B中没有加f/F,上⾯说过在Java语⾔当中带⼩数点的字⾯值默认是double型,⼤容量类型转⼩容量类型需要加强制类型转换符。C是42*10即420是⼀个整型字⾯值,不是浮点型。E中后⾯的d是do
uble型后缀,应该⽤f/F。
(3)下列哪⼀项叙述是正确的? (B)
A.char 型字符在Unicode表中的位置范围是0~32767
B.char 型字符在Unicode表中的位置范围是0~65535
C.char 型字符在Unicode表中的位置范围是0~65536
D.char 型字符在Unicode表中的位置范围是-32768~32767
(4)以下哪两项是正确的char型变量的声明? (BE)
A.char ch = “R”;
B.char ch = ‘\’;
C.char ch = ‘ABCD’;
D.char ch = “ABCD”
E.char ch = ‘\ucafe’;
F.char ch = ‘\u10100’;
解析:⾸先明确char类型是占2个字节的。B中反斜杠对反斜杠转义,得到⼀个反斜杠\,可以。E中是⼀串Unicode码,转换后只占两个字节,也可以。
(5)下列程序中哪些【代码】是错误的?(解析写在代码中)
public class E {
public static void main(String[] args){
int x =8;
byte b =127;//【代码1】
b = x;//【代码2】b是byte类型的变量,⽽x是int类型的变量
x =12L;//【代码3】L表⽰该字⾯值是long类型的字⾯值,⽽x是int类型的变量
long y =8.0;//【代码4】8.0是double类型的字⾯值,⽽y是long类型的变量
float z =6.89;//【代码5】6.89是double类型的字⾯值,⽽z是float类型的变量
}
}
(6)对于“int a[] = new int [3]”,下列哪个叙述是错误的? (B)
A. a.length 的值是3。
B. a[1]的值是1。
C. a[0]的值是0。
D. a[a.length-1]的值等于a[2]的值。
3.阅读或调试程序
此题属于操作题,请⾃⼰上机操作体会。
4.编程题
(1)编写⼀个应⽤程序,给出汉⼦“你”、“我”、“他”在Unicode表中的位置
public class A {
public static void main(String args[]){
System.out.println((int)'你');
System.out.println((int)'我');
System.out.println((int)'他');
}
}
⼩知识:可以使⽤JDK中⾃带的命令,可以将中⽂转换成Unicode编码形式。使⽤⽅法:在cmd命令⾏输⼊native2ascii,回车,然后输⼊⽂字之后回车即可得到Unicode编码。
(2)编写⼀个Java应⽤程序,输出全部的希腊字母
public class B {
public static void main (String args[]){
char first ='α';
char end ='ω';
for(char i=first ; c<=end ; c++){
System.out.println(i);
}
}
}
习题3
1.问答题
(1)关系运算符的运算结果是怎样的数据类型?
会返回⼀个布尔类型(boolean)的值。(true、fasle)
※:关系运算符(也叫做⽐较运算符)包括:>、<、==、>=、<=、!=
(2)if语句中的条件表达式的值是否可以是int类型?
不⾏。条件表达式只能是⼀个布尔表达式,⽽布尔表达式的返回值是boolean类型。
(3)while语句中的条件表达式的值是什么类型?
布尔类型。
(4)switch语句中必须有default选项吗?
可以没有default选项。
(5)在while语句的循环体中,执⾏break语句的效果是什么?
当程序执⾏到break语句时,直接退出while循环,不执⾏while循环中的任何代码。
(6)可以⽤for语句代替while语句的作⽤吗?
可以。但是编写出来的代码不同,执⾏出来效果⼀样。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论