2018.6.20 Java考试试题总结(Java语言基础与面向对象编程)最新版

Java考试试题总结

一、单选题(每题1分 * 50 = 50分)

1.java程序的执行过程中用到一套JDK工具,其中javac.exe指( B )

A.java语言解释器
B.java字节码编译器
C.java文档生成器
D.java类分解器

2.在Java语言中,不允许使用指针体现出的Java特性是( D )

A.可移植
B.解释执行
C.健壮性
D.安全性

3. 00101010(&)00010111语句的执行结果是( C )

A.11111111
B.00111111
C.00000010
D.00000000

4.在Java中语句:37.2%10的运算结果为( A )

A.7.2
B.7
C.3
D.0.2

5.0.6332 的数据类型是( B )

A.float
B.double
C.Float
D.Double

6.System.out.println(“5” + 2);的输出结果应该是( A )

A.52
B.7
C.2
D.5 System.out.println("5"+2+1);//521

7.下面的方法,当输入为 2 的时候返回值是多少( D )

public static int getValue(int i) {
int result = 0;
switch (i) {
case 1:
result = result + i;
case 2: //从这里进去 result=0+2*2 =4
result = result + i * 2;
case 3: //因为没有break结束 所以直接进入 result= 4+2*3 =10
result = result + i * 3;
}
return result;
} A.0
B.2
C.4
D.10

8.下列语句中,属于多分支语句的是( B )

A.if语句
B.switch语句
C.do while语句
D.for语句

9.下列程序执行的结果是( C )。

public class Ex6 {
public static void main(String[] args) {
char ch='8';
int r=10;
switch(ch+1) { //第一次 9 第二次 15+1
case '7': r=r+3;
case '8': r=r+5;
case '9': r=r+6;//9+6=15
break;
default: ;
}
System.out.print(r);
}
} A.14
B.13
C.16
D.10

10.执行如下程序代码后,a的值是多少( C )

public class Ex10 {
public static void main(String[] args) {
int a=0;
int c=0;
do{
--c;
a=a-1;
}while(a>0);
System.out.println("aa"+a);
}
} A.0 B.1 C.-1 D.死循环 do while的特点:
当不满足循环条件就退出,这种循环的特点是至少会执行循环一次,先执行循环后判断

11.下面程序代码执行的结果为:( B )

public class Ex11 {
public static void main(String[] args) {
for(int i = 0;i<5;i++){
System.out.println(i++);
if(i%3==0)
break;
}
}
} A.0 1 2
B.0 2
C.0 2 4
D.0 1 3 使用break语句是跳出循环执行循环之后的语句,而continue语句是中止本次循环继续执行下一次循环。

12.下列数组声明中错误的是( D )

A.int[] a         B.int a[]
C.int[][] a D.int a[10]

13.执行完代码”int[] x=new int[25];”后,以下( A )说明正确的

A.x[24]为0
B.x[24]未定义
C.x[25]为0
D.x[0]为空

14.应用程序的main方法中有以下语句,则输出的结果是( A )

public class Ex14 {
public static void main(String[] args) {
int[] x= {122,33,55,678,-987};
int y= x[0];
for(int i=1;i<x.length;i++){
if(x[i]>y)
y =x[i];
}
System.out.println(y);
}
} A.678 B.122 C.-987 D.33

15.方法methodA返回类型是( A )

public class ReturnIt{
return Type methodA(byte x, double y) {
return (short) x/y * 2;
}
} A.int B.byte C.long D.double

16.下面程序运行的结果是( A )

public class X {
private static int a;
public static void main(String [] args) {
modify(a);
System.out.println(a);
} public static void modify(int a) {
a++;
}
} A.0 B.1 C.程序编译失败 D.程序抛出异常

17.给定如下Java程序的方法结构,则方法体实现语句正确的是( C )

public String change(int i){ //方法体 }

A.return 100;
B.return ‘a’;
C.return i+””;
D.return i;

18.下列语句正确的是( A )

A.形式参数可以被视为local variable (局部变量)
B.形式参数可被字段修饰符修饰
C.形式参数为方法被调用时,真正被传递的参数
D.形式参数不可以是对象 A:形式参数和局部变量一样,生命周期随着方法的结束而终结,离不开方法。在Java中形式参数都是值传递的,所以可以视为一个局部变量。 B:Java中字段修饰符有:public、protected、default、private、final、static。在形式参数中,如果要使用字段修饰符,只能使用final修饰符。其他任何修饰符都能引起编译器错误。 C:java中方法没有引用调用,调用的形参都是拷贝的。
D:形式参数可以是值或者对象。

19.在某个类中存在一个方法:void getSort(int x),以下能作为这个方法的重载声明的是( C )

A.public getSort(float x)   没有返回类型 一定是构造函数 不能重载
B.int getSort(int y) 参数一样不是重载
C.double getSort(int x,int y)
D.void get(int x, int y) 重载判定就是方法名相同传入的参数不同 参数列表不同

20.given the following

public class X {
public static void main(String [] args) {
String d="bookkeeper";
d.substring(2,9);//这里需要重新接收字符串 含义是重第二个开始到第九个位置结束 okkeepe
d = "u"+d; //还是用最开始的d字符串
System.out.println(d);
}
}
What is the result ( B ) A.uookkeewoo
B.ubookkeeper
C.ubookkeepertoo
D.An exception is thrown at runtime 总结:substring(x)是从字符串的的第x个字符截取
substring(x,y)是从x到y前的位置停止

21.下面程序运行的结果是( A )

public class Test1{
public static void main(String args[]){
String a="1234";
String b="1234";
String c = new String("1234");
System.out.println(a==b);//True 比较的是地址
System.out.println(a==c);//false 比较的是地址
System.out.println(a.equals(c));//true 比较的是内容
}
} A.true false true
B.true true false
C.true false false
D.true true true

22.给定如下Java代码,编译运行后,输出的结果将是( B )

public class Test {
public static void main(String args[]) {
String s1 = new String("Test");
String s2 = new String("Test");
if (s1 == s2)
System.out.println("Same");//比较的是地址 new出来是开辟新的空间
if (s1.equals(s2))
System.out.println("Equals");//比较的是内容
}
} A.Same
B.Equals
C.SameEquals
D.什么都不输出

23.下面的代码执行结果是( A )

public class TT{
public static void main(String[]args){
String a = "A";
StringBuffer b = new StringBuffer("B");
StringBuffer c = new StringBuffer("C");//初始化出的StringBuffer对象的内容就是字符串”C”
change(a,b,c);
System.out.println(a+","+b+","+c);//A,B1,C
}
static void change(String s,StringBuffer s1,StringBuffer s2){
s=s+"1";
s1.append("1");
System.out.println("1"+s2);// C
s2=new StringBuffer("C1");C //初始化出的StringBuffer对象的内容就是字符串”C1”
System.out.println("2"+s2);// C1
}
} A.A,B1,C
B.A1,B1,C1
C.A,B,C
D. A1,B,C 注意:String类是final变量不可以修改,stringbuffer 是new出来的,生成的对象根据括号里面的内容来生成

24.下列说法正确的有( C )

A.class中的constructor不可省略
B.constructor必须与class同名,但方法不能与class同名
C.constructor在一个对象被new时执行
D.一个class只能定义一个constructor 方法可以和类名同名的,和构造方法唯一的区别就是,构造方法没有返回值。

25.关于对象的删除,下列说法正确的是( B )

A.必须由程序员完成对象的清除
B.Java把没有引用的对象作为垃圾收集起来并释放
C.只有当程序中调用System.gc()方法时才能进行垃圾收集
D.Java中的对象都很小,一般不进行删除操作 解释:在Java中定义对象时往往通过new运算符为其分配内存空间,于是当不再希望使用这个对象时需要释放掉它所占用的内存。在Java中,释放内存的工作是由系统自动隐含的进行,编程人员无须关心。

26.下列描述中,错误的是( A )

A.Java要求编程者管理内存
B.Java的安全性体现在多个层次上
C.Applet要求在支持Java的浏览器上运行
D.Java有多线程机制 在编译层、解释层、平台层分别作不同的安全检查
Applet本身不能运行,但能够嵌入到Web浏览器中运行
多线程是Java程序的并发机制,它能同步共享数、处理不同的事件

27.在如下所示的类Test中,共有( C )个构造方法

public class Test{
private int x;
public Test(){ //1
x = 35;
} public void Test(double f) {
this.x = (int)f;
} public Test(double f){ //2
this.x = (int)f;
} public Test(String s) { } //3
} A.1
B.2
C.3
D.4 构造方法是与clss同名但是无返回值参数可以不同

28.设 A为已定义的类名,下列声明A类的对象a的语句中正确的是( A )

A.public  A  a=new  A( );
B.public A a=A( );
C.A a=new class( );
D.a A

29.关于类的静态成员的不正确描述是()

A.静态成员不属于对象,是类的共享成员
B.静态数据成员初始化的时机要优先于实例成员
C.静态成员函数不拥有this指针,需要通过类参数访问对象成员
D.只有静态成员函数可以操作静态数据成员

30.下列说法正确的是( C )

A.Java中包的主要作用是实现跨平台功能
B.package语句只能放在import语句后面
C.包(package)由一组类(class)和界面(interface)组成
D.可以用#include关键词来标明来自其他包中的类

31.关于继承的说法正确的是( B )

A.子类将继承父类所有的属性和方法
B.子类将继承父类的非私有属性和方法
C.子类只继承父类public方法和属性
D.子类只继承父类的方法,而不继承属性

32.下列修饰符中与访问控制无关的是( D )

A.private
B.public
C.protected
D.final

33.关于被私有访问控制符private修饰的成员变量,以下说法正确的是()

A.可以被三种类所引用:该类自身、与它在同一个包中的其他类、在其他包中的该类的子类
B.可以被两种类访问和引用:该类本身、该类的所有子类
C.只能被该类自身所访问和修改
D.只能被同一个包中的类访问

34.关于对象成员占用内存的说法哪个正确( B )

A.同一个类的对象共用同一段内存
B.同一个类的对象使用不同的内存段,但静态成员共享相同的内存空间
C.对象的方法不占用内存
D.以上都不对

35.下列哪个类的声明是正确的( D )

A.abstract final class HI{}
B.abstract private move(){}
C.protected private number;
D.public abstract class Car{} 类声明的格式为: [修饰符]class类名[extends父类名][implements类实现的接口列表]{...} 修饰符指明类的访问控制符和类型说明符。修饰符包括:public、默认(也称friendly)、 abstract、final。public和默认(也称friendly)为访问控制符,abstract和final是类型说明符。访问控制符可以和类型说明符搭配使用.

36.以下程序的输出结果为( D )

class Base {
public Base(String s) {
System.out.println("B");
}
} class Derived extends Base {
public Derived(String s) {
System.out.println("D");
}
} public class Test{
public static void main(String[] args) {
new Derived("C");
}
} A.BD
B.DB
C.C
D.编译错误

37.在使用super 和this关键字时,以下描述正确的是( A )

A.在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过
B.super()和this()不一定要放在构造方法内第一行
C.this()和super()可以同时出现在一个构造函数中
D.this()和super()可以在static环境中使用,包括static方法和static语句块 解释:
super()和this()类似,区别是,super从子类中调用父类的构造方法,this()在同一类内调用其它方法。
3)super()和this()均需放在构造方法内第一行。
4)尽管可以用this调用一个构造器,但却不能调用两个。
5)this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。
6)this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。
7)从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。

38.当编译并运行以下程序列会出现什么结果( A )

class A{
public int getNumber(int a){
return a+1;
}
} class B extends A{
public int getNumber(int a, char c){
return a+2;
}
public static void main(String[] args){
B b=new B();
System.out.println(b.getNumber(0));
}
} A.编译错误
B.运行错误
C.1
D.2

39.阅读下列程序,选择哪一个是正确的输出结果() 没有图片

A.static A I’m A class static B I’m B class
B.I’m A class I’m B class static A static B
C.static A static B I’m A class I’m B class
D.I’m A class static A I’m B class static B 注释:静态成员是累的共享成员
静态变量要在定义时就初始化
调用静态方法时通过类或对象激活

40.如下题:在子类Child2的方法f()中不可以操作的变量是( A )

package a;
class Parent{
private int i=20;
protected int j=30;
public int k=40;
int h=50;
} class Child1 extends Parent { } class Child2 extends Child1{ void f(){ } } A.i B.j C.k D.h

41.下列程序的运行结果是( )。

class Parent{
int i=20;
int j=30;
void f(){
System.out.print(” “+i);
}
} class Child extends Parent {
int i=30;
int k=40;
void f(){
System.out.print(” “+i);
}
void g(){
System.out.print(” “+k);
} public static void main(String args[]){
Parent x=new Child();
System.out.print(x.i);
x.f();
Child x1=(Child)x;
System.out.print(” “+x1.i);
x1.f();
}
} A.30 30 30 30 B.20 20 20 20 C.20 30 30 30 D.都不对

42.在JAVA 中( C )。

A.一个子类可以有多个父类,一个父类也可以有多个子类
B.一个子类可以有多个父类,但一个父类只可以有一个子类
C.一个子类只可以有一个父类,但一个父类可以有多个子类
D.上述说法都不对

43.下列哪一种叙述是正确的( D )

A. abstract修饰符可修饰字段、方法和类
B. 抽象方法的body部分必须用一对大括号{ }包住
C. 声明抽象方法,大括号可有可无
D. 声明抽象方法不可写出大括号

44.设int a=-2,则表达式a>>3的值为( D )。

A.8
B.0
C.3
D.-1 1000 0010 右移之后 1000 0001

45.看下面的程序,请给出结果:( B )

public class TestObj{
public static void main(String[] args){
Object o=new Object(){
public boolean equals(Object obj){
return true;
}
};
System.out.println(o.equals("Fred"));
}
} A.运行时抛出异常
B.true
C.Fred
D.第三行编译错误

46.下面程序问题( C )

interface C {
name = “”;
void f();
abstract void g();
void h(){};
} A.第2行编译错误
B.第4行编译错误
C.第5行编译错误
D.没有错误,正确

47.以下对抽象类的描述正确的是( D )

A.抽象类没有构造方法
B.抽象类必须提供抽象方法
C.抽象类可以通过new关键字直接实例化
D.有抽象方法的类一定是抽象类

48.以下描述错误的有( C )

A.abstract 可以修饰类、接口、方法
B.abstract修饰的类主要用于被继承
C.abstract 可以修饰变量
D.abstract修饰的类,其子类也可以是abstract修饰的
E.final可以用来修饰类、方法、变量

49.关于String,StringBuilder以及StringBuffer,描述错误的是( B )

A.对String对象的任何改变都不影响到原对象,相关的任何change操作都会生成新的对象
B.StringBuilder是线程安全
C.StringBuffer是线程安全
D.可以修改StringBuilder和StringBuffer的内容 String
final 修饰,不可变 StringBuilder 非线程安全、不使用多线程的情况下,效率高 StringBuffer
线程安全

50.在类的定义中可以有两个同名函数,这种现象称为函数( C )。

A.封装
B.重写
C.重载
D.继承

二、多选题(每题2分 * 10 = 20分)

1.关于final的说法正确的是( C D)

A.final一般修饰静态变量,静态变量不会发生变化
B.final不能修饰抽象类,抽象类是用来继承的
C.final修饰的方法,不能被重写,但是可以重载
D.final修饰类,类不能被继承, String就是final类

2. 下列标识符不合法的有( ACD )

A.new    B.$Usdollars    C.1234    D.car.taxi

3. 下面错误的初始化语句是( CD )

A.char str[]=”hello”;
B.char str[100]=”hello”;
C.char str[]={‘h’,’e’,’l’,’l’,’o’};
D.char str[]={‘hello’};

4.在Java中,下面关于包的陈述中正确的是( A D )

A.包的声明必须是源文件的第一句代码。
B.包的声明必须紧跟在import语句的后面。
C.只有公共类才能放在包中。
D.可以将多个源文件中的类放在同一个包中。

5. 关于数组的描述正确的是 ( ACD )

A. 数组有一个属性是length
B. 数组有一个方法是length()
C. 数组是固定长度,相同类型,连续的物理存储空间
D. 数组的声明可以是基本数据类型,也可以是对象类型数组,但是数组本身是引用类型

6.对于二分搜索法,下面描述正确的是(A C)

A.可用于数组
B.可用于单链表
C.只能在已排序的数据上进行
D.最坏情况下时间复杂度是O(N*LogN) 二分查找需要在已排序的数组上进行,需要能够通过下标直接索引到值,因此无法在链表上进行
二分查找首先要求数据是有序的,同时要求能随机访问数据元素, 有序数组可以, 链表不行,
二分查找因为每次都是从中间点开始查找,所以最坏情况是目标元素存在于最边缘的情况。最坏为O(LogN)

7.下列关于类的继承的描述,正确的有?(B )

A.一个类可以直接继承多个父类
B.一个类可以具有多个子类
C.子类会自动拥有父类定义的有效访问权限的方法以及成员变量
D.一个类继承另一个类必须重写父类的方法

8. 下列描述错误的是?(B D)

A.类只能继承一个父类,但是可以实现多个接口
B.抽象类自身可以定义成员而接口不可以
C.抽象类和接口都不能被实例化
D.一个类可以有多个基类和多个基接口 Java不支持多继承,只能有一个基类
接口中定义的成员变量默认为public static final,只能够有静态的不能被修改的数据成员;而且,必须给你赋初值,其所有成员方法都是public、abstract的,而且只能被这两个关键字修饰。

9. 数据的存储结构包括?( A B)

A.顺序存储
B.链式存储
C.图存储
D.二叉存储

10. 关于下面的代码说法正确的是( A C)

final class D{
final int no=1;
final void f(){
final String s=””;
s = “some thing”;
}
} A.该类不可被继承
B.第2行可不对no赋值
C.f方法不可被重写
D.没有编译错误

三、填空题(每题2分 * 5 = 10分)

1、如果一个 Java 源程序文件中定义了4个类,则使用编译命令 javac 编译该源程序文件,将生成 4 个扩展名为class 的字节码文件。

2、设 x = 2 则表达式 (x++)*3 的值是 6 。

3、Java 语言的各种数据类型之间提供了两种转换: 自动转换 、 强制转换 。

4、Java 设计有 gc 关键字,这不仅防止了内存地址计算错误的问题,也省去了编程时对内存进行分配的烦恼。

5、我们在Java 程序中把关键字 super 加到方法名称的面前,来实现子类调用父类的方法。

四、简答题(每题5分 * 4 = 20分)

1、抽象类(abstract class)和接口(interface)有什么异同?

抽象类:包含抽象方法的类就是抽象类
接口:指抽象方法的集合,方法不包含方法体 相同点:
都不能被实例化
接口的实现类或者抽象类的子类都必须实现了接口或抽象类中的方法后才可以被实例化 不同点:
接口只有定义,方法不能在接口中实现,实现接口的类要实现接口中所有的方法;抽象类可以有定义与实现,方法可以在抽象类中实现
接口要实现,抽象类要继承,一个类可以实现多个接口,但只能继承一个抽象类 接口强调设计理念为“has -a”的关系,抽象类强调“is -a”关系
接口中定义变量默认为public static final,且要赋初值,方法必须是public,static,且只能是这两个;抽象类中可以有自己的数据成员变量,也可以有非抽象的成员方法,而且成员变量默认为default。这些成员变量可以在子类中被重新定义,也可以重新赋值,抽象方法(有abstract修饰)不能用peivate,static,synchronized,native等访问修饰符修饰,同时方法以分号结尾,并且不带花括号
接口被运用于比较常用的功能,便于日后的维护或者添加删除方法;而抽象类更倾向于充当公共类的角色,不适用于对里面的代码进行修改   接口是一种特殊形式的抽象类,使用接口完全有可能实现与抽象类相同的操作。当子类和父类之间存在有逻辑上的层次结构时,推荐使用抽象类;当用于不同类之间,定义不同类之间的通信规则,希望支持差别较大的两个或者更多对象之间的特定交互行为时,应该使用接口。
此外,接口可以继承接口,抽象类可以实现接口,抽象类也可以继承具体类。抽象类也可以有静态的main方法。

2、什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?

Java虚拟机是执行字节码文件(.class)的虚拟机进程。
java源程序(.java)被编译器编译成字节码文件(.class)。然后字节码文件,将由java虚拟机,解释成机器码(不同平台的机器码不同)。利用机器码操作硬件和操作系统 因为不同的平台装有不同的JVM,它们能够将相同的.class文件,解释成不同平台所需要的机器码。正是因为有JVM的存在,java被称为平台无关的编程语言

3、说明overload和override的区别。

override(重写,覆盖)
1、方法名、参数、返回值相同。
2、子类方法不能缩小父类方法的访问权限。
3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
4、存在于父类和子类之间。
5、方法被定义为final不能被重写。 overload(重载,过载)
1、参数类型、个数、顺序至少有一个不相同。
2、不能重载只有返回值不同的方法名。
3、存在于父类和子类、同类中。 方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现。
重写(Overriding)是父类与子类之间多态性的一种表现,而重载(Overloading)是一个类中多态性的一种表现。

4、&和&&的区别?

&和&&都是逻辑运算符号,&&又叫短路运算符
&是位运算,返回结果是int型
&&是逻辑运算,返回结果是bool型

五、编程题(每题10分 * 2 = 20分 )

1、求100之内的素数(能被1和本身整除)。

public class test {
public static void main(String[] args) {
int i,n,k=0;
for (n = 3; n<=100; n++) { //3~100的所有数
i=2;
while (i<n) {
if (n%i==0) break; //若能整除说明n不是素数,跳出当前循环
i++;
if (i==n) { //如果i==n则说明n不能被2~n-1整除,是素数
k++; //统计输出数的个数
System.out.print(i+ "\t ");
if (k %6==0) //每输出5个则换行
System.out.println();
}
}
}
}

2、请使用Java编写程序对数组进行冒泡排序。

public class X{
public static void main(String[] args){
int[] arr = {34,2,6,4,23};
for(int i =0;i<arr.length;i++){
for(int j = 0;j<i;j++){
if(arr[i]>arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
for(int i = 0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
上一篇:[剑指Offer]5.二维数组中的查找


下一篇:物联网消费时代 车载穿戴将实现人车合一