单项选择题的第9题,请大神赐教,我认为是只有它的子类才可以直接访问。
一、单项选择题
1 、执行的结果是:
System.out.format("Pi is approximately %d.", Math.PI);
请问执行结果: 运行时异常
解释: d% 用来输出 十进制整数,format的第2个参数必须是十进制整数。
Math.PI 是double类型的数据(3.14159...),可以用%f输出。
图1:Math.PI需要用%f来输出
图2:%d只能输出十进制整数
2、输出的结果是:
public class Certkiller3 implements Runnable {
public void run() {
System.out.print("running");
}
public static void main(String[] args) {
Thread t = new Thread(new Certkiller3());
t.run();
t.run();
t.start();
}
}
输出的结果为: runningrunningrunning
解释: Thread.run()与Thread.start()的区别,Thread.run()相当于只是在主线程中,调用了Thread里的一个普通方法run().未开启多线程。Thread.start()实现了多线程运行程序,run()方法执行完毕,子线程结束。
3、代码片段1:
public class ComplexCalc {
public int value;
public void calc() {value += 5;}
}
代码片段2:
public class MoreComplexCalc extends ComplexCalc {
public void calc() {value -= 2;}
public void calc(int multi) { //调用这个方法 multi = 3
calc(); //调用自己的方法,value = 1;
super.calc();
value *= multi;
}
public static void main(String[] args) {
MoreComplexCalc calc = new MoreComplexCalc();
calc.calc(3);
System.out.println("Oh it is:" + calc.value); // 3
}
}
输出的结果是:Oh it is:9
解释:请看图解(从main方法开始执行)
4、下列说法正确的是:
public class Person {
private Stringname;
public Person(String name) {
this.name = name;
}
public boolean equals(Person p) {
return p.name.equals(this.name);
}
}
A:equals方法没有正确覆盖Object类中的equals方法。
B:编译这段代码会出错,因为第5行的私有属性p.name访问不到。
C:如果要与基于哈希的数据结构一起正常地工作,只需要在这个类中在实现hashCode方法即可。
D:当添加一组Person对象到类型为java.util.Set的集合时,第4行中的equals方法能够避免重复。
答案:A
解释:如果正确覆盖,需要形参为Object。
5、 打印的结果是:
public class JavaContest {
public static void main(String[] args) throws Exception {
Thread.sleep(3000);
System.out.println("alive");
}
}
结果:会在3秒后输出alive。
解释:延迟的效果需要自己去试。
6、请问有什么较好的方法来过滤value是空值的情况。
public void aSafeMethod(Object value) {
//在这里检查方法的参数
//这里省略其他代码
System.out.println(value.toString());
}
答案:
if(value == null) {
throw new IllegalArgumentException("value can not be null.");
}
解释:IllegalArgumentException 指传入了一个不合法的参数异常。
7、打印的结果:
public static void main(String[] args) {
method1(1,2); // 执行 method1(int x1, int x2),hello java
System.out.print(" java");
}
public static void method1(int x1, int x2) {
System.out.print("hello");
}
public static void method1(int x1, int x2, int x3) {
System.out.print("hi");
}
结果是:hello java
解释:从main方法开始执行,第5行只有2个形参,调用有2个参数的method1方法,执行完后才接着执行第6行。
8、选出正确说法:
void waitForSignal() {
Object obj = new Object();
synchronized (Thread.currentThread()) {
obj.wait();
obj.notify();
}
}
A: 需要处理InterruptedException
B: 代码能编译单可能运行时抛出IllegalStateException.
C: 运行10分钟后代码抛出TimeOutException.
D: 需要把obj.wait()替换为((Thread) obj).wait()后代码才能通过编译。
E: 把obj.wait()和obj.notify()这两句调换一下位置,能使代码执行。
答案:A
9、请问什么类可以直接访问并且改变name的值?
package certkiller;
class Target {
public String name = "hello";
}
答案:Target的子类(以下3个类的图片),但参考答案给的是包certkiller下的类,请大神给解释。
图1:Test类
图2:Person类
图3:t1类
10、 打印的结果:
int i = 1;
while(i != 5) {
switch(i++%3) {
case 0:
System.out.print("A");
break;
case 1:
System.out.print("B");
break;
case 2:
System.out.print("C");
break;
}
}
结果:BCAB
解释: i++%3 表达式是先计算,后对i自加1。
11、执行的结果:
public class Test {
public Test() {
System.out.print("test ");
}
public Test(String val) {
this();
System.out.print("test with " + val);
}
public static void main(String[] args) {
Test test = new Test("wow");
}
}
结果: test test with wow
解释:此题考查构造方法的调用
12、编译运行的结果是: 编译出错
String text = "Welcome to Java contest";
String[] words = text.split("\s");
System.out.println(words.length);
解释:鼠标移至错误地方:Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
13、以下选项说法正确的是:
public class Test {
private int a;
public int b;
protected int c;
int d;
public static void main(String[] args) {
Test test = new Test();
int a = test.a++;
int b = test.b--;
int c = test.c++;
int d = test.d--;
System.out.println(a + " - " + b + " - " + c + " - " + d);
}
}
A编译错误,因为变量a、b、c和d没有被初始化
B编译错误,因为变量a无法被访问
C编译成功并输出0 - 0 - 0 - 0
D编译成功并输出1 - -1 - 1 - -1
解释: j=i++ 与j=++i的区别
j=i++, 先将i赋值给j,再对i自身加1;
j=++i, 先对i自身加1,再赋值给j;
14、Map
A、map = new HashMap<>();
B、map = new HashMap
C、map = new HashMap
D、map = new LinkedHashMap
答案:D
解释:Map的Key指题目中已经确定为String, A 答案,泛型可以只有一边写明
15、
contestKiller = new ReallyBigObject();
//这里省略部分代码
contestKiller = null;
/*在这里补充代码*/
哪个是告诉虚拟机尽最大可能回收contestKiller 占用的内存空间:
A、Runtime.getRuntime().freeMemory()
B、Runtime.gc()
C、System.freeMemory()
D、Runtime.getRuntime().growHeap()
E、System.gc()
答案:E
解释:A和B是正在运行过程中的空闲内存,c是系统中的空闲内存,D是运行中的堆栈释放,E是程序运行时所有的空闲内存空间。
二、多项选择题:
1、给出一个尚未使用泛型的方法
11. public static int getSum(List list) {
12. int sum = 0;
13. for(Iterator iter = list.iterator(); iter.hashNext();) {
14. int i = ((Integer) iter.next()).intValue();
15. sun += i;
16. }
17. return sum;
18. }
为了适应泛型,需要对代码做以下那三项改动?
A、删除第14行
B、将第14行替换成int i = iter.next();
C、将第13行替换成for(int i : intList) {
D、将第13行替换成for(Iterator iter : intList)
E、方法的参数声明改为getSum(List
F、方法的参数声明改为getSum(List
答案: ACF
2、 哪些类的定义是正确的:
public abstract interface Sudo {
public void crazy(String s);
}
A、public abstract class MySudo implements Sudo {
public abstract void crazy(String s) {} }
B、public abstract class YourSudo implements Sudo {}
C、public class HerSudo implements Sudo {
public void crazy(String i){}
public void crazy(Integer s){} }
D、public class HisSudo implements Sudo {
public void crazy(Integer i) {} }
E、public class ItsSudo extends Sudo {
public void crazy(Integer i){} }
答案:BC
解释:接口就是抽象的,因此Sudo是否用abstract修饰都没有关系。实现接口就必须要实现接口里的方法。
3、 请问会输出哪些情况:
public class Test {
public static void main(String[] args) {
int i = 3, j;
outer:while(i > 0) {
j = 3;
inner:while(j > 0) {
if(j < 2) break outer; //跳出外部outer循环
System.out.println(j + " and " + i);
j--;
}
i--;
}
}
}
答案: 3 and 3 2 and 3
解释:本问题考察的是2个while循环,使用inner 和 outer标间。
外层循环, i=3 j = 3,进入内层循环, 执行一次输出, j自减后成2
再内层循环,执行输出,j自减后成1,执行那个break outer退出外层循环。
4、 有一个文件夹,它有2个子文件夹,分别是“sora”和“shu”, "sora”里面只有名为“aoi.txt”的文件,“shu”里面只有名为“qi.txt”的文件。
在此文件夹下执行以下命令:
java Directories qi.txt
输出的结果是:“false true”
请问以下哪些选项的代码分别插到上面的代码中能达到此效果?
import java.io.*;
class Directories {
static String[] films = {"sora", "shu"};
public static void main(String[] args) {
for(String fp : films) {
//在这里插入第一句代码
File file = new File(path, args[0]);
//在这里插入第二句代码
}
}
}
A、 String path = fp; System.out.print(file.exists() + " ");
B、 String path = fp; System.out.print(file.isFile() + " ");
C、 String path = File.separator + fp; System.out.print(file.exists() + " ");
D、 String path = File.separator + fp; System.out.print(file.isFile() + " ");
答案: AB
解释:file.isFile()指文件存在,且为标准文件。
5、以下哪些选项的代码存在错误
A、long n1 = 12_3_45____789;
B、long n2 = __123_45_678_9;
C、int n3 = 0xFc_aB_C3_353;
D、double n4 = 0b11001_001_0_0_11;
E、float n5 = 1.4_142_13;
F、float n6 = 0_1_2_3;
答案:BCE
解释: n2不能不以数字开头
n3 提示超出了int类型的最大值
n5 右侧数据为double类型
三、编程题
1、 写一个名叫Square的类用于求一个数的平方。
类里面提供两个静态方法,名字都叫square。
其中一个方法的参数和返回值都是long型,另一个方法的参数和返回值都是double型
答:
public class Square{
public static long square(long l){
return l*l;
}
public staic double squre(double d){
return d*d;
}
}
2、给出以下接口HelloWorld,请编写一个类MyHelloWorld实现该接口,并满足接口中所要求的功能。
答:
public interface HelloWorld{
public void sayHello();
}
Public class MyHelloWorld implements HelloWord{
@overide
public void sayHello(){
System.out.println(“中国你好!”);
}
}
3、给出如下Shape类,请事先一个公有类Rectangle,满足以下要求:
继承于Shape,实现Shape的所规定的功能
有int类型的width和height属性(宽和高)及相应的getter和setter
有一个带两个int参数的共有构造方法,第一个参数设置宽,第二个参数设置高
给定如下的代码:
public abstract class Shape {
/**计算形状的面积 */
abstract public int getArea();
}
请您写出一个类名为Rectangle的类,要求能满足题意。[代码编辑区]
public class Rectangle extends Shape{
private int width;
private int height;
public void setWidth(int width){
this.width = width;
}
public int getWidth(){
return width;
}
public void setHeight(int height){
this.height = height;
}
public int getHeight(){
return height;
}
public Rectangle(int width, int height){
this.width = width;
this.height = height;
}
public int getArea(){
return this.width*this.height;
}
}
4、在某间软件公司里,小蔡接到上头的一个任务:某位高职的员工留下了一个接口IList,但是该接口的实现类的源码却已丢失,现在需要为该接口重新开发一个实现类MyList.
下面提供了IList接口的代码。
要实现的MyList是一个公有类,里面需要提供一个公有的无参构造方法MyList(),用于创建一个空的(不含任何元素的)IList。
请你帮小蔡写出这个实现类的代码。
(注意。若要使用java.lang包以外的类,请别忘了import。竞赛时将不会有此提醒)
给定如下的代码:
/** 精简的列表(List),用于储存一系列的元素(对象)。
IList里面储存的元素会按插入的顺序排放,也能根据下标获取这些元素。下标从0开*始。 */
public interface IList {
/**往列表的尾部增加一个元素 */
void add(Object o);
/**获取下标所指定的元素。当下标越界时抛出异常 java.lang.IndexOutBoundsException */
object get(int i);
/**获取列表里当前元素的个数*/
int size();
/**清空列表,移除列表里所有的元素*/
void clear();
}
请您写出一个类名为MyList的类,要求能满足题意。[代码编辑区]
import java.util.ArrayList;
import java.util.List;
public class MyList implements IList {
List list = null;
public MyList() {
list = new ArrayList();
}
void add(Object o) {
list.add(o);
}
object get(int i) {
if(i>list.size()) {
throw new IndexOutBoundsException (“超出大小”);
}
return list.get(i);
}
int size() {
return list.size();
}
void clear() {
list.clear();
}
}