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"); } }
解析:在调用子类构造器之前,会先调用父类构造器,当子类构造器中没有使用"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.虚函数是实现方法重载的工具
答案:DF
B.Java中所有的函数都是虚函数
C.通过虚函数,类体系获得了多态性支持
D.虚函数必须在子类中实现
E.虚函数不能够被子类继承
F.在C++中,基类的析构函数建议为虚析构函数