Java习题二.docx
《Java习题二.docx》由会员分享,可在线阅读,更多相关《Java习题二.docx(17页珍藏版)》请在冰豆网上搜索。
Java习题二
1.指出下列程序的运行结果
publicclassExample
{
Stringstr=newString("good");
char[]ch={'a','b','c'};
publicstaticvoidmain(Stringargs[])
{
Exampleex=newExample();
ex.change(ex.str,ex.ch);
System.out.print(ex.str+"and");
Sytem.out.print(ex.ch);
}
publicvoidchange(Stringstr,charch[])
{
str="testok";
ch[0]='g';
}
}
传值和传地址
①goodandabc
②goodandgbc
③testokandabc
④testokandgbc
2.给出下面代码:
静态数组,arr
publicclassPerson
{
staticintarr[]=newint[10];
publicstaticvoidmain(Stringa[])
{
System.out.println(arr[1]);
}
}
哪个语句是正确的?
①编译时将产生错误;
②编译时正确,运行时将产生错误;
③输出零;
④输出空。
3.下列哪些语句关于内存回收的说明是正确的?
①程序员必须创建一个线程来释放内存;
②内存回收程序负责释放无用内存
③内存回收程序允许程序员直接释放内存
④内存回收程序可以在指定的时间释放内存对象
4.1)publicvoidmodify(){
2)intI,j,k;
3)I=100;
4)while(I>0){
5)j=I*2;
6)System.out.println("Thevalueofjis"+j);
7)k=k+1;
8)I--;
9)}
10)}
①line4
②line6
③line7局部变量必须初始化,成员变量不需初始化,数组不需初始化
④line8
5.指出下列哪些方法与方法publicvoidadd(inta){}为合理的重载方法。
①publicintadd(inta)
②publicvoidadd(longa)
③publicvoidadd(inta,intb)
④publicvoidadd(floata)
6.给出下面代码段
1)publicclassTest{
2)intm,n;
3)publicTest(){}
4)publicTest(inta){m=a;}
5)publicstaticvoidmain(Stringarg[]){
6)Testt1,t2;
7)intj,k;
8)j=0;k=0;
9)t1=newTest();
10)t2=newTest(j,k);
11)}
12)}
哪行将引起一个编译时错误?
1ine3
2line5
3line6
4line10
7.main()方法的返回类型是:
①int
②void
③Boolean
④static
8.System类在哪个包中?
1java.util
2java.io
3java.awt
4java.lang
9.给出下面代码:
publicclassTest
{
staticinta[]=newa[10];
publicstaticvoidmain(Stringargs[])
{
System.out.println(a[10]);
}
}
那个选项是正确的?
①译时将产生错误;
②编译时正确,运行时将产生错误;
③输出零;
④输出空。
10.Strings="hello";
Stringt="hello";
charc[]={'h','e','l','l','o'};
下列哪些表达式返回true?
1s.equals(t);t
2t.equals(c);f
3s==t;t
4t.equals(newString("hello"));t
11.下述哪些说法是正确的?
1实例变量是类的成员变量
2实例变量是用static关键字声明的
3方法变量在方法执行时创建
4方法变量在使用之前必须初始化(见test24.java)
12.Strings=newString("xyz");创建了几个StringObject?
1个
13.int和Integer有什么区别?
14.Java有没有goto?
是关键字吗?
无
15.用最有效率的方法算出2乘以8等於几?
2<<3
16.a=null和a.length()=0有什么区别?
17.publicclassSomething
{
voiddoSomething()
{
privateStrings="";方法变量没有访问权限
intl=s.length();
}
}
有错吗?
若有,错在哪里?
18.publicclassSomething
{
publicstaticvoidmain(String[]args)
{
Somethings=newSomething();
System.out.println("s.doSomething()returns"+doSomething());或者创建实例再调用,或者改成static方法
}
publicstaticStringdoSomething()
{
return"Dosomething...";
}
}
有错吗?
若有,错在哪里?
19. 此处,Something类的文件名叫OtherThing.java
classSomething
{编译没错,执行有错
private改成publicstaticvoidmain(String[]something_to_do)
{
System.out.println("Dosomething...");
}
}
有错吗?
若有,错在哪里?
20.classTest
{
publicstaticvoidmain(String[]args)
{
Strings=newString("Hello");
Stringss=method(s);
System.out.println(ss);
}
publicstaticStringmethod(Strings)
{
s+="world";没有返回值
}
}
程序返回的结果是什么?
21.classCompare
{
publicstaticvoidmain(String[]args)
{
Stringstr1=newString("abc");
Stringstr2=newString("abc");
Stringstr3=str1;
Stringstr4=”bcd”;
Stringstr5=”bcd”;
if(str1==str2)
{
System.out.println("str1==str2");
}
else
{
System.out.println("str1!
=str2");
}
if(str1==str3)
{
System.out.println("str1==str3");
}
else
{
System.out.println("str1!
=str3");
}
if(str4==str5)
{
System.out.println("str4==str5");
}
else
{
System.out.println("str4!
=str5");
}
if(str1.equals(str2))
{
System.out.println("str1equalstr2");
}
else
{
System.out.println("str1notequalstr2");
}
if(str1.equals(str3))
{
System.out.println("str1equalstr3");
}
else
{
System.out.println("str1notequalstr3");
}
}
}
程序的运行结果是什么?
23.给出下面的代码片断
1)publicvoidcreate(){
2)VectormyVect;
3)myVect=newVector();
4)}
下面的哪些陈述为true(真)?
1第二行的声明不会为变量myVect分配内存空间。
2第二行的声明分配一个到Vector对象的引用的内存空间。
3第二行语句创建一个Vector类对象。
4第三行语句创建一个Vector类对象。
5第三行语句为一个Vector类对象分配内存空间。
创建对象就是分配空间么?
不是
24.给出下面的不完整的类代码
classPerson
{
Stringname,department;
intage;
publicPerson(Stringn){name=n;}
publicPerson(Stringn,inta){name=n;age=a;}
publicPerson(Stringn,Stringd,inta){
//doingthesameastwoargumentsversionofconstructor
//includingassignmentname=n,age=a
department=d;
}
}
下面的哪些表达式可以加到构造方法中的"doingthesameas..."处?
1Person(n,a);
2this(Person(n,a));
3this(n,a);
4this(name,age).
25.下面关于变量及其范围的陈述哪些是对的?
1实例变量是类的成员变量。
2实例变量用关键字static声明。
3在方法中定义的局部变量在该方法被执行时创建。
4局部变量在使用前必须被初始化。
26.给出下面的代码:
1)publicvoidmodify(){
2)inti,j,k;
3)i=100;
4)while(i>0){
5)j=i*2;
6)System.out.println("Thevalueofjis"+j);
7)k=k+1;
8)i--;
9)}
10)}
哪些行在编译时可能产生错误。
1line4
2line6
3line7
4line8
27.下面有关变量及其作用域的陈述哪些是对的?
1在方法里面定义的局部变量在方法退出的时候被撤销。
2局部变量也叫自动变量。
3在方法外面定义的变量(实例变量)在对象被构造时创建。
4在方法中定义的方法的参变量只要该对象被需要就一直存在。
28.类的设计要求它的某个成员变量不能被外部类直接访问。
应该使用下面的哪些修饰符获得需要的访问控制?
1public
2nomodifier
3protected
4private
29.下面有关java代码安全性的叙述哪些是对的?
1字节码校验器加载查询执行需要的所有类。
2运行时解释器执行代码。
3在运行时,字节码被加载,验证然后在解释器里面运行。
4类加载器通过分离本机文件系统的类和从网络导入的类增加安全性。
SL275中描述的Java程序运行的过程是这样的:
类加载器(classloader)加载程序运行所需要的所有类,它通过区分本机文件系统的类和网络系统导入的类增加安全性,这可以限制任何的特洛伊木马程序,因为本机类总是先被加载,一旦所有的类被加载完,执行文件的内存划分就固定了,在这个时候特定的内存地址被分配给对应的符号引用,查找表(lookuotable)也被建立,由于内存划分发生在运行时,解释器在受限制的代码区增加保护防止未授权的访问;然后字节码校验器(bytecodeverifier)进行校验,主要执行下面的检查:
类符合JVM规范的类文件格式,没有违反访问限制,代码没有造成堆栈的上溢或者下溢,所有操作代码的参数类型都是正确的,没有非法的数据类型转换(例如将整型数转换成对象类型)发生;校验通过的字节码被解释器(interpreter)执行,解释器在必要时通过运行时系统执行对底层硬件的合适调用。
后三个答案是SL275中的原话。
30.给出下面的代码
publicclassPerson{
staticintarr[]=newint[10];
publicstaticvoidmain(Stringa[]){
System.out.println(arr[1];)
}
}
1编译时将发生错误。
2编译时正确但是运行时出错。
3输出为0。
4输出为null
31.给出下面的代码
publicclassPerson
{
doubled1;
publicstaticvoidmain(String[]args)
{
floatf1=0.2f;
System.out.println(f1);
System.out.println(f2);
}
}
有错吗?
若有,错在哪里?
32.给出下面的代码
classPerson
{
privateStringname;
Privateintage;
voidprivate去掉Person(Stringname,intage)
{
this.name=name;
this.age=age;
}
voidgetInfo()
{
System.out.println(“Iamchinese”);
}
}
classTestPerson
{
publicstaticvoidmain(String[]args)
{
Personp1=newPerson();
P1.getInfo();
Personp2=newPerson(“张三”,21);
System.out.println(p2.name);
}
}
有错吗?
若有,错在哪里?
34.classStaticCode
{
staticStringcountry;
static
{
country="China";
System.out.println("StaticCodeisloading");
}
}
classTestStaticCode
{
static
{
System.out.println("TestStaticCodeisloading");
}
publicstaticvoidmain(String[]args)
{
System.out.println("beginexecutingmainmethod");
newStaticCode();
newStaticCode();
}
}
TestStaticCodeisloading
beginexecutingmainmethod
StaticCodeisloading
程序是否有错?
若有,错在哪里,若没有,程序执行的结果是什么?
为什么?
35.classOuter
{
privateintsize=10;
publicclassInner
{
publicvoiddoStuff()
{
System.out.println(++size);
}
}
}
classTestInner
{
publicstaticvoidmain(String[]args)
{
Outerouter=newOuter();
Outer.Innerinner=newouter.Inner();
//outer.newInner()
inner.doStuff();
}
}
程序是否有错?
若有,错在哪里?
36.classInOut
{
Stringstr=newString("Between);
publicvoidamethod(finalintiArgs)
{
intabc=8;
classBicycle
{
publicvoidsayHello()
{
System.out.println(str);
System.out.println(iArgs);
System.out.println(abc);方法中定义的内部类只能访问方法的final变量
}
}//EndofBicycleclass
}//Endofamethod
}//EndofInOutclass
程序是否有错?
若有,错在哪里,若没有,程序执行的结果是什么?
为什么?
37.编写一个Java程序,定义一个表示学生的类Student,包括成员变量“学号”、“班级”、“姓名”、“性别”、“年龄”;方法“获得学号”、“获得班级”、“获得性别”、“获得姓名”、“获得年龄”和“修改年龄”。