2021-09-09 第二次周考详解:78

目录

一、单选题(每题 2 分,共 40 分)

二、多选题(每题 3 分,共 15 分)

三、填空题(每题 2 分,共 10 分)

四、简答题(每题 5 分,共 25 分)

五、编程题(每题 5 分,共 10 分)


习题见:2021-09-09 第二次周考试题_zz2097831284的博客-CSDN博客

一、单选题(每题 2 分,共 40 分)

1.给出如下代码:

class Test{

private int m;

public static void fun() {

//some code?

}

}

如何使成员变量 m 可以被函数 fun()直接访问( C )

A.将 private int m 改为 protected int m

B.将 private int m 改为 public int m

C.将 private int m 改为 static int m//静态方法直接访问静态变量,所以转static

D.将 private int m 改为 int m

2.已知 A 类在 package A 中, B 类在 package B 中,且 B 类被声明为 public,且

有一个成员变量 x 被声明为 protected 控制方式。C 类也位于 package A 包

中,且继承了 B 类。则以下说法正确的是(C

A.A 类的实例不能访问到 B 类的实例 //A能访问B的public

B.A 类的实例能够访问到 B 类一个实例的 x 成员//protected限制子类同包类

C.C 类的实例可以访问到 B 类一个实例的 x 成员//子类可以访问父类的protected

D.C 类的实例不能访问到 B 类的实例 //子类可以访问父类非私有

3.从下面四段(A,B,C,D)代码中选择出正确的代码段(C )

A.abstract class Name {

private String name;

public abstract boolean isStupidName(String name) {} //抽象方法不能有方法体

}

B.public class Something {

void doSomething () {

private String s = "";//局部变量不能有访问权限修饰符

int l = s.length();

}

}

C.public class Something {

public static void main(String[] args) {

Other o = new Other();

new Something().addOne(o);

}

public void addOne(final Other o) {

o.i++;

}

}class Other {

public int i;

}

D.public class Something {

public int addOne(final int x) { //final修饰的变量不可变

return ++x;

}

}

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

A.abstract 修饰符可修饰字段、方法和类//不能修饰字段

B.抽象方法的 body 部分必须用一对大括号{ }包住

C.声明抽象方法,大括号可有可无

D.声明抽象方法不可写出大括号 //抽象方法不能有方法体{}

5.已知如下代码,下列选项中哪个表达式会编译出错(C )

interface IFace{}

class CFace implements IFace{}

class Base{}

public class ObRef extends Base{

public static void main(String argv[]){

ObRef ob = new ObRef();

Base b = new Base();

Object o1 = new Object();

IFace o2 = new CFace();

}

}

A.o1=o2;//Object父类指向子类CFace

B.b=ob;//Base父类指向子类ObRef

C.ob=b;//子类不能指向父类

D.o1=b; //Object父类指向子类Base

6.已知类 Teacher 和 Student 都是类 Person 的子类,对于下列代码说法正确的是(D )

Person t = new Teacher();

if (t instanceof Teacher){

Student s = (Student)t;//Student和Teacher虽继承同父类,但没有关系,类型转换异常

}

A.将构造一个 Student 对象

B.将构造一个 Teacher 对象

C.编译出错,且运行时出错

D.编译正确,且运行时出错//类型转换异常在编译时不报错

7.下列关于修饰符混用的说法,错误的是(D )

A.abstract 不能与 final 并列修饰同一个类//抽象类必须被继承,final修饰类不能继承

B.abstract 类中可以有 private 的成员//四种都可以

C.abstract 方法可以放在 abstract 类或接口中 //抽象类接口都可以有抽象方法

D.static 方法中能直接使用非 static 的属性//静态不能直接调用非静态

8.以下程序的运行结果是(A )

1. public static void main(String[] args) {

2. Object obj = new Object() {

3. public int hashCode() { //重写了hashCode()方法,返回42

4. return 42;

5. }

6. };

7. System.out.println(obj.hashCode());//输出语句中调用,输出42

8. }

A.42

B.运行时出错

C.第 2 行位置编译出错

D.第 7 行位置编译出错

9.在 JAVA 中,已定义两个接口 B 和 C,要定义一个实现这两个接口的类,以下语句正确的是 (C )。

A.interface A extend B,C

B.interface A implements B,C

C.class A implements B,C//接口实现使用implements,可以多接口

D.class A implements B, implements C

10.以下代码输出结果是(D )

public class Test {

public static void main (String [] args) {

String foo = "blue"; //foo创建并指向常量池的blue

String bar = foo;//bar指向blue

foo = "green"; //foo创建指向新的green

System.out.println(bar); //bar依旧指向blue

}

}

A.运行时出现异常

B.代码会编译出错

C.输出结果为 null

D.输出结果为"blue"

11.指出下列程序运行的结果(B )

public class Example{

String str=new String("good"); //成员变量str

char[]ch={'a','b','c'}; //成员变量ch[]

public static void main(String args[]){

Example ex=new Example();//①

ex.change(ex.str,ex.ch);//调用方法②

System.out.print(ex.str+" and ") ;//⑥拼接:good and

System.out.print(ex.ch);//⑦拼接:gbc

}

public void change(String str,char ch[]){//③

str="test ok";//④局部变量str指向新的,成员变量str不变

ch[0]='g';//⑤成员变量ch[0]重新赋值 g

}

}

A.good and abc

B.good and gbc

C.test ok and abc

D.test ok and gbc

12.下面代码的运行结果为:(C )

public class foo{

public static void main (String[] args){

String s;//局部变量没有初始值

System.out.println("s=" + s); //s处编译报错

}

}

A.代码得到编译,并输出“s=”

B.代码得到编译,并输出“s=null”

C.由于 String s 没有初始化,代码不能编译通过

D.代码得到编译,但捕获到 NullPointException 异常

13.以下代码编译运行的结果是(D )。

public class Base{

private void test() {

String aStr = "? One? ";//a创建指向?One?

String bStr = aStr;//b也指向?One?

aStr.toUpperCase(); //变成全大写,但是没重新赋值给a,所以a不变

aStr.trim(); //删除空白和我?有什么关系

System.out.println("[" + aStr + "," + bStr + "]");//[? One? ,? One? ]

}

static public void main(String[] a) {

new Base().test();

}

}

A.[ONE,?One?]

B.[? One? ,One ]

C.[ONE,ONE]

D.[? One? ,? One? ]

14.正则表达式"\d+\.?\d{1,2}"在匹配下列字符串时结果失败的是(B )

A."12.5"

B."1.025"// [0-9]一到多个 . 0-1个 [0-9] 1到2个

C."0125"

D."125.00"

15.String str1 = "HCLX";String str2 = str1+"hclx",创建了( C )个对象

A.1

B.2

C.3//①HCLX ②hclx  ③HCLXhclx

D.4

16.下列方法被调用后,变量 result 的结果是(C )。

public static void main(String[] args) {

StringBuilder str = new StringBuilder("abc");

int result = getResult(str);

System.out.println(result);

}

public static int getResult(StringBuilder str){ //abc

str.append("abc");//abcabc

str.delete(0,3);//abc

str.insert(0, "abc");//abcabc

str.replace(0,3, "abc");//abcabc

return str.length();//6

}

A.0

B.5

C.6

D.9

17.如下程序:

String str = "I can do it because I think I can";

int index1 = str.indexOf("can");//2

int index2 = str.lastIndexOf("can");//30

int result = index1 + index2;//32

result 结果是:(C )。

A.2

B.30

C.32

D.-1

18.对于以下字符串 str="wangmengmeng,wangfei,dibiaozuishuaiwangpengli"

通过下列程序获取到三个名字。

程序如下:String[] names =( );

for (int i = 0; i < names.length; i++) {

System.out.println(names[i]);

}

空白处应该填写的代码是:(B )。

A.split(",",str)

B.str.split(",")//split通过String类型调用,()中放根据切割的字符串

C.str.toArray(",")

D.Arrays.toArray(str,",");

19.下列程序输出结果是(B )。

String str = "华创 is a very good company!"; //华创开头,company!结尾

boolean bo1 = str.startsWith("华创")&&str.endsWith("company");//true&&false

System.out.println(bo1);

A.true

B.false

C.编译错误

D.运行时异常

20.在 JAVA 中,下面关于 String 类和 StringBuilder 类的描述正确的是(A )。

A.StringBuilder 类的对象调用 tostring()方法将转换为 String 类型

B.两个类都有 append()方法 //StringBuilder和StringBuffer特有的

C.可以直接将字符串“test”赋值给声明的 Stirng 类和 StringBuilder 类的变量//后者不可

D.两个类的实例的值都能够被改变 //String不可

二、多选题(每题 3 分,共 15 分)

1.String str = "We are students"; 下面说法正确的是(AC )。

A.str 的长度是 15 //15个字符,长度15

B.str 的长度是 14

C.str.indexOf("a")返回的结果是 3 //第一个a是3

D.str.lastIndexOf("e")返回的结果是 3 //最后一个e是11

2.String s = new String("hello");//常量池创建hello并创建对象指向

String t = new String("hello");//创建对象指向hello

char c [ ] = {'h', 'e', 'l', 'l', 'o'};//char数组

下列哪些表达式返回 true (AD )

A.s.equals(t); //比较字面量值

B.t.equals(c);//String vs 数组,比地址

C.s==t;//地址不同,new两次

D.t.equals (new String("hello"));//比字面值

3.以下哪个选项可以替换第 2 行位置的代码,且替换后效果相同(ABC )

1. public interface Foo{

2. int k = 4;3. }//接口,静态常量,public static final

A.final int k = 4;

B.public int k = 4;

C.static int k = 4;

D.abstract int k = 4;

4.不能用来修饰 interface 的有(ACD )

A.private

B.public//接口只能public

C.protected

D.static

5.在 JAVA 8.0 版本之前,接口中可以定义( BD )。

A.静态方法//JDK8后static

B.常量

C.构造方法 //接口没有构造方法

D.抽象方法

三、填空题(每题 2 分,共 10 分)

1.对于 long 型变量,内存分配(8 )个字节

2.在循环体中,如果想结束当前循环可以用( break )语句

3.Java 中一个类可有(1 )个父类

4.构造方法(可以 )重载

5.子类(不能 )访问父类的私有属性

四、简答题(每题 5 分,共 25 分)

1.String,StringBuffer,StringBuilder 的区别

String:是不可变字符串,声明时可以直接用字面量赋值。每次修改字符串时都会创建新对象,性能很差,适合操作少量数据。

StringBuffer和StringBuilder:是可变的字符串对象,适用于频繁修改,修改性能好,开销小。声明时不能直接使用字面量赋值,必须创建对象,调用构造函数。StringBuffer是JDK1.0提供的,线程安全;StringBuilder是JDK5提供的,线程不安全,但效率更高。

2.==和 equals 的区别

① ==可以比较基本类型,也可以比较引用类型;equals只能比较引用类型。

② ==比较基本类型时比较的是值本身,比较引用类型比较的是地址值;

   Object类中的equals()方法使用的是“==”,比较的是引用类型的地址值; 如果重写以后,按照重写时定义的规则进行比较。

  String类重写了equals()方法,可以直接用来比较简单字符串是否相等。

3.什么是 GC?GC 的工作原理是什么?有什么方法可以调用 GC?

GC就是垃圾回收器,Java语言提供的GC功能可以自动的检测对象是否超过作用域,从而达到自动回收内存的目的。Object类中存在void finalize()方法,当垃圾回收器不确定存在该对象的更多应用时,由对象的垃圾回收器调用此方法

4.抽象类和接口的区别

① 接口使用interface,抽象类使用abstractclass

② 接口可以多继承,类只能单继承

③ 接口中只能由静态常量,抽象类中可以有普通变量

④ 接口中没有构造方法,抽象类有构造方法

⑤ 接口在JDK8之前只能有抽象方法,JDK8之后可以有static/default修饰的普通方法。

抽象类中可以有抽象方法,也可以有普通方法。

⑥ 接口中的访问权限都是public,抽象类中四种访问权限都可以

⑦ 接口中可以简写,会进行自动拼接;抽象类中不可以简写

5.什么是自动拆装箱?

发生在基本数据类型和包装类的转换时,JDK5之后提供了新功能:自动拆装箱。

自动拆箱:包装类自动转换为基本类型

自动装箱:基本类型自动转换为包装类

该特性是编译器认可的,不是虚拟机认可的,当编译器在编译代码时发现有基本类型与包装类相互复制操作时,会自动添加转换的代码,这样我们在源代码中就不需要编码来完成相互的转换了。

五、编程题(每题 5 分,共 10 分)

1.统计 9 这个字符在目标字符串中出现的次数(目标字符串 李荣 lir999ong4567899)

        int index = 0,count=0;

        String str = "李荣 lir999ong4567899";

        while(true){

            index=str.indexOf("9",index);

            if(index==-1){

                break;

            }

            index++;

            count++;

        }

        System.out.println(个数是:+count);

2. 封装 sortString(String str)方法,对传入字符串中的字符进行排序并返回。

例如字符串“bcdefag”排序后结果:"abcdefg

    public static String sortString(String str){

        char ch[] = str.toCharArray();

        Arrays.sort(ch);

        str = String.valueOf(ch);

        return str;

    }


版权声明:本文为zz2097831284原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。