1. Character 字符封装类
String 常量池中字符串
StringBuffer 存放字符数组
Vector 数组
2. JVM是Java Virtual Machine(Java 虚拟机 )的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
简单来看,虚拟机本质就是一个进程。模拟平台操作的一个进程, 是一种计算机软件技术
3. 一般关系数据模型和对象数据模型之间有以下对应关系:表对应类,记录对应对象,表的字段对应类的属性
4.
void waitForSignal()
{
Object obj = new Object();
synchronized(Thread.currentThread())
{
obj.wait();
obj.notify();
}
}
Which statement is true?(A)
A. This code may throw an InterruptedException
B. This code may throw an IllegalStateException
C. This code may throw a TimeOutException after ten minutes
D. This code will not compile unless”obj.wait()”is replaced with”(Thread)obj).wait()”
E. Reversing the order of obj.wait()and obj.notify()may cause this method to complete normally
解析:
这题有两个错误的地方,第一个错误是 wait() 方法要以 try/catch 包覆,或是掷出 InterruptedException 才行
因此答案就是因为缺少例外捕捉的 InterruptedException
第二个错误的地方是, synchronized 的目标与 wait() 方法的物件不相同,会有 IllegalMonitorStateException ,不过 InterruptedException 会先出现,所以这不是答案
最后正确的程式码应该是这样:
void waitForSignal() {
Object obj = new Object();
synchronized (obj) {
try {
obj.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
obj.notify();
}
}
5. 多态分为 编译时多态 和 运行时多态 。其中 编辑时多态是静态的 , 主要是指方法的重载 ,它是根据参数列表的不同来区分不同的函数,通过编辑之后会变成两个不同的函数,在运行时谈不上多态。而 运行时多态是动态的 ,它是 通过动态绑定来实现的 ,也就是我们所说的多态性(要有继承关系 2.子类要重写父类的方法 3.父类引用指向子类)
6. 引用数据类型是引用传递(call by reference),基本数据类型是值传递(call by value)
值传递不可以改变原变量的内容和地址—》原因是java方法的形参传递都是传递原变量的副本,在方法中改变的是副本的值,而不适合原变量的
引用传递不可以改变原变量的地址,但可以改变原变量的内容– 原因是当副本的引用改变时,原变量 的引用并没有发生变化,当副本改变内容时,由于副本引用指向的是原变量的地址空间,所以,原变量的内容发生变化。
结论:1.值传递不可以改变原变量的内容和地址;
2.引用传递不可以改变原变量的地址,但可以改变原变量的内容;
7. 有这么一段程序:
public class Test{
public String name="abc";
public static void main(String[] args){
Test test=new Test();
Test testB=new Test();
System.out.println(test.equals(testB)+","+test.name.equals(testB.name));
}
}
请问以上程序执行的结果是(C)
A. true,true
B. true,false
C. false,true
D. false,false
解析:
没有重写equals()方法,比较的是对象的地址是否一样,因为new出来的两个对象肯定是不同的对象,不同的对象它们的地址是不同的,所以第一个返回false;String类重写了equals()方法,比较的是两个对象的内容(值)是否相等,因为两个对象的name都是"abc",所以是true。
8. java的GC回收是完全自动的,没有提供相关api手动回收,所有的内存分配和回收权限都在jvm,在开发人员手里没有绝对的强制垃圾回收的方法,不过可以这样去做:
1. 对于不再引用的对象,及时把它的引用赋为null。 obj = null;
2. 如果内存确实很紧张,调用System.gc() 方法来建议垃圾回收器开始回收垃圾,通知GC运行,但是Java语言规范并不保证GC一定会执行。
9. 在为传统面向对象语言的程序做单元测试的时候,经常用到mock对象。Mock对象通过反射数。请问反射最大程度破坏了面向对象的以下哪个特性?(封装)
反射破坏代码的封装性,破坏原有的访问修饰符访问限制
MARK:
mock对象:也称为伪对象,在测试中的利用mock对象来代替真实对象,方便测试的进行。
java的封装性:指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,通过该类提供的方法实现对内部信息的操作访问。
反射机制:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性
10. Java 程序中使用赋值运算符进行对象赋值时,可以得到两个完全相同的对象。(错误)
解析:
对象赋值时,比如A=B,只是把A对象的地址指向了B对象的地址,所以其实对象只有一个
11. Exception(异常)
是程序本身可以处理的异常。主要包含RuntimeException等运行时异常和IOException,SQLException等非运行时异常。
运行时异常 包括:都是RuntimeException类及其子类异常,如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。
运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。
非运行时异常(编译异常) 包括:RuntimeException以外的异常&#x