day_02 刷题日记
多选题杀我…核心卷Ⅰ我都看哪儿去了…我哭…打卡第二天!新开的lib好小还是老馆有感觉,看见十二重新装修,专门的体育馆和好看的操场,真好,就是挺冷,比青岛冷…
1.String str1="abc"
,abc
分配在内存的哪个区域?
字符常量区用new创建的对象在堆,函数中临时变量在栈,java中的字符串在字符串常量区。
2.执行结果?
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");
}
执行结果dianpingdazhong,首先run()不是start(),并没有开启一个线程,所以还是顺序执行。如果是t.start(),结果就是dazhongdianping。
3.已知有下列Test类的说明,在该类的main方法内,则下列哪个语句是正确的?()
public class Test
{
private float f = 1.0f;
int m = 12;
static int n = 1;
public static void main (String args[])
{
Test t = new Test();
}
}
A t.f;
B this.n;
C Test.m
D Test.f
选A。默念三遍static静态成员变量不能使用this关键字!f虽然是private,但main还是在Test类中,所以A是可以的。m 和 f 都是普通成员属性,而 “类名.” 方式只能调用静态成员属性,CD都不对。
4.蓝绿色的是运行时异常,粉红色的是检查异常。声明为Error的是严重错误,什么系统崩溃、虚拟机异常啥的,不需要捕捉。
5.jar、Javac、javadoc、javah的区别
jar 将许多文件组合成一个jar文件
javac 编译
javadoc 它从程序源代码中抽取类、方法、成员等注释形成一个和源代码配套的API帮助文档。
javah 把java代码声明的JNI方法转化成C\C++头文件。 JNI可参考java核心技术卷二第12章
6.类的初始化过程:父类静态域—>子类静态域—>父类成员初始化—>父类构造块—>父类构造方法—>子类成员初始化**—>子类构造块—>子类构造方法
7.反射是通过一个名为Class的特殊类,用Class.forName(“className”);得到类的字节码对象,然后用newInstance()方法在虚拟机内部构造这个对象(针对无参构造函数)。
也就是说反射机制让我们可以先拿到java类对应的字节码对象,然后动态的进行任何可能的操作,
包括在运行时判断任意一个对象所属的类在运行时构造任意一个类的对象在运行时判断任意一个类所具有的成员变量和方法在运行时调用任意一个对象的方法这些都是反射的功能。
使用反射的主要作用是方便程序的扩展。
8.以下关于对象序列化描述正确的是(CD)
A 使用FileOutputStream可以将对象进行传输
B 使用PrintWriter可以将对象进行传输
C 使用transient修饰的变量不会被序列化
D 对象序列化的所属类需要实现Serializable接口
D显而易见的对,使用ObjectOutputStream和ObjectInputStream可以将对象进行传输.。声明为static和transient类型的成员数据不能被串行化。因为static代表类的状态, transient代表对象的临时数据.
9.在调用子类构造器之前,会先调用父类构造器,当子类构造器中没有使用"super(参数或无参数)"指定调用父类构造器时,是默认调用父类的无参构造器,如果父类中包含有参构造器,却没有无参构造器,则在子类构造器中一定要使用“super(参数)”指定调用父类的有参构造器,不然就会报错。
10.下列程序的执行结果()
static boolean foo(char c)
{
System.out.print(c);
return true;
}
public static void main(String[] args) {
int i =0;
for(foo('A');foo('B')&&(i<2);foo('C'))
{
i++;
foo('D');
}
}
A ABDCBDCB
B ABCDABCD
C 编译时出错
D 运行时抛出异常
选A,貌似我已经错过一次了…为啥选错,一开始我觉得初始化语句和更新语句不大对,所以我直接选了个编译错误…不过这个题还是挺简单的,主要是考for循环的执行顺序。初始化语句循环开始前执行一次,然后执行布尔表达式,然后执行循环体语句,然后是更新语句,完事之后再来遍布尔表达式循环体语句,一直到布尔表达式不成立了…
11.Hashtable 和 HashMap 的区别是:BCDE
A Hashtable 是一个哈希表,该类继承了 AbstractMap,实现了 Map 接口 应该是继承Dictionary
B HashMap 是内部基于哈希表实现,该类继承AbstractMap,实现Map接口
C Hashtable 线程安全的,而 HashMap 是线程不安全的
D Properties 类 继承了 Hashtable 类,而 Hashtable 类则继承Dictionary 类
E HashMap允许将 null 作为一个 entry 的 key 或者 value,而 Hashtable 不允许。
Hashtable:
(1)Hashtable 是一个散列表,它存储的内容是键值对(key-value)映射。
(2)Hashtable 的函数都是同步的,这意味着它是线程安全的。它的key、value都不可以为null。
(3)HashTable直接使用对象的hashCode。
HashMap:
(1)由数组+链表组成的,基于哈希表的Map实现,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的。
(2)不是线程安全的,HashMap可以接受为null的键(key)和值(value)。
(3)HashMap重新计算hash值
Hashtable,HashMap,Properties继承关系如下:
public class Hashtable<K,V> extends Dictionary<K,V>
implements Map<K,V>, Cloneable, java.io.Serializable
public class HashMap<K,V>extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
java.lang.Objecct
java.util.Dictionary<K,V>
java.util.Hashtable<Object,Object>
java.util.Properties