我是靠谱客的博主 感动冬瓜,最近开发中收集的这篇文章主要介绍JAVA选择练习题 04,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1. 下列不属于访问控制符的是(D)
 A. public
 B. private
 C. protected
 D. static
 解析:public 公有 private私有 protected受保护
static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块。   
2. 类Car里面有个方法run(),如果直接用Car.run(),则方法run前面必须用的关键词是?  (D)
 A. class
 B. final
 C. public
 D. static
 解析:被sataic声明的为静态方法,可以直接通过类名调用而不需要通过对象调用。
3. 在使用 interface 声明一个外部接口时,只可以使用(D)修饰符修饰该接口。
 A. private
 B. protected
 C. private protected
 D. public
解析:接口的方法都是 public abstract 变量都是public static final的。
4. 下面哪个标识符是合法的?(D)
 A. "9HelloWorld"
 B. "_Hello World"
 C. "Hello*World"
 D. "Hello$World"
 解析:标识符是以字母开头的字母数字序列:
数字是指0~9,字母指大小写英文字母、下划线(_)和美元符号($),也可以是Unicode字符集中的字符,如汉字;字母、数字等字符的任意组合,不能包含+- *等字符;
5. 下面有关java的一些细节问题,描述错误的是?(B)
 A. 构造方法不需要同步化
 B. 一个子类不可以覆盖掉父类的同步方法
 C. 定义在接口中的方法默认是public的
 D. 容器保存的是对象的引用
 解析:子类应该是可以置换掉父类的同步方法的。
6. 以下程序的输出结果是 (A)
public class Print{
    static boolean out(char c){
        System.out.println(c);
        return true;
    }
    public static void main(String[] argv){
        int i = 0;
        for(out('A');out('B') && (i<2);out('C')){
            i++;
            out('D');
        }
    }
}
 A. ABDCBDCB
 B. BCDABCD
 C. 编译错误
 D. 运行错误
 解析:其实这题考察的是for(int i=0;i<10;i++){}循环的执行顺序:
1.int i=0;初始化这一步只执行一次;
2.i<10;进行条件判断;条件达成返回true 否则false不往下执行,跳出for循环圈
3.i++ ;  是最后执行的,当循环体内的代码执行完它才进行赋值。
7. transient 变量和下面哪一项有关? (B)  
 A. Cloneable
 B. Serializable
 C. Runnable
 D. Comparable
 解析:和序列化有关,这是一个空接口,起标记作用,具体的序列化由ObjectOutputStream和ObjectInputStream完成。transient修饰的变量不能被序列化,static变量不管加没加transient都不可以被序列化。
8. 顺序执行下列程序语句后,则b的值是(C)
String a="Hello";
String b=a.substring(0,2);
 A. Hello
 B. Hel
 C. He
 D. null
 解析:substring    方法将返回一个包含从  start  到最后(不包含  end  )的子字符串的字符串。
9. 下面程序的运行结果:(B)
public static void main(String args[]) {
        Thread t=new Thread(){
        public void  run(){
            dianping();
             
        }
    };
    t.run();
    System.out.print("dazhong");
    }
    static void dianping(){
        System.out.print("dianping");
}
 A. dazhongdianping
 B. dianpingdazhong
 C. a和b都有可能
 D. dianping循环输出,dazhong夹杂在中间
 解析:在上面main()方法中,并没有创建一个新的线程,只是简单地方法调用而已,如果想要创建线程,需要t.start();创建线程,等待cpu时间片,而run()方法只是简单地方法调用,所以先执行run(),在输出dazhong。
10.假设有以下代码String s = "hello";String t = "hello"char c [ ] = {'h','e','l','l','o'};下列选项中返回false的语句是?(B)
 A. s.equals (t);
 B. t.equals (c);
 C. s==t;
 D. t.equals (new String ("hello"));
 解析:首先==与equals是有明显区别的。
==强调栈中的比较,可以理解为地址比较
equals强调对象的内容比较
String s=“hello”;会在栈中生成hello字符串,并存入字符串常量池中。
String t=“hello” ;创建时,会在字符串常量池中寻找,当找到需要的hello时,不进行字符串的创建,引用已有的。 所以,s==t返回true,s.equals(t)也是truechar c[]={'h','e','l','l','o'}; c==s这个是不存在的,==两边类型不同
t.equals(c)这个语句在anObject instanceof String这步判断不会通过,也就是cha[] 压根不能与String相比较,类型不是相同的。返回false
11.try块后必须有catch块。(B)
 A. 正确
 B. 错误
 解析:catch可以省略,try的形式有三种:
try-catch
try-finally
try-catch-finallycatchfinally语句不能同时省略!
12. 以下代码段执行后的输出结果为 (D)
public class Test {
public static void main(String args[]) {
int x = -5;
int y = -12;
System.out.println(y % x);
}
}
 A. -1
 B. 2
 C. 1
 D. -2
 解析:当x和y的正负相同时,取余和取模结果相同;
当x和y的正负不同时,取余结果的符号和x相同,取模结果的符号和y相同。
13. 以下代码段执行后的输出结果为(D)
public class Test {
public static void main(String args[]) {
int x = -5;
int y = -12;
System.out.println(y % x);
}
}
 A. -1
 B. 2
 C. 1
 D. -2
 解析:无论是正数还是负数,在取余运算时都有:被除数=商×除数+余数,所以-12=2×(-5)+(-2)-12是被除数,-5是除数,2是商,余数是-2
14. 关于final说法正确的是?  (B)
 A. final类的方法肯定不能被同一个包的类访问
 B. final类的方法能否被同一个包的类访问不是由final决定
 C. final方法等同于private方法
 D. final对象本身的引用和值都不能改变
 解析:final变量,如果是基本数据类型,则其数值一旦初始化后就不能被改变。如果是引用类型的变量,则对其初始化后,便不能再指向另一个对象,但是其里面的值是可以改变的。引用变量所指向的对象中的内容是可以改变的。
15. 抽象类方法的访问权限默认都是public。(B)
 A. 正确
 B. 错误
 解析:抽象类中的抽象方法和非抽象方法在不加修饰符的情况下,都是默认的default
16. 下列不正确的 Java 语言标识符是(C)
 A. Sky
 B. $Computer
 C. for
 D. NULL
 解析:Java标识符命名规范是:
1)只能包含字母a-zA-Z,数字0-9,下划线_和美元符号$;
2)首字母不能为数字;
3)关键字和保留字不能作为标识符。
null是关键字,NULL不是关键字,java区分大小写。这题答案D是对的,但C是错的,for是关键字。
17. static String str0="0123456789";
static String str1="0123456789";
String str2=str1.substring(5);
String str3=new String(str2);
String str4=new String(str3.toCharArray());
str0=null;
假定str0,...,str4后序代码都是只读引用。
Java 7中,以上述代码为基础,在发生过一次FullGC后,上述代码在Heap空间(不包括PermGen)保留的字符数为(C)
 A. 5
 B. 10
 C. 15
 D. 20
 解析:substring实际是new5字符,str3和4也都是new,每个5字符,分别都会创建新的对象,常量池是PermGen的,因此应该是一共15字符。
18. 下列程序的运行结果(A)
public void getCustomerInfo() {
        try {
            // do something that may cause an Exception
        } catch (java.io.FileNotFoundException ex) {
            System.out.print("FileNotFoundException!");
        } catch (java.io.IOException ex) {
            System.out.print("IOException!");
        } catch (java.lang.Exception ex) {
            System.out.print("Exception!");
        }
    }
 A. IOException!
 B. IOException!Exception!
 C. FileNotFoundException!IOException!
 D. FileNotFoundException!IOException!Exception!
 解析:1.如果抛出一个FileNotFoundException(或其子类),那么最终结果就打印FileNotFoundException
2.如果抛出一个IOException,或者IOException的子类(不包含FileNotFoundException及其子类),那么最终结果就打印IOException
3.如果抛出一个Exception(不包含IOException及其子类),那么最终结果就打印Exception.
以上,所以3个皆有可能.但是,不管是哪一种情况,只会输出其中之一。
19. 以下代码运行输出的是(C)
public class Person{
    private String name = "Person";
    int age=0;
}
public class Child extends Person{
    public String grade;
    public static void main(String[] args){
        Person p = new Child();
        System.out.println(p.name);
    }
}
 A. 输出:Person
 B. 没有输出
 C. 编译出错
 D. 运行出错
 解析:Java中对字段属性是静态绑定,方法成员是动态绑定,这里错在:在子类中试图访问父类的private字段,所以编译不通过,将private去掉就可访问,不是动态绑定的问题,它本来就属于静态绑定。
20. 下面哪个方法与Applet的显示无关?(A)
 A.draw
 B. paint
 C. repaint
 D. update
 解析:Applet显示相关的方法主要有3个。
1. paint(Graphicsg)方法,具体执行Applet的绘制。
2. update(Graphicsg)()方法,主要用于更新Applet的显示。
3. repaint()方法,主要用于Applet的重新显示,它调用update()方法实现对Applet的更新。
而draw()方法与显示无关,故选A draw
21. What is displayed when the following is executed;(A)
double d1=-0.5;
System.out.println("Ceil d1="+Math.ceil(d1));
System.out.println("floor d1="+Math.floor(d1));
 A. Ceil d1=-0.0  floor d1=-1.0
 B. Ceil d1=0.0  floor d1=-1.0
 C. Ceil d1=-0.0  floor d1=-0.0
 D. Ceil d1=0.0  floor d1=0.0
 E. Ceil d1=0  floor d1=-1
 解析:ceil:大于等于 x,并且与它最接近的整数。
floor:小于等于 x,且与 x 最接近的整数。
22.以下哪几种是java的基本数据类型。(BC)
 A. String
 B. int
 C. boolean
 D. Double
 解析:java 8中基本数据类型:byteshortintlongdoublefloatbooleanchar
23. 已知如下的命令执行 java MyTest a b c 请问哪个语句是正确的? (CD)
 A. args[0] = "MyTest a b c"
 B. args[0] = "MyTest"
 C. args[0] = "a"
 D. args[1]= "b"
 解析:对于java命令,类名后面跟着的就是main函数的参数,多个参数则用空格隔开。 main方法的形参是一个string数组所以对于java mytest a b c传入的参数算是一个string数组。 即args[0]=a args[1]=b args[2]=c。
24. 下列描述正确的是(AC)?
 A. 类不可以多继承而接口可以多实现
 B. 抽象类自身可以定义成员而接口不可以
 C. 抽象类和接口都不能被实例化
 D. 一个类可以有多个基类和多个基接口
 解析:1.java支持单继承,却可以实现多个接口。a对d错
2.接口没有构造方法,所以不能实例化,抽象类有构造方法,但是不是用来实例化的,是用来初始化的。c对
3.抽象类可以定义普通成员变量而接口不可以,但是抽象类和接口都可以定义静态成员变量,只是接口的静态成员变量要用static final public 来修饰。
25. 实现或继承了Collection接口的是(BCE)
 A. Map
 B. List
 C. Vector
 D. Iterator
 E. Set
 解析:Map不属于集合类。
vector实现list接口,list继承collection接口,set也继承collection接口。
collection没有继承Iterator接口,而是Iterable
26. 下面有关java类加载器,说法正确的是?(ABCD)
 A. 引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的
 B. 扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。
 C. 系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类
 D. tomcat为每个App创建一个Loader,里面保存着此WebApp的ClassLoader。需要加载WebApp下的类时,就取出ClassLoader来使用
 解析:jvm classLoader architecture :
a、Bootstrap ClassLoader/启动类加载器
主要负责jdk_home/lib目录下的核心 api 或 -Xbootclasspath 选项指定的jar包装入工作.
B、Extension ClassLoader/扩展类加载器
主要负责jdk_home/lib/ext目录下的jar包或 -Djava.ext.dirs 指定目录下的jar包装入工作
C、System ClassLoader/系统类加载器
主要负责java -classpath/-Djava.class.path所指的目录下的类与jar包装入工作.
B、 User Custom ClassLoader/用户自定义类加载器(java.lang.ClassLoader的子类)
在程序运行期间, 通过java.lang.ClassLoader的子类动态加载class文件, 体现java动态实时类装入特性.
27.关于下面这段Java程序,哪些描述是正确的:(C)
public class ThreadTest extends Thread {
	public void run() {
	System.out.println("In run");
	yield();
	System.out.println("Leaving run");
	}
public static void main(String []argv) {
	(new ThreadTest()).start();
  }
}
 A. 程序运行输出只有In run
 B. 程序运行输出只有Leaving run
 C. 程序运行输出先有In run后有Leaving run
 D. 程序运行输出先有Leaving run后有In run
 E. 程序没有任何输出就退出了
 F. 程序将被挂起,只能强制退出
 解析:yield()应该做的是让当前运行线程回到可运行状态,以允许具有相同优先级的其他线程获得运行机会。因此,使用yield()的目的是让相同优先级的线程之间能适当的轮转执行。但是,实际中无法保证yield()达到让步目的,因为让步的线程还有可能被线程调度程序再次选中。
28.以下说法错误的是(BCD)
 A. 其他选项均不正确
 B. java线程类优先级相同
 C. Thread和Runnable接口没有区别
 D. 如果一个类继承了某个类,只能使用Runnable实现线程
 解析:B选项,在java中线程是有分优先等级的所以优先级不能相同,错误
C选项,Thread实现了Runnable接口是一个类不是接口,错误
D选项,实现多线程的三种方式,一种是继承Thread类使用此方式就不能继承其他的类了。还有两种是实现Runnable接口或者实现Callable接口,所以D错误。
29.Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持,下面关于Java反射的描述,哪些是错误的:(    )
正确答案: A D F   你的答案: D E (错误)
Java反射主要涉及的类如Class, Method, Filed,等,他们都在java.lang.reflet包下
通过反射可以动态的实现一个接口,形成一个新的类,并可以用这个类创建对象,调用对象方法
通过反射,可以突破Java语言提供的对象成员、类成员的保护机制,访问一般方式不能访问的成员
Java反射机制提供了字节码修改的技术,可以动态的修剪一个类
Java的反射机制会给内存带来额外的开销。例如对永生堆的要求比不通过反射要求的更多
Java反射机制一般会带来效率问题,效率问题主要发生在查找类的方法和字段对象,因此通过缓存需要反射类的字段和方法就能达到与之间调用类的方法和访问类的字段一样的效率
解析:A选项Class类位于lang包下面,D选项反射的本质就是从字节码中查找,动态获取类的整容结构,包括属性,构造器,动态调用对象的方法,而不是修剪类,F选项我觉得应该是,使用了反射的效率都会降低,就算加了缓存。
30.Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持,下面关于Java反射的描述,哪些是错误的:(ADF)
 A. Java反射主要涉及的类如Class, Method, Filed,等,他们都在java.lang.reflet包下
 B. 通过反射可以动态的实现一个接口,形成一个新的类,并可以用这个类创建对象,调用对象方法
 C. 通过反射,可以突破Java语言提供的对象成员、类成员的保护机制,访问一般方式不能访问的成员
 D. Java反射机制提供了字节码修改的技术,可以动态的修剪一个类
 E. Java的反射机制会给内存带来额外的开销。例如对永生堆的要求比不通过反射要求的更多
 F. Java反射机制一般会带来效率问题,效率问题主要发生在查找类的方法和字段对象,因此通过缓存需要         
 G. 反射类的字段和方法就能达到与之间调用类的方法和访问类的字段一样的效率
 解析:A:Class类在java.lang包下,错;
B:动态代理可以通过接口与类实现,通过反射形成新的代理类,这个代理类增强了原来类的方法。对;
C:反射可以强制访问private类型的成员,对;
D:反射并不能对类进行修改,只能对类进行访问,错;
E:反射机制对永生堆要求较多,对;
F:即使使用换成,反射的效率也比调用类的方法低,错;

最后

以上就是感动冬瓜为你收集整理的JAVA选择练习题 04的全部内容,希望文章能够帮你解决JAVA选择练习题 04所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部