表达式(short)10/10.2*2运算后结果是什么类型? 正确答案:C
A.short
B.int
C.double
D.float
解析:
强制类型转换的优先级高于+ - * /,所以short只把10强制转换为了short
假定Base b = new Derived(); 调用执行b.methodOne()后,输出结果是什么? A
public class Base
{
public void methodOne()
{
System.out.print(“A”);
methodTwo();
}
public void methodTwo()
{
System.out.print(“B”);
}
}
public class Derived extends Base
{
public void methodOne()
{
super.methodOne();
System.out.print(“C”);
}
public void methodTwo()
{
super.methodTwo();
System.out.print(“D”);
}
}
A.ABDC
B.AB
C.ABCD
D.ABC
解析:
这是一道类多态的向上转型题。
Base b = new Derived();
向上转型:父类只能调用父类方法或者子类覆写后的方法,而子类中的单独方法则是无法调用的。
(多选)下面关于volatile的功能说法正确的是哪个 BC
A.原子性
B.有序性
C.可见性
D.持久性
解析:
synchronized保证三大性,原子性,有序性,可见性,volatile保证有序性,可见性,不能保证原子性
(多选)下面哪些具体实现类可以用于存储键,值对,并且方法调用提供了基本的
多线程安全支持:( ) AE
A.java.util.ConcurrentHashMap
B.java.util.Map
C.java.util.TreeMap
D.java.util.SortMap
E.java.util.Hashtable
F.java.util.HashMap
解析:
线程安全的map:HashTable,SynchronizedMap,ConcurrentHashMap
(多选)接口和抽象类描述正确的有( ) BC
A.抽象类没有构造函数。
B.接口没有构造函数。
C.抽象类不允许多继承。
D.接口中的方法可以有方法体。
解析:
jdk1.8后接口中用static或default修饰的方法可以有方法体,所以D选项也应该是正确的。
关于Java以下描述正确的有( ) CD
A.Class类是Object类的超类
B.Object类是一个final类
C.String类是一个final类
D.Class类可以装载其它类
解析:
Object类是所有类的父类,所以Object类不能用final修饰(因为被final修饰的类不能被继承)
String类是一个不变类,只有String是不可变的,才实现字符串常量池,节省空间,提高效率,同
一个字符串常量被多个线程共享,实现线程安全
一个文件中的数据要在控制台上显示,首先需要(C )。
A、System.out.print (buffer[i]);
B、FileOutputStream fout = new FileOutputStream(this.filename);
C、FileInputStream fin = new FileInputStream(this.filename);。
D、System.in.read(buffer)。
解析:
字节流读取文件:FileInputStream fin = new FileInputStream(this.filename);
字节流输出文件:FileOutputStream fout = new FileOutputStream(this.filename);
下面不是面向对象的基本原则的是? C
A、单一职责原则(Single-Resposibility Principle)
B、开放封闭原则(Open-Closed principle)
C、抽象类原则(Abstract-Class principle)
D、依赖倒置原则(Dependecy-Inversion Principle)
E、接口隔离原则(Interface-Segregation Principle)
解析:
面向对象五大基本原则:单一职责原则,开放封闭原则,依赖倒置原则,接口隔离原则,Liskov替换原则
Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持,下面关于Java反射的描述,哪些是错误的:( ) ADF
A.Java反射主要涉及的类如Class, Method, Filed,等,他们都在java.lang.reflet包下
B.通过反射可以动态的实现一个接口,形成一个新的类,并可以用这个类创建对象,调用对象方法
C.通过反射,可以突破Java语言提供的对象成员、类成员的保护机制,访问一般方式不能访问的成员
D.Java反射机制提供了字节码修改的技术,可以动态的修剪一个类
E.Java的反射机制会给内存带来额外的开销。例如对永生堆的要求比不通过反射要求的更多
F.Java反射机制一般会带来效率问题,效率问题主要发生在查找类的方法和字段对象,因此通过缓存需要反射类的字段和方法就能达到与之间调用类的方法和访问类的字段一样的效率
解析:
反射指的是在运行时能够分析类的能力的程序。
反射机制可以用来:
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操作。
列哪些操作会使线程释放锁资源?BC
A、sleep()
B、wait()
C、join()
D、yield()
解析:
sleep():使线程进入休眠状态,不释放锁
wait():在其他线程调用对象的notify或notifyAll方法前使当前对象等待,线程释放其所占据的锁,使其他线程有机会抢占锁
join():用于等待调用此方法的线程结束,再继续执行
yield():暂停当前线程,使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。