1.下列说法正确的是() 正确答案: B 你的答案: B (正确) A.在类方法中可用this来调用本类的类方法 B.在类方法中调用本类的类方法时可直接调用 C.在类方法中只能调用本类中的类方法 D.在类方法中绝对不能调用实例方法
解释:类方法是指用static修饰的方法,普通方法叫对象方法。 A.this指的是当前对象,类方法依附于类而不是对象this会编译出错 C.类方法中也可以调用其他类的类方法。同时可以通过创建对象来调用普通方法 D.类方法中可以创建对象,所以可以调用实例方法
2.观察以下代码:
class Car extends Vehicle
{
public static void main (String[] args)
{
new Car(). run();
}
private final void run()
{
System. out. println ("Car");
}
}
class Vehicle
{
private final void run()
{
System. out. println("Vehicle");
}
}
下列哪些针对代码运行结果的描述是正确的? 正确答案: A 你的答案: A (正确) A.Car B.Vehicle C.Compiler error at line 3 D.Compiler error at line 5 E.Exception thrown at runtime
解释: 首先final声明的方法是不能被覆盖的,但是这里并不错误,因为方法是private的,也就是子类没有继承父类的run方法,因此子类的run方法跟父类的run方法无关,并不是覆盖。new Car().run()也是调用子类的run方法。
此题的父类方法有private修饰,所以对子类不可见,子类不能覆盖。所以子类方法和父类是两个方法。 扩展:如果父类方法将private改为public 会怎样? 会报错,因为父类方法有final修饰,不能被覆盖。
3.以下JAVA程序代码的输出是
public static void main(String args[]) {
System.out.println(17^5);
}
正确答案: C 你的答案: C (正确) A.12 B.22 C.20 D.1419857
解释:位异运算符号。 运算规则是:两个数转为二进制,然后从高位开始比较,如果相同则为0,不相同则为1。 17:0001 0001 5: 0000 0101 结果:0001 0100 转10进制:20
4.下面代码输出结果是?
class C {
C() {
System.out.print("C");
}
}
class A {
C c = new C();
A() {
this("A");
System.out.print("A");
}
A(String s) {
System.out.print(s);
}
}
class Test extends A {
Test() {
super("B");
System.out.print("B");
}
public static void main(String[] args) {
new Test();
}
}
正确答案: B 你的答案: C (错误) A.BB B.CBB C.BAB D.None of the above
解释: 1.首先,初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化; 2.然后,初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化; 3.其次,初始化父类的普通成员变量和代码块,在执行父类的构造方法; 4.最后,初始化子类的普通成员变量和代码块,在执行子类的构造方法; (1)初始化父类的普通成员变量和代码块,执行 C c = new C(); 输出C (2)super(“B”); 表示调用父类的构造方法,不调用父类的无参构造函数,输出B (3) System.out.print(“B”); 所以输出CBB
String str = "";
System.out.print(str.split(",").length);
输出结果为:
正确答案: B 你的答案: B (正确) A.0 B.1 C.出现异常
解释: 注意2点: 1:String获取长度用的是length()方法,而数组类型我们直接用属性length获取长度,所以String[]数组类型我们应该用length获取长度;2:总结来说,因为原字符串不包含分隔符,所以直接返回原字符串,分割出来只有一个空的字符串数组,所以结果是1.(注意,虽然原字符串为空,存到字符串数组为空,但是这个空也会算一个元素。)
6.由3 个“1”和 5 个“0”组成的 8 位二进制补码,能表示的最小整数()
正确答案: B 你的答案: B (正确) A.-126 B.-125 C.-32 D.-3
解释: 既然求最小整数,那肯定先想到负数,则最高位(符号位)一定为1,原码中肯定是1所在的位数越高,值越小,而补码是由原码取反加1得到的,则在补码中1所在的位数一定要越低,即补码为1000 0011;由补码求得原码:1111 1101=-(64+32+16+8+4+1)=-125;
7.看以下代码:
文件名称:forward.jsp
<html>
<head><title> 跳转 </title> </head>
<body>
<jsp:forward page="index.htm"/>
</body>
</html>
如果运行以上jsp文件,地址栏的内容为 正确答案: A 你的答案: C (错误) A.http://127.0.0.1:8080/myjsp/forward.jsp B.http://127.0.0.1:8080/myjsp/index.jsp C.http://127.0.0.1:8080/myjsp/index.htm D.http://127.0.0.1:8080/myjsp/forward.htm
解释: redirect:请求重定向:客户端行为,本质上为2次请求,地址栏改变,前一次请求对象消失。举例:你去银行办事(forward.jsp),结果告诉你少带了东西,你得先去***局办(index.html)临时身份证,这时你就会走出银行,自己前往***局,地址栏变为index.html. forward:请求转发:服务器行为,地址栏不变。举例:你把钱包落在出租车上,你去警察局(forward.jsp)报案,警察局说钱包落在某某公司的出租车上(index.html),这时你不用亲自去找某某公司的出租车,警察局让出租车自己给你送来,你只要在警察局等就行。所以地址栏不变,依然为forward.jsp
8.以下哪些类是线程安全的()
正确答案: A D E 你的答案: D E (错误) A.Vector B.HashMap C.ArrayList D.StringBuffer E.Properties
解释: A,Vector相当于一个线程安全的List B,HashMap是非线程安全的,其对应的线程安全类是HashTable C,Arraylist是非线程安全的,其对应的线程安全类是Vector D,StringBuffer是线程安全的,相当于一个线程安全的StringBuilder E,Properties实现了Map接口,是线程安全的
9.下面有关java threadlocal说法正确的有?
正确答案: A B C D 你的答案: B D (错误)
A.ThreadLocal存放的值是线程封闭,线程间互斥的,主要用于线程内共享一 些数据,避免通过参数来传递
B.线程的角度看,每个线程都保持一个对其线程局部变量副本的隐式引用,只要线程是活动的并且 ThreadLocal 实例是可访问的;在线程消失之后,其线程局部实例的所有副本都会被垃圾回收
C.在Thread类中有一个Map,用于存储每一个线程的变量的副本。
D.对于多线程资源共享的问题,同步机制采用了“以时间换空间”的方式,而ThreadLocal采用了“以空间换时间”的方式
解释: ThreadLocal类用于创建一个线程本地变量 在Thread中有一个成员变量ThreadLocals,该变量的类型是ThreadLocalMap,也就是一个Map,它的键是threadLocal,值为就是变量的副本。通过ThreadLocal的get()方法可以获取该线程变量的本地副本,在get方法之前要先set,否则就要重写initialValue()方法。 ThreadLocal的使用场景: 数据库连接:在多线程中,如果使用懒汉式的单例模式创建Connection对象,由于该对象是共享的,那么必须要使用同步方法保证线程安全,这样当一个线程在连接数据库时,那么另外一个线程只能等待。这样就造成性能降低。如果改为哪里要连接数据库就来进行连接,那么就会频繁的对数据库进行连接,性能还是不高。这时使用ThreadLocal就可以既可以保证线程安全又可以让性能不会太低。但是ThreadLocal的缺点时占用了较多的空间。
10.有关线程的叙述正确的是()
正确答案: C D 你的答案: C D (正确) A.可以获得对任何对象的互斥锁定 B.通过继承Thread类或实现Runnable接口,可以获得对类中方法的互斥锁定 C.线程通过使用synchronized关键字可获得对象的互斥锁定 D.线程调度算法是平台独立的
解释: A,“任何对象”锁定,太绝对了,你能锁住你没有权限访问的对象吗? B,前半句话讲的是创建线程的方式,后半句讲的是锁定,驴头不对马嘴。 C,正确。 D,线程调度分为协同式调度和抢占式调度,Java使用的是抢占式调度,也就是每个线程将由操作系统来分配执行时间,线程的切换不由线程本身来决定(协同式调度)。这就是平***立的原因。
|