【1】以下关于 JVM 的叙述,哪些项正确?
A.JVM 运行于操作系统之上,它依赖于操作系统
B.JVM 运行于操作系统之上,它与操作系统无关
C.JVM 支持 Java 程序运行,它能够直接运行 Java 字节码文件
D.JVM 支持 Java 程序运行,它能够直接运行 Java 源代码文件
扩展名为.java的是源代码文件(文本文件):开发时编写代码的文件
扩展名为.class的是字节码文件(二进制):系统运行时执行的文件
【2】下列选项中正确的表达式是:
A.byte b = 128; 【-128~127 一个字节】
B.boolean n = null; 【null可以给所有的引用数据类型赋值,不能给基本数据类型赋值】
C.double d = 0.313d; 【0.313默认为double类型,可以省略,加上也不是错的】
D. float f = 0.823;【0.823默认为double类型,而double类型在内存中占4个字节,而float类型占2个字节,所以不能直接赋值,float f = 0.823f;表面它是一个float类型的数据才能赋值】
基本数据类型
整数型:byte、short、int、long
小数型:float、double
字符型:char
布尔型:boolean
基本数据类型对应的包装类型,包装类型能够提供作为“类”才具有的一些功能
整数型:Byte、Short、Integer、Long
小数型:Float、Double
字符型:Character
布尔型:Boolean
基本数据类型和引用类型的区别,基本数据类型的值保存在栈内存当中,引用数据类型的值是在堆内存中开辟的一块空间,栈内存中保存的是这块空间的地址
【3】下列标识符哪个是合法的( )
A.class 【关键字】
B.$abc 【$的存在是为了照顾有PHP开发背景的程序员】
C.1234 【不能以数字开头】
D._name age 【以_开头是可以的,标识符中间不能有空格】
标识符:我们程序员自己起名字的地方——变量、类、方法、包
规则:可以以字母、数字、下划线、$组成,不能以数字开头
规范:
①变量:驼峰式命名,首字母小写 appleBoy
②类(接口):驼峰式命名,首字母大写 PeopleStudy
③方法:和变量一样
④包:所有字母小写
【4】你想一个类存取同一个包中的另一个类中成员,哪一个存取修饰符限制的最严格?
A.public 【类内部√ 同包√ 子类√ 包外√】
B.private 【类内部√ 同包× 子类× 包外×】
C.protected 【类内部√ 同包√ 子类√ 包外×】
D.transient 【这不是一个权限修饰符,是这里的一个干扰项】
E.不需要任何修饰符 【类内部√ 同包√ 子类× 包外×】
【5】
1. public class Test {
2. int x= 12;
3. public void method(int x) {
4. x+=x;
5. System.out.println(x);
6. }
7. }
Given:
34. Test t = new Test();
35. t.method(5);
What is the output from line 5 of the Test class?
A. 5 B. 10 C. 12 D. 17 E. 24
【6】下列选项中的表达式哪个返回true?
A."john" ! = "john"
B."john".equals("john")
C."john" = "john"。
D."john".equals(new Button("john"))
字符串的比较:使用“==”比较是不安全的,“==”双等号比较的内容,对于基本数据类型来说是他们的值,对引用数据类型来说比较的是内存引用地址,总之就是栈内存中的值
比较字符串:要使用equals()方法,比较两个字符串的内容
【7】编译,运行下列代码后的结果是:
public class Test{
public static void main(String args[]){
int age;
age = age+1;
System.out.println(“The age is”+age);
}
}
A. 编译,运行后没有输出
B. 编译,运行后输出:The age is 1
C. 能通过编译,但运行时产生错误
D. 不能通过编译
局部变量要初始化后才能使用,这一点和成员变量不同,成员变量在类加载时就会被初始化。
【8】若在一个for语句中加入break语句,它可以________
A.对for语句执行没有影响
B.中断本次循环,进入下一次循环 continue
C.退出for循环,执行for语句后面的语句
D.以上说法均不对
【9】Given:
55. int []x= {1, 2,3,4, 5};
56. int y[] =x;
57. System.out.println(y[2]);
Which is true?
A. Line 57 will print the value 2.
B. Line 57 will print the value 3.
C. Compilation will fail because of an error in line 55.
D. Compilation will fail because of an error in line 56.
【10】如果编译和运行下面的程序会有什么结果:
public class Q {
public static void main(String argv[]){
int anar[]= new int[5];
System.out.println(anar[0]);
}
}
A. Error: anar 没有被初始化
B. null
C. 0 数组元素创建时,系统会根据其数据类型分配初始值
D. 5
【11】
下面的代码能打印出的结果为:
int i=1;
switch (i) {
case 0:
System.out.println("zero");
break;
case 1:
System.out.println("one");
case 2:
System.out.println("two");
default:
System.out.println("default");
}
A. one B.one, default C.one, two, default D.Default
switch结构进入后,如果没有遇到break,则会一直执行到default,如果任何一个分支都没有进入,则执行default对应的代码
【12】
下面的程序片断中
String a = “ABCD”;
String b = a.toLowerCase();
b.replace(‘a’, ‘d’);
b.replace(‘b’,’c’);
System.out.println(b);
编译运行结果是什么?
A.abcd
B.ABCD
C.dccd
D.dcba
E.编译错误
F.运行时抛出异常
//在Java中,字符串是一个不可改变的字符序列
String a = "ABCD";
//toLowerCase()并没有改变原来的字符串,只是返回一个改变以后的字符串
String b = a.toLowerCase();
//说明a本身并没有改变
System.out.println("a="+a);
//b接受了a改变后的值
System.out.println("b="+b);
b = b.replace(‘a‘, ‘d‘);
b = b.replace(‘b‘, ‘c‘);
//使用b接受replace()方法的返回值
System.out.println("b="+b);
【13】代码:
for (int i =0; i < 4; i +=2) {
System.out.print(i + “”);
}
System.out.println(i);
结果是什么?
A. 0 2 4
B. 0 2 4 5
C. 0 1 2 3 4
D. 编译错误.
E. 运行的时候抛出异常
在Java中,变量的生命周期(作用域范围)是{}之内
【14】下列关于类的继承的描述,正确的有( )
A. 一个类可以同时继承多个父类【Java是单继承的】
B. 一个类也只能有一个子类【Java中一个类可以有多个子类】
C. 子类能够直接调用父类所有的方法【权限限制】
D. 一个类继承另一个类需要使用 extends 关键字
【15】
11. class Payload {
12. private int weight;
13. public Payload(int wt) { weight = wt; }
13. public void setWeight(int w) { weight = w; }
15. public String toString(){
return Integer.toString(weight);
}
16. }
18. public class TestPayload {
19. static void changePayload(Payload p) {
20. /* insert code here */
21. }
22.
23. public static void main(String[] args) {
24. Payload p = new Payload(10);
25. p.setWeight(1024);
26. changePayload(p);
27. System.out.println(“The value of p is ”+ p);
28. }
29. }
Which statement, placed at line 20, causes(使得) the code to print “The value of p is 420.”?
A. p.setWeight(420);
B. p.changePayload(420);
C. p = new Payload(420);
D. Payload.setWeight(420);
E. p = Payload.setWeight(420);
F. p = new Payload();p.setWeight(420);
【16】
1. abstract class abstractIt {
2. abstract float getFloat ();
3. }
4. public class AbstractTest extends AbstractIt {
5. private float f1= 1.0f;
6. private float getFloat () {return f1;}
7. }
What is the result?
A. Compilation is successful.
B. An error on line 6 causes a runtime failure.
C. An error at line 6 causes compilation to fail.
D. An error at line 2 causes compilation to fail.
五、任务
任务一、单项选择题
【1】在Java中,下列语句不能通过编译的有( B )
A. String s= “join”+ 3;
B. int a= “join”+3;
C. int a= ‘a’+5;
D. float f=5+5.5F;
分析原因:因为int是整数型,不能做字符型相关的加减
【2】以下数据类型中,不是基本数据类型的是(B)
A.byte B.String C.boolean D.char
【3】基本数据类型byte的取值范围是:
A.0 ~ 65, 535
B.(–128) ~ 127
C.(–32,768) ~ 32,767
D.(–256) ~ 255
【4】下面哪行代码会在编译的时候出现错误或警告:
A.float f=1.3f;
B.char c =’a’;
C.byte b = 57;
D.boolean b = null;
E.int i = 10;
分析原因:第四个。因为null可以给所有的引用数据类型赋值,不能给基本数据类型赋值
【5】public static void main方法的参数描述是:
A.String[] args
B.Strings args[]
C.String args
D.String[] args[]
分析原因:(说明你没有选择的选项错在哪里)
此题选A,
B错:因为这是个字符串数据,String后面不能加s,
C错:因为它不符合数据形式
D错:因为不需要两个[],理同C
【6】下面代码b的值是多少?( )
public class A {
public static void main (String args []) {
float a=3.5;
int b=(int)a+2;
System.out.println(b);
}
}
A.编译错误 B.5.5 C.5 D.6
分析原因:因为3.5是double型数据,不能直接用float修饰
【7】Given:
11. public class Test {
12. public static void main(String [] args) {
13. int x =5;
14. boolean b1 = true;
15. boolean b2 = false;
16. if((x==4) && !b2)
17. System.out.print(”1 “);
19. System.out.print(”2 “);
20. if ((b2 = true) && b1)
21. System.out.print(”3 “);
22. }
23. }
What is the result?
A. 2 B. 3 C. 1 2 D. 2 3E. 1 2 3
F. Compilation fails
G. 运行时报错
分析原因:
因为第一个if语句返回的是false,所以if语句下面对应的输出就输出不出来了,接着2输出,然后第二个if语句返回的是true,所以3输出,所以选D;
任务二、编程题
【1】编写程序,打印99乘法表,效果如图所示
public class test {
public static void main(String[] args) {
for (int i=1; i<10;i++) {
for (int j=1; j<=i;j++) {
if (i == j) {
System.out.println(i + "*" + j + "=" + i * j);
} else {
System.out.print(i + "*" + j + "=" + i * j + " ");
}
}
}
}
}
【2】根据下图实现类。
在 TestCylinder 类中创建 Cylinder 类的对象,利用构造器设置圆柱的底面半径和高,并输出圆柱的表面积和体积。
Circle类:package zuoye; public class Circle { private double radius; public Circle(){} public Circle(double radius){ this.setRadius(radius); } public double getRadius(){ return radius; } public void setRadius(double radius){ this.radius=radius; } public double findArea(){ double area= 3.14*this.getRadius()*this.getRadius(); return area; } } Cylinder.java package zuoye; public class Cylinder extends Circle{ private double length; public Cylinder(double radius,double length){ setRadius(radius); this.length=length; } public void Cylinder(double length){ this.length=length; } public double findArea(){ double area=(2*3.14*getRadius()*getRadius())+(3.14*2*getRadius()*length); return area; } public double findVolume(){ double Volume = super.findArea()*length; return Volume; } } TestCylinder.java package zuoye; public class TestCylinder { public static void main(String[] args) { Cylinder c =new Cylinder(2, 3); double area = c.findArea(); double volume = c.findVolume(); System.out.println("圆柱的表面积为"+area); System.out.println("圆柱的体积为"+volume); } }
【3】实现单子模式非常重要。
package danzi; public class single { private single(){} private static single Instance = new single(); public static single getInstance(){ return Instance; } }
package danzi; public class singleTest { public static void main(String[] args) { single s1 = single.getInstance(); single s2 = single.getInstance(); System.out.println(s1==s2); } }
任务三、简答题
【1】什么是方法的重写?【用程序代码进行测试然后截图附后】
答:重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。
重写的要求:
①子类方法对父类方法进行重写,又叫覆盖
②方法名相同
③参数列表相同
④子类方法返回值类型不能比父类方法返回值类型更大
⑤子类方法抛出的编译时异常不能比父类方法范围更大,运行时异常无所谓
⑥子类方法的访问权限不能比父类方法更严格
【2】什么是方法的重载?【用程序代码进行测试然后截图附后】
答:重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。
重载的要求:
①在同一个类中
②相同方法名
③不同参数列表
【3】如何比较两个字符串?为什么要这样?
最好用equals()函数来比较,因为如果单纯用==比较的话,只适用于String s1=”xxx” 和String s2=”xxx”定义的比较,如果是String t1=new String(“xxx”),这种定义的比较就不可以了,因为前一种类型不管怎么定义,他的地址都是不变的,所以肯定是相等的,但是new String(“xxx”)定义的话就改变了他的地址,所以就不一样了,所以==比较不保险,最好用equals()函数比较。更全面。
自然对齐:sizeof struct, union