admin 管理员组文章数量: 1086019
2024年12月31日发(作者:文件夹压缩包怎么弄)
第1章 Java语言概述
选择题
1-1 在下列概念中,Java语言只保留了(B)
A. 运算符重载 B. 方法重载
C. 指针 D. 结构和联合
1-2 下列关于Java语言特性的描述中,错误的是(D)
A. 支持多线程操作
B. Java程序与平台无关
C. Java和程序可以直接访问Internet上的对象
D. 支持单继承和多继承
1-3 下列关于Java Application程序在结构上的特点的中,错误的是(C)
A. Java程序是由一个或多个类组成的
B. 组成Java程序的若干个类可以放在一个文件中,也可以放在多个文件中
C. Java程序的文件名要与某个类名相同
D. 组成Java程序的多个 类中,有且仅有一个主类
1-4 Java程序经过编译后生成 的文件的后缀是(C)
A. .obj B. .exe C. .class D. .java
1-5 下列关于运行字节码文件的命令行参数的描述中,正确的是(A)
A. 第一个命令行参数(紧跟命令字的参数)被存放在args[0]中
B. 第一个命令行参数被存放在args[1]中
C. 命令行的命令字被存放在args[0]中
D.数组args[]的大小与命令行参数的个数无关
判断题
1-1 JavaC++的语言之前问世的。(错)
1-2 Java语言具有较好的安全性和可移植性及与平台无关等特性。(对)
1-3 Java语言中取消了联合的概念,保留了结构概念。(错)
1-4 Java语言中数据类型占内在字节数与平台无关。(对)
1-5 Java语言中可用下标和指针两种方式表示数组元素。(错)
1-6 Java语言的源程序不是编译型的,而是编译解释型的。(对)
1-7 操作系统中进程和线程两个概念是没有区别的。(错)
1-8 Java语言既是面向对象的又是面向网络的高级语言。(对)
1-9 Java程序分为两大类:一类是Application程序,另一类是Applet程序。前者又称
Java应用程序,后者又称为Java小应用程序。(对)
1-10 Java Application程序是由多个文件组成的,其中可以有也可以没有主文件。(错)
1-11 组成Java Application的若干类中,有且仅有一个主类,只有主类中含有主方法
main()。(对)
1-12 Java Application程序中,必有一个主方法main(),该方法有没有参数都可以。(对)
1-13 Java程序中是不区分大小写字母的。(错)
1-14 下述两个命令:javac和java是不同的,编译时用前者,运行时用后者。(对)
1-15 Java程序编译后生成的是字节码文件,其后缀是.exe。(错)
1-16 字节码文件机器是不能直接识别的,它要经过解释器,边解释边执行。(对)
1-17 在Java程序中,使用import语句引入类是在解释器中实现的。(对)
1-18 在运行字节码文件时,使用java命令,一定要给出字节码文件的扩展名.class。(错)
1-19 Java程序中有多个类,编译后只生成一个字节码文件,其名字同主类名。(错)
1-20 Java程序中出现的输出方法println()和print()是完全一致的。(错)
分析程序的输出结果题
1-1 程序Exerl_
import .*;
public class Exerl_1
{
public static void main (String args[ ])
{
("This is a ");
n("strint.")
}
}
该程序的输出结果如下:
This is a string.
1-2 程序Exerl_
Import .*;
Public class Exerl_2
{
Public static void mian(String args[ ])
{
Char ch=" ";
n("Input a character:");
Try{
ch=(char)();
}
Catch(IOException e)
{ }
n("The character is '"+ch+"'");
}
}
该程序的输出结果如下
Input a character:k↙
The character is ‘k’
1-3 程序Exerl_
import .*;
public class Exerl_3
{
Public static void main(String args[ ])
{
String str= " "
n("Input a string:");
Try{
BufferedReader in =new BufferedReader(new InputStreamReader());
str=ne();
}
}
Catch(IOException e )
{ }
n("The string is '"+str+ " " ");
}
1-4 程序Exerl_
import .*
public class Exerl_4
{
public static void main(String args[ ])
{
A a=new A;
a.i=8;
a.d=1.25;
("该程序输出结果如下所示");
n("ti="+a.i+",d="+a.d);
}
}
class A
{
int i;
double d;
void meth(string str)
{
n(str);
}
}
该程序输出结果如下所示
i=8,d=1.25
编程题
1-1编写一个Java Application程序,使该程序运行后输出字符串"Hello!How are you."。
参考程序内容如下
import .*;
public class prol_1
{
public static void main(String args[ ])
{
n("Hello!How are you.");
}
}
1-2 编写一个Java Application程序,使该程序输出显示如下结果:
Var1=10,var2=19.5
Ok!
参考程序内容如下:
import .*;
public class prol_2
{
public static void main(String args[ ])
{
int var1=10;
double var2=19.5;
n("var1="+var1+",var2="+var2);
n("ok!");
}
}
第2章 Java语言语法基础
选择题
2-1 Java语言所用的字符集中字符是 B 位。
A. 8
B. 16
C. 32
D. 64
2-2 下列关于标识符的描述中,正确的是 A 。
A. 标识符中可以使用下划线和美元符
B. 标识符中可以使用连接符和井号符
C. 标识符中大小写字母是无区别的
D. 标识符可选用关键字
2-3 Java语言和各种分隔符中,非法的是 D 。
A. 空白符
B. 分号
C. 逗号
D. 问号
2-4 下列是Java语言中可用的注释,其中错误的是 C 。
A. //
B. /*…*/
C. /**…**/
D. /**…*/
2-5 Java语言中字符型数据的长度是 B 位。
A. 8
B. 16
C. 32
D. 64
2-6 下列描述的两种数据类型的长度不相等的是 A 。
A. 字符型和布尔型
B. 字节型和布尔型
C. 短整型和字符型
D. 整型和单精度浮点型
2-7 下列是Java语言中的复合数据类型,其中错误的是 C 。
A. 数组
B. 接口
C. 枚举
D. 类
2-8 下面是关于Java语言中数据类型的强制转换的描述,其中错误的是 C,D 。
A. 当数据类型从高转换为低时需强制转换
B. 强制转换时使用强制转换去处符,形如(<类型>)
C. 浮点型数据强制转换为整型时,小数部分四舍五入
D. 赋值操作中都要采用强制类型转换
2-9 下列关于常量的描述中,错误的是 B,D 。
A. Java语言的常量有5种
B. 浮点型数12.456是单精度的
C. 布尔型常量只有两个可选值:true和false
D. 字符串常量含有结束符'0 '
2-10 下列关于定义符号常量的描述中,错误的是 A,C 。
A. 定义符号常量使用关键字const
B. 定义符号常量时要赋初值
C. 符号常量既可以定义为类成员,又可在方法中定义
D. 定义符号常量时必须给出数据类型
2-11 下列关于变量的默认值的描述,其中错误的是 B,C 。
A. 定义变量而没有进行初始化时,该变量具有默认值
B. 字符型变量的默认值为换行符
C. 布尔型变量的默认值是true
D. 变量的默认值是可以被改变的
2-12 下列关于变量定义的描述中,正确的是 A,C 。
A. 定义变量时至少应指出变量名字和类型
B. 定义变量时没有给出初值该变量可能是无意义值
C. 定义变量时,同一个类型多个变量间可用逗号分隔
D. 定义变量时必须要给变量初始化
2-13 下列关于变量作用域的描述,错误的是 D 。
A. 在某个作用域定义的变量,仅在该作用域内是可见的,而在该作用域外是不可
见的
B. 在类中定义的变量的作用域在该类中的方法内可以使用
C. 在方法中定义 的变量的作用域仅在该方法体内
D. 在方法中作用域可嵌套,在嵌套的作用域中可以定义同名变量
2-14 下列关于增1(++)减1(--)1运算符的描述中,正确的是 A,B 。
A. 增1 减1运算符都是单目运算符
B. 增1 减1运算符都具有前缀运算和后缀运算
C. 增1 减1运算符不会改变变量的值
D. 增1 减1运算符前缀运算和后缀运算后表达式值是相同的
2-15 关于运算符优先级的描述中,错误的是 D 。
A. 在表达式中,优先级高的运算符先进行计算
B. 赋值运算符优先级最高
C. 单目运算符优先级高于双目和三目运算符
D. 逻辑运算符优先级高于逻辑位运算符
2-16 下列关于表达式的描述中,正确的是 A,C 。
A. 任何表达式都有确定的值和类型
B. 算数表达式的类型由第一个操作数的类型决定
C. 逻辑表达式的操作数是逻辑型的
D. 赋值表达式的类型取决于右值表达式的类型
2-17 下列表达式中,非法的是 B,C 。
int a=5,b=6;double c=1.1,d=2.2
A. a+c+++d
B. (a+c)- -
C. c<
D. a!=b?c:d
2-18 下列关于条件语句的描述中,错误的是 A,C 。
A. If语句可以有多个else子句和else if子句
B. If语句中可以没有else子句和else if子句
C. If语句中的〈条件〉可以使用任何表达式
D. If语句的if体、else体内可以有循环语句
2-19 下列关于开关语句的描述中,错误的是 B,C,D 。
A. 开关语句中,default子句可以省略
B. 开关语句中,case子句的〈语句序列〉中一定含有break语句
C. 开关语句中,case 子句和default子句都可以有多个
D. 退出开关语句的唯一条件是执行break语句
2-20 下列关于循环语句的描述中,错误的是 B,D 。
A. 任何一种循环体内都可以包含一种循环语句
B. 循环体可以是空语句,也可以是空
C. 循环体内可以出现多个break语句
D. 循环语句中,循环体至少被执行一次
2-21 下列循环语句的循环次数是 D 。
int i=5;
do{
n(i--);
i--;
}while(i!=0);
A. 0
B. 1
C. 5
D. 无限
2-22 下列循环语句中,循环体被执行的次数为 D 。
for (int i=0,j=0;(j!=18)||(i<4);i++)
A. 3
B. 4
C. 不确定
D. 无限
2-23 下列关于Java语言的数组描述中,错误的是 D 。
A. 数组的长度通常用length来表示
B. 数组下标从0开始
C. 数组元素是按顺序存放在内在的
D. 数组在赋初值和赋值时都不判界
2-24 下列关于数组的定义形式,错误的是 A,C,D 。
A. int[]a;a=new int;
B. char b[];b=new char[80]
C. int[]c=new char[10]
D. int[]d[3]=new int[2][]
2-25 下列关于字符串的描述中,错误的是 B 。
A. Java语言中,字符串分为字符串常量和字符串变量两种
B. 两种不同的字符串都String类的对象
C. Java语言中不再使用字符数组存放字符串
D. Java Application程序的main()和参数args[]是一个String类的对象数组,用它可
存放若干个命令行参数
判断题
2-1 Java语言标识符中可以使用美元符。(对)
2-2 Java语言标识符中大小写字母是没有区别的。(错)
2-3 分号(;)、逗号(,)和冒号(:)都可作为Java语言中的分隔符。(对)
2-4 文档注释符/**…*/是Java语言特有的注释符。(对)
2-5 Java语言的基础数据类型有4种:整型、浮点型、字符型和布尔型。(对)
2-6 Java语言的复合数据类型有3种:数组、类和包。(错)
2-7 Java语言中,字节型与字符型是一样的。(错)
2-8 Java语言是一种强类型语言,数据类型转换有两种:隐含转换和强制转换(对)
2-9 数据由高类型转换到低类型时,采用强制转换,数据精度要受到损失。(对)
2-10 布尔型常量可以自动转换为短整型常量 。(错)
2-11 Java语言使用的是Unicode字符集,每个字符在内在中占8位。(错)
2-12 Java语言的字符串中不隐含结束符。(对)
2-13 Java语言中定义符号常量使用final关键字。(对)
2-14 Java语言中不同数据类型的长度是固定的,不随机器硬件不同而改变。(对)
2-15 Java语言中只有无符号的字符型。(对)
2-16 字符型变量中只存放一个字符。(对)
2-17 定义变量时必须进行初始化,否则变量具有无意义的值。(错)
2-18 若定义变量时不进行初始化,则该变量一定具有默认值。(错)
2-19 Java语言中,变量出现的位置只有一种,即为类体内定义的成员变量。(错)
2-20 Java语言规定在的程序块中不允许定义同名变量。(对)
2-21 求余运算符%可用于整数和浮点数。(错)
2-22 关系运算符组成的表达式是逻辑表达式。(错)
2-23 逻辑运算符&和&&是没有区别的,都具有逻辑与的功能。(错)
2-24 运算符& 是逻辑与运算符还是按位与运算符取决于操作数的类型。(对)
2-25 运算符“>>”和“>>>”都是右移运算符,其区别在于对向右移出的位是舍弃还是保
留。(错)
2-26 赋值运算符组成的赋值表达式中,通常将右边表达式的类型转换为左边变量的类
型后再赋值。(对)
2-27 三目运算符的3个操作数中,第一个操作数的类型必须是逻辑型的(对)
2-28 强制类型转换运算符的功能是将一个表达式的类型转换为所指定的类型。(对)
2-29 对象运算符instanceof是一个单目运算符,其表达式的值的类的对象。(错)
2-30 内存分配运算符new可以为创建的数组分配内存空间,但不能为创建的变量分配
空间。
2-31 运算符的优先级中,最低的是三目运算符。(错)
2-32 运算符的结合性中,除了三目运算符是自右向左外,其余都是自左向右。(错)
2-33 关系表达式和逻辑表达式的值都是布尔型的。(对)
2-34 赋值表达式的值不能是逻辑型的。(错)
2-35 条件表达式的类型总是“?”和“:”之间的操作数的类型。(错)
2-36 块语句可能嵌套,外层块语句定义的变量在内层块语句中是可见的(对)
2-37 条件自勉中的<条件>表达式可以是任何表达式。(错)
2-38 在条件语句的嵌套结构中,一个if子句最多有一个else子句与它配对,而且一定
是距离它最近的。(对)
2-39 开关语句中,case子句后面的<语句序列>可以是块语句。(对)、
2-40 循环语句中,<条件>表达式必须是逻辑型表达式。(对)
2-41 在Java语言中,break语句不能作用在<标号名>的左边。(错)
2-42 Java语言中,数组在静态和动态赋值时都判越界。(对)
2-43 说明或声明数组时不分配内存大小,创建数组时分配内存大小。(对)
2-44 基本数据类型的数组在创建时系统将指定默认值。(对)
2-45 数组在定义时可以进行初始化,使用初始值表。(对)
2-46 Java语言中数组元素只有下标表示,没有指针表示。(对)
2-47 创建数组时,系统自动将数组元素个数存放在length变量中,可供用户对数组操
作时使用。(对)
2-48 字符串可分为字符串常量和字符串变量两种,它们都是对象。(对)
2-49 Java语言中不使用字符数组存放字符串(对)
2-50 下列创建字符串s的方法是错误的。(对)
char ch[]={'m',m','n','n'};
char s[]=new char(ch);
计算表达式的值,上机验证其结果题
2-1 已知:int a=3,b=5;
求下列表达式的值:
(1) (a+b)%b
(2) b>>a
(3) -b>>>a
(4) A&b
(5) ++a-b++
答案:(1)3 (2)0
2-1 已知:double x=1.5,y=2.8;
求下列表达式的值:
(3)53670911 (4)1 (5)-1
(1) x++>y—
(2) x+4/5
(3) 2*x==y
(4) y/6*6
(5) y+=x-=1
答案(1)false (2)1.5 (3)false
2-3 已知:Boolean b1=true, b2=false; int a=6;
求值:
(1) b1&b2
(2) !b1&&b2||b2
(3) b2&b1|!b2
(4) b1!=b2
(5) !(a>6)&a6|b2=true)
答案:(1)false (2)false
2-4 已知:int a[]={3,5,7,9};
(4)2.8 (5)3.3
(3)true (4)false (5)true
求值:
a[0]+a[1]
a[3]=6
a[2]*a[3]>4*a[3]
(a[0]+=a[1])+ ++a[2]
for(int i=1;i<4;i++)
a[0]+=a[i];
答案:(1)8 (2)6 (3)true (4)16
分析程序输出结果题
2-1 Exer2_程序
public class Exer2_1
{
public static void main(String args[])
{
int i=3;
char c='p';
float f=3.5f;
double d=32.56;
short s=25;
booleab=true;
string st="new";
n("i+s="+(i+s));
n("d+f="=(d+f));
n("st+"year"="+st+"year");
n("!b||b="+(!b||b));
n("b?i:d="+(b?i:d));
}
}
输出结果如下:
i+s=28
d+f=36.06
st+"year"=new year
c+2=r
!b||b=true
b?i:d=3.0
2-2 Exer2_程序
public class Exer2_2
{
public static void main(String args[])
{
int suma=0,sumb=0;
for(int a=0,b=0;a<5;a++,b++)
{
suma+=a;
(1)
(2)
(3)
(4)
(5)
(5)24
sumb+=b;
}
n("suma="+suma+",sumb="+sumb)
}
}
输出结果如下:
suma=10,sumb=60
2-3 Exer2_程序
public class Exer2_3
{
public static void main(String args[])
{
int i,j;
First_Loop:
for(i=1;i<50;i++)
{
for(j=2;j
if(i%j)==0
continue First_Loop;
n(i);
}
}
}
输出结果如下:
1
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
2-4 Exer2_程序
public class Exer2_4
{
public static void main(String args[])
{
char ch='B';
switch(ch)
{
case'A':n("5"):break;
case'B':n("4"):break;
case'C':n("3"):break;
default:n("0");
}
}
}
输出结果如下:
4
2-5 Exer2_程序
public class Exer2_5
{
public static void main(String args[])
{
int a=3,b=5;
if(a==3)
if(b==1)
a++;
else
b++;
n(a+","+b);
int x=1,y=4;
if(x==2)
{
if(y==4)
x++;
}
else
y++;
n(x+","+y);
}
}
输出结果如下:
3,5
1,5
2-6 Exer2_程序
public class Exer2_6
{
public static void main(String args[])
{
int i;
for(i=1;i<10;i++)
{
if(i>2)
n("AB");
else
n("BA");
if(i==5)
break;
}
n("i="+i);
}
}
输出结果如下:
BA
BA
AB
AB
AB
i=5
2-7 Exer2_程序
public class Exer2_7
{
public static void main(String args[])
{
long j1=1,j2=1;
for(int i=5;i>=1;i--)
j1*=i;
for(int i=4;i>=1;i--)
j2*=i;
n("5!+4!"+(j1+j2));
}
}
输出结果如下:
5!
4!=144
2-8 Exer2_程序
public class Exer2_8
{
public static void main(String args[])
{
String s1="123456";
char ch[]={'4','5','6','7','8'};
double d[];
d=new double[5];
d[0]=1.2f;d[1]=2.3f;d[2]=3.4f;d[3]=4.5f;d[4]=5.6f;
String s2[]={"ab","cd","ef"};
int[]a[]={{1,2,3},{4,5,6},{7,8,9}};
n("s1="+s1);
for(ing i=0;i<5;i++)
(ch[i]+",");
n();
for(i=0;i<5;i++)
d[0]+=d[i];
n("d[0]="+d[0]);
n(s2[0]+";"+s2[1]+";"+s2[2]);
for(i=0;i<3;i++)
{
n();
for(int j=0;j<3;j++)
(a[i][j])+" ";
}
}
}
输出结果如下:
s1=123456
4,5,6.7.8
d[0]=18.216
ab;cd;ef
1 2 3
4 5 6
7 8 9
2-9 Exer2_程序运行时命令行带有参数。运行格式如下:
C:Exer2_9 51 100↙
程序Exer2_内容如下:
public class Exer2_8
{
public static void main(String args[])
{
int sum=0;
ing i=nt(args[0]);
int n=nt(args[1]);
for(;i<=n;i++)
sum=+=i;
n("sum="+sum);
}
}
输出结果如下:
sum=3775
2-10 Exer2_程序
public class Exer2_8
{
public static void main(String args[])
{
A:
for(int i=0;i<5;i++)
{
for(ing j=0;j<8;j++)
{
("*");
n();
continue A;
}
}
}
}
输出结果如下:
*
*
*
*
*
编程题
2-11 按下列要求写出Java语言的语句。
(1) 定义一个double型变量d,并赋初值为2.5。
该语句如下:
Double d=2.5;
(2) 在屏幕上输出显示(1)中所定义的变量d的值。
该语句如下:
n("d="+d);
(3) 定义一个字符型一维数组ch它的大小为10。
该语句如下:
char ch[]=new char[10];
(4) 定义一个字符串常量s1,其字符串为“abc”
String s1="abc";
(5) 定义一个boolean型变量b,赋初值为true。
boolean b=true
(6) 在屏幕上输出显示26个大写字母。
实现该功能的程序段如下:
for(char ch='a';ch<='z';ch++)
(ch)
n();
(7) 将代数式s=a
2
+2ab+b
2
写成一个赋值表达式语句。
该语句如下:
s=a*a+2*a*b+b*b
(8) a,b和c是3个int型变量,用条件表达式写出a>b时,c值为a,否则c值为b。
int a,b,c;
┊
if(a>b)
c=a;
else
c=b;
(9) 用for循环语句实现下述循环:循环变量m为100,每次m循环减10;当m
等于50时退出循环,循环体为空语句。
for(int m=100;m==50;m-=10)
{ }
(10) 使用带标号名的break语句,在双重for循环自勉结构中,一次从内层循环跳
出外层循环。
该功能程序段如下:
┊
F:for(ing i=…)
{
┊
for(ing j=…)
{
┊
break F;
}
┊
}
┊
2-12 编程求出一个一维int型数组的元素最大值、最小值、平均值和所有元素之和。
程序内容如下:
import .*;
public class pro2_1
{
public static void main(String args[])
{
int a[]={23,76,45,21,63,90,46,83};
int max,min,sum;
max=min=a[0];
for(int i=1;i<8;i++)
4-13 HTML中多数标记是成对出现的,也有不成对出现的标记。(对)
4-14 HTML中是区分大小写字母的。(错)
4-15 通过HTML文件中使用的PARAM标记可以向Applet程序传递参数的。(对)
4-16 parseInt()方法的功能是将int型数据转换成String型数据的。(错)
4-17 AWT提供了许多标准的GUI组件和布局管理等类。(对)
4-18 Java语言采用了16位颜色标准,Java的调色板保证128色。(错)
4-19 Graphics类提供了3种绘制文本的方法,其方法名都是drawString()。(对)
4-20 绘制椭圆的方法是drawOval(),使用该方法也可以绘制圆。(对)
分析程序的输出结果题
4-1 Exer4_
import ;
import .*;
public class Exer4_1 extends Applet
{
String str="学习JAVA小程序";
public void paint(Graphics g)
{
ring(str,100,100);
}
}
请读者自编相应的HTML文件
运行该程序之前,编写一个HTML文件,文件名为Exer4_。程序内容如下:
运行时,先将Exer4_文件使用javac命令编译成Exer4_文件,然后,再运
行Exer4_文件,则输出显示如下信息:
学习JAVA小程序
4-2 Exer4_
import ;
import .*;
public class Exer4_2 extends Applet
{
String str1,str2;
public void init()
{
str1=getParameter("name");
str2=getParameter("birthday");
if(str1==null)str1="";
if(str2==null)str2="";
}
public void paint(Graphics g)
{
ring("姓名是"+str1+"出生年月日是"+str2,100,100);
}
}
Exer4_文件内容如下:
运行该程序后,输出如下结果。
姓名是宋小山 出生年月日是 1966年8月8日
4-3 Exer4_
import ;
import .*;
public class Exer4_3 extends Applet
{
String str="您好!";
char ch[]={'H','e','l','l','o'};
byte byt[]={97,98,99,100,101,102};
public void paint(Graphics g)
{
tes(byt,0,5,50,50);
ars(ch,0,3,50,70);
ring(str,50,90);
}
}
运行前编写一个相应的HTML文件,运行输出结果如下:
abcde
Hel
您好!
4-4 Exer4_
import ;
import .*;
public class Exer4_4 extends Applet
{
public void paint(Graphics g)
{
for(int i=0;i<6;i++)
drawGraphics(i,g);
}
public void drawGraphics(int n,Graphics g)
{
ect(10,10,300,300);
switch(n)
{
case 0:case 3:
or();
ct(50,50,150,150);
break;
case 1:case 4:
or();
al(40,40,160,160);
break;
case 2:case5:
or();
ct(50,50,200,200);
break;
}
try{
(1500);
}
catch(InterruptedException e)
{(0);}
}
}
运行该程序前编写相应的HTML文件,运行后在屏幕上显示变化的图形:先显示红色的正
方形,再显示蓝色圆,最后显示用绿色填充的方块,并且重复一遍。
编程题
4-1编写Applet程序,在指定大小的屏幕界面上使用不同颜色绘制如下图形:
(1)直径为100像素点的圆;
(2)两个半轴长分别为50像素点和100像素点的椭圆;
(3)长和宽都为150像素点的矩形;
(4)使用红色填充(3)中的矩形;
(5)大小由读者指定的填充圆弧。
编写的Java小程序名为pro4_,程序内容如下:
import ;
import .*;
public class pro4_1 extends Applet
{
public void paint(Graphics g)
{
ect(10,10,300,300);
or();
al(40,40,100,100);
or();
al(160,40,50,100);
or();
ect(50,150,150,150);
or();
ct(50,150,150,150);
or();
c(220,50,180,125,30,120);
}
}
相应的HTML文件内容如下:
4-2编写Applet程序,选择3种不同的字体写出字符串“I Love Beijing!”。
编写的Applet小程序文件名为pro4_,程序内容如下:
import ;
import .*;
public class pro4_2 extends Applet
{
Font fnt1=new Font("Serif",,25);
Font fnt2=new Font("Monospaced",,40);
Font fnt3=new Font("Helvetica",,40);
public void paint(Graphics g)
{
String str="I Love Beijing!";
t(fnt1);
or();
ring(str,30,40);
t(fnt2);
or();
ring(str,30,80);
t(fnt3);
or();
ring(str,30,120);
}
}
相应的HTML文件读者自编。
4-3 编写Applet程序,在一个椭圆内填写一个字符串。椭圆大小和位置以及字符串内容和
字体都由读者自定。
编写的Applet小程序的文件名为pro4_,程序内容如下:
import ;
import .*;
public class pro4_3 extends Applet
{
public void paint(Graphics g)
{
int x0=30,y0=35,W=300,H=100;
or();
al(x0,y0,W,H);
or();
t(new Font("Helvetica",,45));
ring("北京,您好!",50,100);
}
}
相应的HTML文件由读者自编。
第5章 图形用户界面设计
选择题
5-1 下列关于容器的描述中,错误的是 (D)
A.容器是由若干个组建和容器组成的
B.容器是对图形界面中界面元素的一种管理
C.容器是一种对指定宽和高的矩形范围
D.容器都是可以独立的窗口
5-2 下列界面元素中,不是容器的是(A)
5-3 下列关于实现图形用户界面的描述中,错误的是 (B,C)
A.放在容器中的组件首先要定义,接着要初始化
B.放在容器中的多个组件是要进行布局的,默认的布局策略是FlowLayout
C.容器中所有组件都是事件组件,都可以产生事件对象
D.事件处理是由监听者定义的方法来实现的
5-4 下列关于组件类的描述中,错误的是 (A)
A.组件类中包含了文本组件类(TextComponent)和菜单组件类(MenuComponent)
B.标签(Label)和按钮(Button)是组件类(Component)的子类
C.面板(Panel)和窗口(Window)是容器类(Container)的子类
D.文本框(TextField)和文本区(TextArea)是文本组件类(TextComponent)的子类
5-5 在对下列语句的解释中,错误的是 (D)
ionListener(this);
A.but是某种事件对象,如按钮事件对象
B.this表示当前容器
C.ActionListener是动作事件的监听者
D.该语句的功能是将but对象注册为this对象的监听者
5-6 所有事件类的父类是(B)
A.ActionEvent B.AwtEvent C.KeyEvent D.MouseEvent
5-7 所有GUI标准组件类的父类是 (C)
A.Buttom B.List C.Component D.Container
5-8 下列各种布局管理器中Window类、Dialog类和Frame类的默认布局是(C)
A.FlowLayout B.CardLayout C.BorderLayout D.GridLayout
5-9 在下列各种容器中,最简单的无边框的又不能移动和缩放的只能包含在另一种容器中的
容器是 (D)
A.Window B.Dialog C.Frame D.Panel
5-10 下列关于菜单和对话框的描述中,错误的是(C)
A.Frame容器是可以容纳菜单组件的容器
B.菜单条中可包含若干个菜单,菜单中又可包含若干菜单项,菜单项中还可包含菜单
子项
C.对话框与Frame一样都可作为程序的最外层容器
D.对话框内不含有菜单条,它由Frame弹出
判断题
5-1 AWT是抽象窗口工具包的英文缩写。(对)
5-2 容器中只能包含有组件,而不能再含有容器。(错)
5-3 容器分可以独立的窗口和不可以独立的窗口两种。(对)
5-4 单选按钮提供“多选一”的输入选择,下拉列表提供“多选多”的输入选择。(错)
5-5 所有容器的默认布局都是FlowLayout。(错)
5-6 所有的组件都是事件源。(错)
5-7 Java 2 的事件处理方法是采用委托事件处理模型。(对)
5-8 事件组件都应注册一个事件监听者。(对)
5-9 事件监听者除了得知事件的发生外,还应调用相应方法处理事件。(对)
5-10 所有事件的父类是EventObject类。(对)
5-11 图形用户界面是由用户自定义成分、控制组件和容器组成的。(对)
5-12 所有GUI标准组件类的父类是Component类。(对)
5-13 所有容器类的父类是Frame类。(错)
5-14 标准和按钮都是事件源。(对)
5-15 文本去和文本框都可以引发两种事件:文本改变事件和动作事件。(错)
5-16 每个复选框有两种状态:“打开”和“关闭”状态。(对)
5-17 复选框组(CheckboxGroup)是由若干个按钮组成的。在一组按钮中可选多个。(错)
5-18 列表(List)是由多个选项组成的,只可在列表框的若干个选项选取一个。(错)
5-19 下拉列表(Choice)是一种“多选多”的输入界面。(错)
5-20 滚动条有两类:水平滚动条和垂直滚动条。(对)
5-21 画布(Canvas)是一种可容纳多个组件的容器。(错)
5-22 所有容器都采用顺序布局(FlowLayout)作为默认布局管理器。(错)
5-23 边界布局(BorderLayout)将容器分为东、西、南、北共4个区域。(错)
5-24 卡片布局(CardLayout)可使容器容纳多个组件,在同一时刻只显示若干个组件中的一
个。(对)
5-25 容器可容纳组件和容器,同一个容器中的组件可被同时显示或者同时隐藏。(对)
5-26 所有容器都是有边框的。(错)
5-27 Panel容器是可以嵌套使用的。(对)
5-28 Applet实际是一种特殊的Panel容器。Java Applet程序只负责它拥有的Applet容器内的
无边框区域。(对)
5-29窗口(Window)容器是一种独立窗口,但它不能作为程序的最外层容器。(对)
5-30 Frame容器是有边框的容器,它也是一种独立窗口,只能作为最外层容器。(对)
5-31 Frame容器可以容纳菜单组件,它实现了MenuContainer接口。(对)
5-32 MenuComponent类是菜单组件的父类。(对)
5-33 菜单条(MunuBar)、菜单(Munu)、菜单项(MunuItem)是3中不同的菜单组件。(错)
5-34 对话框(Dialog)不是一种独立使用的容器。(错)
5-35 文件对话框(FileDialog)是对话框(Dialog)的子类,它是一种打开文件和保留文件的
对话框窗口。(对)
分析程序输出结果
5-1 Exer5_
import .*;
import .*;
public class Exer5_1 extends Applet
{
private Label lab1,lab2;
public void init()
{
lab1=new Label();
t("标签文本左对齐");
gnment();
lab2=new Label("标签文本右对齐",);
setLayout(new GridLayout(3,3));
add(lab1);add(lab2);
}
}
运行改程序后,输出结果如图5-5所示。
图5-5 分析题5-1输出结果
5-2 Exer5_
import .*;
import .*;
import .*;
public class Exer5_2 extends Applet implements ActionListener,ItemListener
{
List colList;
String colName[]={"黑色","蓝色","浅蓝色","绿色","红色","黄色"};
Color cols[]={,,,,,};
int t;
public void init()
{
colList=new List(4,false);
ionListener(this);
mListener(this);
for(int i=0;i<;i++)
(colName[i]);
add(colList);
}
public void actionPerformed(ActionEvent e)
{}
public void itemStateChanged(ItemEvent e)
{
showStatus(ectedItem()+";index"+ectedIndex());
t=ectedIndex();
repaint();
}
public void paint(Graphics g)
{
or(cols[t]);
ct(15,30,20,20);
}
}
运行改程序后,输出结果如图5-6所示。
5-3 Exer5_
import .*;
import .*;
public class Exer5_3 extends Frame implements ActionListener
{
Frame fr;
Panel deck;
CardLayout c1;
Button but[];
String name[]={"第一张","下一张","前一张","最末张"};
public Exer5_3()
{
fr=new Frame("卡片窗口");
deck=new Panel();
c1=new CardLayout();
out(c1);
Panel c1=new Panel();
Label lab1=new Label("卡片1");
(lab1);
(c1,t());
Panel c2=new Panel();
Label lab2=new Label("卡片2");
(lab2);
(c2,t());
Panel c3=new Panel();
Label lab3=new Label("卡片3");
(lab3);
(c3,t());
Panel c4=new Panel();
Label lab4=new Label("卡片4");
(lab4);
(c4,t());
Panel contr=new Panel();
out(new GridLayout(2,2));
but=new Button[];
for(int i=0;i<;i++)
{
but[i]=new Button(name[i]);
but[i].addActionListener(this);
(but[i]);
}
(contr,);
(deck,);
e(300,150);
();
}
public void actionPerformed(ActionEvent e)
{
if(rce()==but[0])
(deck);
if(rce()==but[1])
(deck);
if(rce()==but[2])
us(deck);
if(rce()==but[3])
(deck);
}
public static void main(String args[])
{
Exer5_3 m1=new Exer5_3();
}
}
运行该程序后,输出结果如图5-7所示。
5-4 Exer5_
import .*;
public class Exer5_4 extends Frame
{
TextField tf=new TextField("",30);
MenuBar mb1=new MenuBar();
Menu f=new Menu("文件");
Menu m=new Menu("照片");
Menu s=new Menu("储存");
String name[]={"第一张","下一张","前一张","最末张"};
CheckboxMenuItem[]save={new CheckboxMenuItem("保存"),new CheckboxMenuItem("另
存为")};
MenuItem[] file1={new MenuItem("打开"),new MenuItem("关闭")};
MenuBar mb2=new MenuBar();
Menu fo=new Menu("水果");
MenuItem[] fruit={new MenuItem("香蕉"),new MenuItem("苹果"),new MenuItem("李子
")};
Button but=new Button("Swap");
public Exer5_4()
{
for(int i=0;i<;i++)
{
(new MenuItem(name[i]));
if((i+1)%3==0)
arator();
}
for(int i=0;i<;i++)
(save[i]);
(s);
for(int i=0;i<;i++)
(file1[i]);
(f);
(m);
setMenuBar(mb1);
table(false);
add("Center",tf);
add("North",but);
for(int i=0;i<;i++)
(fruit[i]);
(fo);
}
public boolean handleEvent(Event e)
{
if(==_DESTROY)
(0);
else
return Event(e);
return true;
}
public boolean action(Event e,Object arg)
{
if((but))
{
MenuBar m=getMenuBar();
if(m==mb1)
setMenuBar(mb2);
else if(m==mb2)
setMenuBar(mb1);
}
else if( instanceof MenuItem)
{
if(("打开"))
{
String str=t();
Boolean ch=false;
for(int i=0;i<;i++)
if((name[i]))
ch=true;
if(!ch)
t("你按了打开菜单");
else
t("打开"+str);
}
else if((file1[1]))
(0);
else if((save[0]))
t("你按了保存菜单");
else if((save[1]))
t("你按了另存为菜单");
else
t(ng());
}
else
return (e,arg);
return true;
}
public static void main(String args[])
{
Exer5_4 ex=new Exer5_4();
e(new Dimension(200,200));
ible(true);
}
}运行该程序后,输出结果如图5-8所示。
2-7 Exer5_
import .*;
import .*;
class myDialogFrame extends Frame implements ActionListener
{
MenuItem aboutItem,exitItem;
aboutDialog myDialog;
public myDialogFrame()
{
setSize(300,200);
setTitle("我的联系窗口");
addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent
E){(0);}});
MenuBar mb=new MenuBar();
setMenuBar(mb);
Menu fm=new Menu("练习");
(fm);
aboutItem=new MenuItem("关于信息");
ionListener(this);
(aboutItem);
exitItem=new MenuItem("退出");
ionListener(this);
(exitItem);
}
public void actionPerformed(ActionEvent e)
{
Object sou=rce();
if(sou==aboutItem)
{
if(myDialog==null)
myDialog=new aboutDialog(this);
();
}
else if(sou==exitItem)
{(0);}
}
}
class aboutDialog extends Dialog
{
public aboutDialog(Frame parent)
{
super(parent,"信息框",true);
Panel p1=new Panel();
TextArea ta=new TextArea(10,30);
t("请写下你的信息");
(ta);
add("North",p1);
Panel p2=new Panel();
Button but=new Button("返回");
(but);
add("Center",p2);
ionListener(new ActionListener(){public
e){setVisible(false);}});
setSize(300,250);
}
void actionPerformed(ActionEvent
}
public class Exer5_5
{
public static void main(String args[])
{
Frame fr=new myDialogFrame();
();
}
}
运行该程序后,输出结果如图5-9所示。
编程题
2-18 使用Java Applet编写满足下列要求的程序:
(1)含有两个按钮和两个标签;
(2)含有文本框和文本区;
(3)含有一个按钮具有退出功能;
编写程序如下:
import .*;
import .*;
class pro5_1 extends WindowAdapter implication ActionListener
{
Frame f;
Label la1,la2;
Button b1,b2;
TextField tf;
int tag=0;
public static void main(String args[])
{
pro5_1 mywin=new pro5_1();
y();
}
public void display()
{
f=new Frame("我的现实窗口");
la1=new Label("标签1");
la2=new Label("标签2");
(la1,"North");
(la2,"West");
b1=new Button("现实字符串");
b2=new Button("退出");
ionListener(this);
(b1,"South");
ionListener(this);
(b2,"East");
tf=new TextField();
(tf,"Center");
dowListener(this);
e(400,200);
ible(true);
}
public void actionPerformed(ActionEvent e)
{
String s1="这是一个字符串";
String s2="这是另一个字符串";
if(ionCommand().equals("退出"))
(0);
if(tag==0)
{
t(s1);
tag=1;
}
else
{
t(s2);
tag=0;
}
}
public void windowClosing(WindowEvent e)
{
(0);
}
}
运行该程序后,输出结果如图5-10所示。
2-19 使用Java Application编写满足下列要求的程序。
3 使用GridLayout布局。
4 设计一个简单的计算器。包括数字按钮0~9,以及加、减、乘、除、清零、等于运算按
钮和一个现实计算结果的文本区。
请读者参照本书本章5.2程序距离中的例5.1的程序内容进行编写。
2-20 编写一个图形用户界面的Application程序。
6 有一个菜单条;
7 菜单条中有3个菜单;
8 每个菜单有2个菜单项,其中一个菜单项又具有2个菜单子项。
程序内容如下:
import .*;
import .*;
public class pro5_3 extends Frame implements ActionListener,ItemListener
{
TextField text;
public pro5_3()
{
super("一个联系菜单的窗口");
setSize(300,200);
}
public void init()
{
MenuBar myB=new MenuBar();
setMenuBar(myB);
Menu m1=new Menu("文件");
(new MenuItem("保存"));
arator();
("退出");
ionListener(this);
(m1);
Menu m2=new Menu("编辑");
("复制");
arator();
("全选");
ionListener(this);
(m2);
Menu m3=new Menu("插入");
("页码");
arator();
Menu m31=new Menu("图片");
("来自剪贴画");
("来自图形文件");
(m31);
ionListener(this);
(m3);
text=new TextField();
add("South",text);
}
public static void main(String args[])
{
pro5_3 myMenu=new pro5_3();
();
ible(true);
}
public void itemStateCharged(ItemEvent e)
{
t("状态改变");
}
public void actionPerformed(ActionEvent e)
{
t(ionCommand());
if(ionCommand()=="退出")
(0);
}
}
运行该程序后,输出结果如图5-11所示。
5-4 编写一个可以弹出对话框的程序。
请读者参考本书本章5.2程序举例中的例5.4的程序内容进行编程。
第6章 异常和异常处理
选择题
6-1.下列关于异常的描述中,错误的是(B)
A.异常是一种经过修正后程序仍可执行的错误
B.异常是一种程序在运行中出现的不可恢复执行的错误
C.不仅Java语言有异常处理,C++语言也有异常处理
D.出现异常不是简单结束程序,而是执行某种处理异常的代码,设法恢复程序的执行
6-2.下列关于异常处理的描述中,错误的是(D)
A.程序运行时异常由Java虚拟机自动进行处理
B.使用try-catch-finally语句捕获异常
C.使用throw语句抛出异常
D.捕获到的异常只能用当前方法中处理,不能用其他方法中处理
6-3.下列关于try-catch-finally语句的描述中,错误的是(A)
A.try语句后面的程序段将给出处理异常的语句
B.catch()方法跟在try语句后面,它可以是一个或多个
C.catch()方法有一个参数,该参数是某种异常类的对象
D.finally语句后面的程序段总是被执行的,该语句起到提供统一接口的作用
6-4.下列关于抛出异常的描述中,错误的是(D)
A.捕捉到发生的异常可在当前方法中处理,也可以抛到调用该方法的方法中处理
B.在说明要抛出异常的方法时应加关键字throw<异常列表>
C.<异常列表>中可以有多个用逗号分隔的异常
D.抛出异常的方法中要使用下述抛出异常语句:throw<异常名>;其中,<异常名>是异
常类的类名
6-5.下列关于用户创建自己的异常描述中,错误的是(D)
A.创建自己的异常应先创建一个异常类
B.为实现抛出异常,须在可能抛出异常的方法中书写throw语句
C.捕捉异常的方法是使用try-catch-finally语句格式
D.使用异常处理不会使整个系统更加安全和稳定
判断题
6-1.异常是一种特殊的运行错误的对象。(对)
6-2.异常处理可以使整个系统更加安全和稳定。(对)
6-3.异常处理是在编译时进行的。(错)
语言中异常类都是ble的子类。(对)
ble类有两个子类:Error类和Exception类。前者由系统保留,后者供应用程序
使用。(对)
6-6.异常通常是指Error类和Exception类。(错)
ion类只有一个子类为RuntimeException。(错)
6-8.在异常处理中,出现异常和抛出异常是一回事。(错)
6-9.运行时异常是在运行时系统检测并处理的。(错)
6-10.使用try-catch-finally语句只能捕获一个异常。(错)
6-11.捕获异常时try语句后面通常跟有一个或多个catch()方法用来处理try块内生成的异
常事件。(对)
6-12.使用finally语句的程序代码为该程序提供一个统一的的出口。(对)
6-13.抛出异常的方法说明中要加关键字throws,并在该方法中还应添加throw语句。(对)
6-14.创建异常类时要给出该异常类的父类。(对)
6-15.如果异常类没有被捕获将会产生不正常的终止。(对)
分析程序的输出结果题
6_
public class Exer6_1
{
public static void main(String args[] )
{
int x=10,y=0;
int z=x/y;
n(“z=“+z);
}
}
该程序运行后,输出结果如图所示:
D:JAVAXT>java Exer6_1
Exception in thread”main”eticException:/by zero
At Exer6_
6_
public class Exer6_2
{
public static void main(String args[])
{
int array1[]={6,0,8};
for(int i=0;i<;i++)
{
try
{
int d=100/array[i];
n(“t 正常:d=“+d);
}
catch(ArithmeticException e)
{
n("t算术异常");
}
catch(ArrayIndexOutOfBoundsException e)
{
n("t下标越界异常");
}
finally
{
n("t异常处理结束!n");
}
}
}
}
运行该程序后,输出如图所示
D:JAVAXT>java Exer6_2
正常:d=16
异常处理结束!
算术异常!
异常处理结束!
正常:d=12
异常处理结束!
下标越界异常!
异常处理结束!
6-3 Exer6_
public class Exer6_3
{
public static void main(String args[])
{
int array1[]={6,0,8};
for(int i=0;i<=;i++)
{
try
{
int d=100/array1[i];
n("t正常:d="+d);
}
catch(RuntimeException e)
{
n("t异常:"+ng());
}
finally
{
n("t异常处理结束!n");
}
}
}
}
运行该程序后,输出结果如图所示:
D:JAVAXT>java Exer6_3
正常:d=16
异常处理结束!
异常:eticException:/by zero
异常处理结束!
正常:d=12
异常处理结束!
异常:ndexOutOfBoundsExcepiton:3
异常处理结束!
6-4 Exer6_
public class Exer6_4
{
public static void Test()
{
int a[]=new int[3];
for(int i=0;i<=;i++)
{
try
{
a[i]=i+5;
n("t正常:a["+i+"]="+a[i]);
}
catch(ArrayIndexOutOfBoundsException e)
{
n("t异常:+ng()");
throw e;
}
}
}
public static void main(String args[])
{
try
{
Test();
}
finally
{
n("t异常处理结束!n")
}
}
}
运行该程序后,输出结果如图:
D:JAVAXT>java Exer6_4
正常:a[0]=5
正常:a[1]=6
正常:a[2]=7
异常:ndexOutOfBoudsException: 3
异常处理结束!
Exception in thread “main” ndexOutOfBoundsExcepiton:3
at Exer6_
at Exer6_
6-5 Exer6_
class myException extends Exception
{
static int a=0
myException(String s)
{
super(s);
a++;
}
String show()
{
return"自定义异常出现的次数:"+a;
}
}
Public class Exer6_5
{
static void Test() throws myException
{
myException e;
e=new myException("自定义异常n");
throw e;
}
Public static void main(String args[])
{
for(int i=0;i<3;i++)
{
try
{
Test();
}
catch(myException e)
{
n(());
n(ng);
}
}
}
}
运行该程序后,输出结果如图所示:
D:JAVAXT>java Exer6_5
自定义异常出现的次数:1
myException:自定义异常
自定义异常出现的次数:2
myException:自定义异常
自定义异常出现的次数:3
myException:自定义异常
5.简单回答题
5 检测异常事件必须使用什么语句?
答:try语句
6 catch()方法的作用是什么?该方法用户能否调用?
答: 用来处理try块中检测出的异常事件。
7 catch()方法中异常类型应与什么相符?
答:与生成的异常事件类型相符。
8 异常示被捕获到将会出现什么现象?
答:try语句后边的惯常处理代码将不被执行,通常使用finally语句提供一个统一出口。
9 在一个try语句的程序代码块中可以捕获多个异常吗?
答:可以
10 使用throw语句抛出的是类型还是对象?
答:抛出的是对象。
11 捕获到的异常还可以再抛出吗?
答:可以。
12 Finally语句块中的代码何时被执行?
答:在异常事件处理的方法catch()执行后执行。
13 语句throw的作用是什么?
答:抛出所检测到的异常。
14 异常类Exception的父类是什么?
答:是Throwable类。
编程题
2. 编程实现下述异常,并输出显示适当的错误信息。
2-1 数组下标越界异常ArrayIndexOutOfBoundsException类型。例如,
char ch[]=new char[5];
ch[5]='m';//产生该类型异常
(2) 对象转换异常ClassCastException类型。
例如,将对象a1转换为对象a2时,如果a1和a2不是同类,并且a1也不是a2
的子类对象时,则产生该类型异常。
1-1 引用空对象的变量和方法时产生NullPointerException异常类型。例如,
int ar[]=null;
n();//产生该类异常
(1) 关于数组下标越界异常ArrayIndexOutOfBoundsException请参照本书本章例6.1
的程序,请读者自行编写。
(2) 下面关于对象转换的例子。程序内容如下:
public class pro6_1
{
public static void main(String args[])
{
try{
M();
}
catch(ClassCastException e)
{
n("对象转换异常");
}
}
static void M()throws ClassCastException
{
Object obj=new Object();
int arr[]=(int[])(obj);
}
}
(3) 编写处理异常程序如下:
public class pro6_2
{
public static void main(String args[])
{
try{
int ar[]=null;
n();
}
catch(NullPointerException e)
{
n("Exception:"+e);
}
}
}
运行该程序后,输出显示结果如下:
Exception:. NullPointerException.
6-2 定义一个circle类,其中有求面积的方法,当圆的半径小于0时,抛出一个自定义的异
常。编程实现之:
程序内容如下;
class Circle extends Exception
{
double r;
Circle()
{ }
Circle(double i)
{r=i;}
public double getr()
{return r;}
public double Area()
{
return 3.1415*r*r;
}
}
public class pro6_3
{
public static void main(String args[])
{
Circle c=new Circle(-3.0);
try
{
if(()<0)
{
Circle ee=new Circle();
throw ee;
}
n(());
}
catch(Circle e)
{
n("自定义异常:"+e);
}
}
}
运行该程序后,输出显示如下结果:
自定义异常:Circle
如果将语句
Circle c=new Circle(-3.0);
必为
Circle c=new Circle(3.0);
输出结果如何?请读者上机试试。
版权声明:本文标题:Java语言程序设计(第2版)第1-6章 课后习题答案 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/p/1735710868a1682958.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论