小言_互联网的博客

java笔记---javase常见易错笔试题及答案(长期更新)

203人阅读  评论(0)

1、下列java程序的输出结果为____。

public class Example{
    String str=new String("hello");
    char[]ch={'a','b'};
    public static void main(String args[]){
        Example ex=new Example();
        ex.change(ex.str,ex.ch);
        System.out.print(ex.str+" and ");
        System.out.print(ex.ch);
    }
    public void change(String str,char ch[]){
        str="test ok";
        ch[0]='c';
    }
}

正确答案: B 你的答案: F (错误)

A. hello and ab
B. hello and cb
C. hello and a
D. test ok and ab
E. test ok and cb
F. test ok and c

解析:
String类是不可变的,不能继承和修改这个类。str=“tesk ok”,其实是隐含的让Java生成一个新的String对象,那么就与原来的“Hello”没有任何关系,当函数结束,str作用结束,所以输出的还是“Hello”。 char ch[] 是传递引用,修改了原内容。

2、给出以下代码

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”));
    }
}

请给出结果:()
正确答案: B 你的答案: D (错误)

A. 运行时抛出异常
B. true
C. Fred
D. 第三行编译错误

解析:创建了一个匿名内部类,并将所创建的匿名对象赋给 Objec同时,该匿名内部类重写了 Object 类的 equals 方法。任何情况下都返回true。

3、关于protected 修饰的成员变量,以下说法正确的是
正确答案: A 你的答案: B (错误)

A. 可以被该类自身、与它在同一个包中的其它类、在其它包中的该类的子类所访问
B. 只能被该类本身和该类的所有的子类访问
C. 只能被该类自身所访问
D. 只能被同一个包中的类访问

解析:

                public   protected   默认   private
同一个类            Y          Y       Y        Y
同一个包            Y          Y       Y        N
不同包的子类         Y          Y       N        N
不同包的非子类       Y          N       N        N

4、下面哪种情况会导致持久区jvm堆内存溢出?
正确答案: C 你的答案: D (错误)

A. 循环上万次的字符串处理
B. 在一段代码内申请上百M甚至上G的内存
C. 使用CGLib技术直接操作字节码运行,生成大量的动态类
D. 不断创建对象

解析:

java的堆内存分为两块:permantspace(持久带) 和 heap space。
持久带中主要存放用于存放静态类型数据,如 Java Class, Method 等, 与垃圾收集器要收集的Java对象关系不大。
而heapspace分为年轻带和年老带 
年轻代的垃圾回收叫 Young GC, 年老代的垃圾回收叫 Full GC。
在年轻代中经历了N次(可配置)垃圾回收后仍然存活的对象,就会被复制到年老代中。因此,可以认为年老代中存放的都是一些生命周期较长的对象
年老代溢出原因有  循环上万次的字符串处理、创建上千万个对象、在一段代码内申请上百M甚至上G的内存,既A B D选项
持久代溢出原因  动态加载了大量Java类而导致溢出

5、执行以下程序,最终输出可能是:
*代表空格
正确答案: C 你的答案: B (错误)

A. 010 2123012 3434
B. 01201 340124 2334
C. 0012314 01223344**
D. 12345 12345 12345

解析:

第一个空格之前必然有 0 1 2 3 4 这四个数字,这是因为第一个空格出现,意味着第一个线程执行完毕,
必然会打印这四个数字。又因为线程并发执行,所以后面两个线程个别数字可能会提前打印。

6、下面哪个不对?
正确的答案:C你的答案:A (错误)

A. RuntimeException是在Java虚拟机的正常操作期间可能引发的那些异常的超类。
B. 方法不需要在其throws子句中声明在方法执行期间可能抛出但未被捕获的RuntimeExeption的任何子类。
C. RuntimeException是Throwable的子类,它指示合理的应用程序不应尝试捕获的严重问题。
D. NullPointerException是RuntimeException的一种

解析:

7、下面哪些赋值语句是正确的()

正确答案: A B D 你的答案: A (错误)

A. long test=012
B. float f=-412
C. int other =(int)true
D. double d=0x12345678
E. byte b=128

解析:

A:012,int转long,低转高                                         正确
B:-412,默认是int,int转float,低转高                             正确
C:不同的类型不能转                                                错误
D:0x12345678,16进制的123456,默认是int,int转double,低转高        正确
E:byte默认范围是(-128 ~ 127)                                     错误

8、java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持,下面关于Java反射的描述,哪些是错误的:( )
正确答案: A D F 你的答案: B D (错误)

A. Java反射主要涉及的类如Class, Method, Filed,等,他们都在java.lang.reflet包下
B. 通过反射可以动态的实现一个接口,形成一个新的类,并可以用这个类创建对象,调用对象方法
C. 通过反射,可以突破Java语言提供的对象成员、类成员的保护机制,访问一般方式不能访问的成员
D. Java反射机制提供了字节码修改的技术,可以动态的修剪一个类
E. Java的反射机制会给内存带来额外的开销。例如对永生堆的要求比不通过反射要求的更多
F. Java反射机制一般会带来效率问题,效率问题主要发生在查找类的方法和字段对象,因此通过缓存需要反射类的字段和方法就能达到与之间调用类的方法和访问类的字段一样的效率

解析:

Class在java.lang包下, Java反射机制一般会带来效率问题,性能会降低。

转载:https://blog.csdn.net/qq_41022094/article/details/101953530
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场