Java刷题知识总结(一)
1.局部变量参与运算前是必须要初始化的,比如下面的代码就会编译出错,提示y必须要初始化。
public static void main(String[] args) {int x = 1;int y;int z = x + y;
}
2.ArrayList和Vector主要区别是什么?
A
Vector与ArrayList一样,也是通过数组实现的,不同的是Vector支持线程的同步
B
Vector与ArrayList一样,也是通过数组实现的,不同的是ArrayList支持线程的同步
C
Vector是通过链表结构存储数据,ArrayList是通过数组存储数据
D
上述说法都不正确
参考答案:答案:A Vector支持线程的同步,也就是内部加锁的 但是效率低,因此在新版jdk中加入线程不安全的Arraylist
3. 运行下面代码,输出的结果是()
class A {public A() {System.out.println("class A");}{ System.out.println("I'm A class"); } static { System.out.println("class A static"); }
}
public class B extends A {public B() {System.out.println("class B");}{ System.out.println("I'm B class"); }static { System.out.println("class B static"); }public static void main(String[] args) { new B();
答案
class A static
class B static
I'm A class
class A
I'm B class
class B
关于Java程序初始化顺序:
- 父类的静态代码块
- 子类的静态代码块
- 父类的普通代码块
- 父类的构造方法
- 子类的普通代码块
- 子类的构造方法
按照这个顺序,答案选择A
4.下面哪一项不是加载驱动程序的方法?
A
通过DriverManager.getConnection方法加载
B
调用方法 Class.forName
C
通过添加系统的jdbc.drivers属性
D
通过registerDriver方法注册
正确答案:A
你的答案:B
参考答案:答案:A DriverManager.getConnection方法返回一个Connection对象,这是加载驱动之后才能进行的
5.下面有关servlet和cgi的描述,说法错误的是?
A
servlet处于服务器进程中,它通过多线程方式运行其service方法
B
CGI对每个请求都产生新的进程,服务完成后就销毁
C
servlet在易用性上强于cgi,它提供了大量的实用工具例程,例如自动地解析和解码HTML表单数据、读取和设置HTTP头、处理Cookie、跟踪会话状态等
D
cgi在移植性上高于servlet,几乎所有的主流服务器都直接或通过插件支持cgi
正确答案:D
你的答案:C
参考答案:选择D,servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。
6.下面哪些类实现或继承了 Collection 接口?
A
HashMap
B
ArrayList
C
Vector
D
Iterator
正确答案:BC
你的答案:ABC
7.jdk1.8版本之前的前提下,接口和抽象类描述正确的有( )
A
抽象类没有构造函数
B
接口没有构造函数
C
抽象类不允许多继承
D
接口中的方法可以有方法体
正确答案:BC
你的答案:ABC
8.以下 _____ 不是 Object 类的方法
A
clone()
B
finalize()
C
toString()
D
hasNext()
正确答案:D
你的答案:C
9.要使某个类能被同一个包中的其他类访问,但不能被这个包以外的类访问,可以( )
A
让该类不使用任何关键字
B
使用private关键字
C
使用protected关键字
D
使用void关键字
正确答案:A
你的答案:B
10.有关线程的叙述正确的是()
A
可以获得对任何对象的互斥锁定
B
通过继承Thread类或实现Runnable接口,可以获得对类中方法的互斥锁定
C
线程通过使用synchronized关键字可获得对象的互斥锁定
D
线程调度算法是平台独立的
正确答案:CD
你的答案:BC
11.
|
int
a = 10;
System.out.println(a++ + a--);
}
最后输出什么?
A
19
B
20
C
21
D
22
正确答案:C
你的答案:B
12.下面哪个不属于HttpServletResponse接口完成的功能?
A
设置HTTP头标
B
设置cookie
C
读取路径信息
D
输出返回数据
正确答案:C
你的答案:D
C(错误):读取路径信息,request读取路径信息
从request获取各种路径总结
request.getRealPath("url"); // 虚拟目录映射为实际目录
request.getRealPath("./"); // 网页所在的目录
request.getRealPath("../"); // 网页所在目录的上一层目录
request.getContextPath(); // 应用的web目录的名称
D:输出返回数据
HttpServleteResponse.getOutputStream().write();
13.Java 多线程有几种实现方法?( )
A
继承Thread类
B
实现Runnable接口
C
实现Thread接口
D
以上都不正确
正确答案:AB
14下面程序输出结果为():
public class Demo{public static void main (String [] args) {String lx = “LeXin”;String nb = lx;lx = "Fenqile";System.out.println(nb);}
}
A
程序异常,编译不通过
B
程序编写正常,可正常运行
C
程序输出值为“LeXin”
D
程序输出值为“Fenqile”
正确答案:BC
你的答案:BD
知识点:String 类型不可变指的是String类型的值不可变,但是String类型的引用是可变的。
15.CMS垃圾回收器在那些阶段是没用用户线程参与的
A
初始标记
B
并发标记
C
重新标记
D
并发清理
正确答案:AC
你的答案:D
官方解析:
CMS收集器是一种以获取最短回收停顿时间为目标的收集器,它是基于标记清除算法实现的,它的运作过程相对于其他收集器来说要更复杂一些,整个过程分为四个步骤,包括:初始标记、并发标记、重新标记、并发清除。其中初始标记、重新标记这两个步骤需要暂停整个JVM。
- 初始标记仅仅只是标记一下GC Roots能直接关联到的对象,速度很快。
- 并发标记阶段就是从GC Roots的直接关联对象开始遍历整个对象图的过程,这个过程耗时较长但是不需要停顿用户线程,可以与垃圾收集线程一起并发运行。
- 重新标记阶段则是为了修正并发标记期间,因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间通常会比初始标记阶段稍长一些,但也远比并发标记阶段的时间短。
- 并发清除阶段,清理删除掉标记阶段判断的已经死亡的对象,由于不需要移动存活对象,所以这个阶段也是可以与用户线程同时并发的。
示意图如下:
综上所述,答案选择A C。
16.如果一个接口Cow有个public方法drink(),有个类Calf实现接口Cow,则在类Calf中正确的是? ( )
A
void drink() { …}
B
protected void drink() { …}
C
public void drink() { …}
D
以上语句都可以用在类Calf中
正确答案:C
官方解析: Java接口中的方法默认被public abstract修饰,而重写的其中一个要求就是重写方法的访问级别不小于原方法。因此,答案中只有C选项符合。
17.通过HttpServletRequest. getParameter获取的参数.
A
总是采用UTF-8编码
B
总是采用lS08859-1编码
C
由客户端浏览器和Web容器配置共同决定编码
D
由服务器所在的操作系统决定编码
正确答案:C
参考答案:答案:C 编码格式由浏览器决定,浏览器根据html中指定的编码格式进行编码,tomcat根据指定的格式进行解码,另外get请求和post请求对编码格式的处理也是不同的
18.java如何返回request范围内存在的对象?
A
request.getRequestURL()
B
request.getAttribute()
C
request.getParameter()
D
request.getWriter()
正确答案:B
request.getParameter()方法传递的数据,会从Web客户端传到Web服务器端,代表HTTP请求数据;request.setAttribute()和getAttribute()方法传递的数据只会存在于Web容器内部,在具有转发关系的Web组件之间共享。
request域代表一次请求处理的过程,就是从客户端到服务端的一次请求的过程。request.getParameter()获取HTTP提交过来的数据。
而request.getAttribute()方法返回reques,sessiont范围内存在的对象。