2.8Java专项测试复盘

  • 以下哪个类包含方法flush()?()
    A.InputStream
    B.OutputStream
    C.A 和B 选项都包含
    D.A 和B 选项都不包含
    解析:flush()函数强制将缓冲区中的字符流、字节流等输出,目的是如果输出流输出到缓冲区完成后,缓冲区并没有填满,那么缓冲区将会一直等待被填满。所以在关闭输出流之前要调用flush()。
    答案:B

  • 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)保留的字符数为()
    A. 5        B.10            C.15               D.20
    解析:
    这是一个关于java的垃圾回收机制的题目。垃圾回收主要针对的是堆区的回收,因为栈区的内存是随着线程而释放的。堆区分为三个区:年轻代(Young Generation)、年老代(Old Generation)、永久代(Permanent Generation,也就是方法区)。

    年轻代:对象被创建时(new)的对象通常被放在Young(除了一些占据内存比较大的对象),经过一定的Minor GC(针对年轻代的内存回收)还活着的对象会被移动到年老代(一些具体的移动细节省略)。
    年老代:就是上述年轻代移动过来的和一些比较大的对象。Minor GC(FullGC)是针对年老代的回收。
    永久代:存储的是final常量,static变量,常量池。
    str3,str4都是直接new的对象,而substring的源代码其实也是new一个string对象返回。
    经过fullgc之后,年老区的内存回收,则年轻区的占了15个,不算PermGen。所以答案选C

    答案:C

  • 以下程序的输出结果为
    class Base{
        public Base(String s){
            System.out.print("B");
        }
    }
    public class Derived extends Base{
        public Derived (String s) {
            System.out.print("D");
        }
        public static void main(String[] args){
            new Derived("C");
        }
    }
    A.BD                              B.DB                             C.C                     D.编译错误
    解析:在调用子类构造器之前,会先调用父类构造器,当子类构造器中没有使用"super(参数或无参数)"指定调用父类构造器时,是默认调用父类的无参构造器,如果父类中包含有参构造器,却没有无参构造器,则在子类构造器中一定要使用“super(参数)”指定调用父类的有参构造器,不然就会报错。
    答案:D

  • java中将ISO8859-1字符串转成GB2312编码,语句为 ?  
    A.new String("ISO8859-1".getBytes("ISO8859-1"),"GB2312")
    B.new String(String.getBytes("GB2312"), ISO8859-1)
    C.new String(String.getBytes("ISO8859-1"))
    D.new String(String.getBytes("GB2312"))
    解析:JAVA有一个public String(byte bytes[], Charset charset)函数可以用指定字节数组和编码来构造字符串。一个public byte[] getBytes(Charset charset)函数把字符串按指定编码来得到字节数组。可以用这两个函数来实现编码转换。选A
    答案:A

  • 有关线程的叙述正确的是()
    A.可以获得对任何对象的互斥锁定
    B.通过继承Thread类或实现Runnable接口,可以获得对类中方法的互斥锁定
    C.线程通过使用synchronized关键字可获得对象的互斥锁定
    D.线程调度算法是平台独立的
    解析:
    1.线程通过调用对象的synchronized方法可获得对象的互斥锁定。
    2. 线程调度算法是平台 独立的。
    3. 通过继承Thread类或实现Runnable接口来创建线程。
    线程调度分为协同式调度和抢占式调度,Java使用的是抢占式调度,也就是每个线程将由操作系统来分配执行时间,线程的切换不由线程本身来决定(协同式调度)。这就是平台 独立的原因。
    答案:CD

  • 关于虚函数,下面哪些描述是正确的 (        )

    A.虚函数是实现方法重载的工具
    B.Java中所有的函数都是虚函数
    C.通过虚函数,类体系获得了多态性支持
    D.虚函数必须在子类中实现
    E.虚函数不能够被子类继承
    F.在C++中,基类的析构函数建议为虚析构函数

    答案:DF

     

 

posted @ 2020-02-08 23:24  19呀  阅读(281)  评论(0编辑  收藏  举报