一、 以下的变量定义语句中,合法的是()
A.byte=128
B.boolean=null
C.long a=123L
D.double=0.9239d
解析:
- byte表示的范围为[-128,127];
- boolean的取值只能是true或false
- D选项缺少变量名
答案:C
二、若在某一个类定义中定义有如下的方法: abstract void performDial( );
该方法属于()
A.本地方法
B.最终方法
C.解态方法
D.抽象方法
解析:
本地方法:简单地讲,一个
native Method
就是一个java调用非java代码的接口;native方法表示该方法要用另外一种依赖平台的编程语言实现。最终方法:
final void B(){}
,这样定义的方法就是最终方法,最终方法在子类中不可以被重写,也就是说,如果有个子类继承了这个最终方法所在的类,那么这个子类中不能出现void B(){}
这样的方法。最终类:
final class A {}
,这样定义的类就是最终类,最终类不能被继承。abstract
修饰抽象类。
答案:D
三、 有以下程序片段,下列哪个选项不能插入到行 1 。( )。
1.
2.public class A {
3. //do sth
4.}
A.
public class MainClass{ }
B.package mine;
C.class ANotherClass{ }
D.import java.util.*;
解析:
- Java的一个源程序只能有一个public类存在,且类名与文件名相同。java程序是从main方法开始执行的,public为类加载器提供入口,然后找到public类中的main方法开始执行。如果存在多个public类,程序将不知道从哪里开始执行。
- 注意:内部类是可以public的,因为内部类是作为外部类的成员而存在。
答案:A
四、执行如下程序,输出结果是( )
public class Test_Thread {
public static void main(String[] args) {
Test mv = new Test();
Thread t1 = new ThreadExample(mv);
Thread t2 = new ThreadExample(mv);
Thread t3 = new ThreadExample(mv);
t1.start();
t2.start();
t3.start();
}
}
class Test{
private int data;
int result = 0;
public void m(){
result += 2;
data += 2;
System.out.print(result + " " + data);
}
}
class ThreadExample extends Thread{
private Test mv;
public ThreadExample(Test mv) {
this.mv = mv;
}
@Override
public void run() {
synchronized (mv) {
mv.m();
}
}
}
A.0 22 44 6
B.2 42 42 4
C.2 24 46 6
D.4 44 46 6
解析:
Test mv =newTest()
声明并初始化对data赋默认值
使用synchronized
关键字加同步锁线程依次操作m()
t1.start();
使得result=2,data=2,输出即为2 2
t2.start();
使得result=4,data=4,输出即为4 4
t3.start();
使得result=6,data=6,输出即为6 6
System.out.print(result +" "+ data);
是print()方法不会换行,输出结果为2 24 46 6
答案:C
五、以下哪项不属于java类加载过程?
A.生成java.lang.Class对象
B.int类型对象成员变量赋予默认值
C.执行static块代码
D.类方法解析
解析:
类加载过程 :
- 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段。其中准备、验证、解析3个部分统称为连接(Linking)。
引用内容链接:
http://blog.csdn.net/u013256816/article/details/50829596
选项 :
生成java.lang.Class对象是在加载时进行的。生成Class对象作为方法区这个类的各种数据的访问入口。
既然是对象成员,那么肯定在实例化对象后才有。在类加载的时候会赋予初值的是类变量,而非对象成员。
类方法解析发生在解析过程。
答案:B
六、下面哪个语句是创建数组的正确语句?( )
A.
float f[][] = new float[6][6];
B.float []f[] = new float[6][6];
C.float f[][] = new float[][6];
D.float [][]f = new float[6][6];
E.float [][]f = new float[6][];
解析:
数组命名时名称与
[]
可以随意排列,但声明的二维数组中第一个中括号中必须要有值,它代表的是在该二维数组中有多少个一维数组。-
如果定义一个这样的二维数组
int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};
则其在内存中的表示可能下面这样的。
答案:A B D E
引用内容链接:
https://www.cnblogs.com/bewolf/p/4321642.html
七、下面哪些属于JSP内置对象及方法?
A.
request
B.out
C.application
D.config
解析:
JSP 有 9 个内置对象:
- request:封装客户端的请求,其中包含来自 GET 或 POST 请求的参数;
- response:封装服务器对客户端的响应;
- session:封装用户会话的对象;
- application:封装服务器运行环境的对象;
- out:输出服务器响应的输出流对象;
- config:Web 应用的配置对象;
- pageContext:通过该对象可以获取其他对象;
- page:JSP 页面本身(相当于 Java 程序中的 this);
- exception:封装页面抛出异常的对象
答案:A B C D
八、final、finally和finalize的区别中,下述说法正确的有?
A.final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
B.finally是异常处理语句结构的一部分,表示总是执行。
C.finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源的回收,例如关闭文件等。
D.引用变量被final修饰之后,不能再指向其他对象,它指向的对象的内容也是不可变的。
解析:
- B选项→
PS:finally 是无论是否有异常都会被处理的语句,除非在 finally 前存在被执行的System.exit(int i)时除外。 - C选项:JVM 不保证此方法总被调用
- D选项:使用final修饰一个变量时,是指引用变量不能变,引用变量所指向对象中的内容可以改变。
答案:A B
九、下列方法中哪个是线程执行的方法? ()
A.
run()
B.start()
C.sleep()
D.suspend()
解析:
- run()方法用来执行线程体中具体的内容;
start()方法用来启动线程对象,使其进入就绪状态
sleep()方法用来使线程进入睡眠状态
suspend()方法用来使线程挂起,需要通过resume()方法使其重新启动,不推荐使用。
注:线程的生命周期及五种基本状态:
关于Java中线程的生命周期,首先看一下下面这张较为经典的图:
- Java线程具有五种基本状态:
新建状态(New):当线程对象创建后,即进入了新建状态,如:
Thread t = new MyThread();
就绪状态(Runnable):当调用线程对象的
start()
方法(t.start();
),线程即进入就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执行,并不是说执行了t.start()
此线程立即就会执行;运行状态(Running):当CPU开始调度处于就绪状态的线程时,此时线程才得以真正执行,即进入到运行状态。注:就 绪状态是进入到运行状态的唯一入口,也就是说,线程要想进入运行状态执行,首先必须处于就绪状态中;
阻塞状态(Blocked):处于运行状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态,直到其进入到就绪状态,才 有机会再次被CPU调用以进入到运行状态。根据阻塞产生的原因不同,阻塞状态又可以分为三种:
1.等待阻塞:运行状态中的线程执行wait()
方法,使本线程进入到等待阻塞状态;
2.同步阻塞 -- 线程在获取synchronized
同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态;
3.其他阻塞 -- 通过调用线程的sleep()
或join()
或发出了I/O请求时,线程会进入到阻塞状态。当sleep()
状态超时、join()
等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。死亡状态(Dead):线程执行完了或者因异常退出了
run()
方法,该线程结束生命周期。
引用内容链接:
https://www.cnblogs.com/lwbqqyumidi/p/3804883.html
答案:A
十、以下哪些类是线程安全的()
A
Vector
B.HashMap
C.ArrayList
D.StringBuffer
E.Properties
解析:
java中的线程安全是什么:
- 就是线程同步的意思,就是当一个程序对一个线程安全的方法或者语句进行访问的时候,其他的不能再对他进行操作了,必须等到这次访问结束以后才能对这个线程安全的方法进行访问
线程安全一般会涉及到synchronized
。
- 查看源代码,可以发现Vector,StringBuffer,Properties许多操作都加了
synchronized
修饰。
答案:A D E