java题库错题总结(1)
1.Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持,下面关于Java反射的描述,哪些是错误的:( ADF )
AJava反射主要涉及的类如Class, Method, Filed,等,他们都在java.lang.reflet包下
B通过反射可以动态的实现一个接口,形成一个新的类,并可以用这个类创建对象,调用对象方法
C通过反射,可以突破Java语言提供的对象成员、类成员的保护机制,访问一般方式不能访问的成员
DJava反射机制提供了字节码修改的技术,可以动态的修剪一个类
EJava的反射机制会给内存带来额外的开销。例如对永生堆的要求比不通过反射要求的更多
FJava反射机制一般会带来效率问题,效率问题主要发生在查找类的方法和字段对象,因此通过缓存需要反射类的字段和方法就能达到与之间调用类的方法和访问类的字段一样的效率
解析:
反射指的是在运行时能够分析类的能力的程序。
反射机制可以用来:
1.在运行时分析类的能力--检查类的结构--所用到的就是java.lang.reflect包中的Field、Method、Constructor,分别用于描述类的与、方法和构造器。A中的Class类在java.lang中。
2.在运行时查看对象。
3.实现通用的数组操作代码。
反射机制的功能:
在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态***。
反射机制常见作用:
动态加载类、动态获取类的信息(属性、方法、构造器);动态构造对象;动态调用类和对象的任意方法、构造器;动态调用和处理属性;获取泛型信息(新增类型:ParameterizedType,GenericArrayType等);处理注解(反射API:getAnnotationsdeng等)。
反射机制性能问题:
反射会降低效率。
void setAccessible(boolean flag):是否启用访问安全检查的开关,true屏蔽Java语言的访问检查,使得对象的私有属性也可以被查询和设置。禁止安全检查,可以提高反射的运行速度。
可以考虑使用:cglib/javaassist操作。
上述资料来源:《Java核心技术 卷I》
2.list是一个ArrayList的对象,哪个选项的代码填到//todo
delete处,可以在Iterator遍历的过程中正确并安全的删除一个list中保存的对象?(A)
1
2
3
4
5
6
7
8
9
10
11
|
Iterator it = list.iterator(); int index = 0 ; while (it.hasNext()) { Object obj = it.next(); if (needDelete(obj)) //needDelete返回boolean,决定是否要删除 { //todo delete } index ++; } |
A.it.remove();
B.list.remove(obj);
C.list.remove(index);
D.list.remove(obj,index);
解析:如果在循环的过程中调用集合的remove()方法,就会导致循环出错,例如:
for(int i=0;i<list.size();i++){
list.remove(...);
}
循环过程中list.size()的大小变化了,就导致了错误。
所以,如果你想在循环语句中删除集合中的某个元素,就要用迭代器iterator的remove()方法,因为它的remove()方法不仅会删除元素,还会维护一个标志,用来记录目前是不是可删除状态,例如,你不能连续两次调用它的remove()方法,调用之前至少有一次next()方法的调用。
3.子类不能继承父类的无参构造器(true)
构造器只能被调用,不能被继承