目录
习题见: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;
}