java 笔试题
一、选择题
1.0.6332 的数据类型是( )?
A:float
B:double
C:Float
D:Double
答案:
B:double
解析:java 八种基本类型从小到大以此是:
byte
那么浮点数直接量默认的类型是 double 类型,虽然 float 也是表示的浮点型,但是
要在后面加 F 才正确,例如 3.14F;
C 和 D 选项 表示基本类型的包装类
故选项为 B
boolean
short
char
int
long
float
double
2.java 接口的修饰符可以为( )?
A: private
B: protected
C:final
D:abstract
答案:
D:abstract
解析:接口很重要,为了说明情况,这里详细解释下:
(1)接口用于描述系统对外提供的所有服务,因此接口中的成员常量和方法都必
须是公开(public)类型的,确保外部使用者能访问它们;
(2)接口仅仅描述系统能做什么,但不指明如何去做,所以接口中的方法都是抽象
(abstract)方法;
(3)接口不涉及和任何具体实例相关的细节,因此接口没有构造方法,不能被实例
化,没有实例变量,只有静态(static)变量;
(4)接口的中的变量是所有实现类共有的,既然共有,肯定是不变的东西,因
为变化的东西也不能够算共有。所以变量是不可变(final)类型,也就是常量了。
所以:
接口的方法默认是 public abstract;
接口中不可以定义变量即只能定义常量(加上 final 修饰就会变成常量)。所以接口
的属性默认是 public
static final 常量,且必须赋初值。
注意:final 和 abstract 不能同时出现。
3.下面哪个流类属于面向字符的输入流()
A. BufferedWriter
B. FileInputStream
C. ObjectInputStream
D. InputStreamReader
答:D
解析:(1)字节输入流
基类:InputStream
FileInputStream 、 ByteArrayInputStream 、 PipedInputStream 、
BufferedInputStream、ObjectInputStream、FilterInputStream、PushbackInputStream、
DataInputStream
(2)字节输出流
基类:OutputStream
FileOutputStream 、 ByteArrayOutputStream 、 PipedOutputStream 、
BufferedOutputStream、ObjectOutputStream、FilterOutputStream、PrintStream、
DataOutputStream
(3)字符输入流
基类:Reader
FileReader、CharArrayReader、PipedReader、StringReader、BufferedReader、
InputStreamReader、FilterReader、PushbackReader
(4)字符输出流
基类:Writer
FileWriter、CharArrayWriter、PipedWriter、StringWriter、BufferedWriter、
OutputStreamWriter、FilterWriter、PrintWriter
4.下面哪些是 Thread 类的方法()
A start()
B run()
C exit()
D getPriority()
返回线程的优先级。
答:ABD
解析:
String getName() 返回该线程的名称。
void setName(String name) 改变线程名称,使之与参数 name 相同。
int getPriority()
void setPriority(int newPriority)
boolean isDaemon()
void setDaemon(boolean on) 将该线程标记为守护线程或用户线程。
static void sleep(long millis)
void interrupt() 中断线程。
static void yield() 暂停当前正在执行的线程对象,并执行其他线程。
void join() 等待该线程终止。
void run()
void start()
测试该线程是否为守护线程。
更改线程的优先级。
5、下面是 People 和 Child 类的定义和构造方法,每个构造方法都输出编号,在
执行 new Child(“mike”)的时候都有哪些构造方法被顺序调用?请选择输出结
果( )
Class People{
String name;
Public People() {
System.out.print(1);
}
Public People(String name){
System.out.print(2);
this.name=name;
}
}
Class Child
extends People{
People father;
Public Child(String name){
System.out.print(3);
this.name=name;
father=new People(name + “:F”);
}
Public Child(){
System.out.print(4);
}
B 32
D132
}
A 312
答:D
解析:Java 规定:构造子类之前必先构造父类。
C 432
若子类自己不调父类构造,则编译器默认在子类构造器的第一句通过
super()调父类无参构造
若子类自己调用了父类构造,则不再默认提供
new Child("mike") -> Child extends People(运行 people 的无参构造函数)
[输出 1]->Child(String name)(运行 Child 的有参构造函数) [输出 3] -> new
People(name + ":F")(运行 people 的有参构造函数) [输出 2]
6、以下关于异常的说法正确的是()
A 一旦出现异常,程序运行就终止了
当程序中抛一个出异常后,程序从程序中导致异常的代码处跳出,java 虚拟机
检测寻找和 try 关键字匹配的处理该异常的 catch 块,如果找到,将控制权交到
catch 块中的代码,然后继续往下执行程序,try 块中发生异常的代码不会被重
新执行。
B 如果一个方法申明将抛出某个异常,它就必须真的抛出那个异常
C 在 catch 子句中匹配异常是一种精确匹配
当可预料某个异常时,可以精确匹配,但是实际情景中发生的异常不可预料,所
以应养成最终捕获 Exception 的习惯。
D 可能抛出系统异常的方法是不需要申明异常的
答:D
7.在一个线程中 sleep(1000)方法,将使得该线程在多少时间后获得对 CPU 的控制
(假设睡眠过程中不会有其他时间唤醒该线程)?(C)
A.正好 1000 毫秒
B.1000 毫秒不到
C.=>1000 毫秒
D.不一定
解析:答案是 C =>1000ms 因为,在程序 sleep 之后线程进入就绪态,在这种状
态下,需要检查现在是否有资源允许现在的线程继续运行,如果条件不满足,则
需要等待。如果是现在有资源则立即执行。
8.下列是 jsp 作用域的通信对象的有(ABC)
A.Session
B.application
C.pageContext
D.cookie
解析:作用域隐式对象 - 内置 map 实现、setAttribute 、getAttribute 、
1、pageScope 页面作用域 pageContext –存储的内容只能在当前页范围内有效
2、requestScope 请求作用域 request –只能在同一个请求内有效、注意一个网
页点击刷新是一个新请求
3、sessionScope 会话作用域(用来储存有关用户会话的所有信息) session –
和浏览器相关的作用域、一个浏览器对应一个 session .浏览器不关闭就是一个
session、即便开启多个标签页、也是一个 session。网页不做任何操作会超时。
在 web.xml 中配置如下:
30
4、applicationScope 应用作用域 application –与应用相关、相当于全局静态值。
只要应用不重启、就一直可用。
示例:
session.setAttribute("username","张三");
String name = session.getAttribute("username");
衍生:九大内置对象:
1. 输出输入对象:request 对象、response 对象、out 对象
2. 通信控制对象:pageContext 对象、session 对象、application 对象
3. Servlet 对象:page 对象、config 对象
4. 错误处理对象:exception 对象
9. 对该段代码描述正确的有
<% int i = Interger.parseInt(request.getParemeter(“value”))%>
A.不会有错
B.当 value 与 int 类型不匹配时会报错
C.当 value = “ ” 时会报错
D.为了安全起见应该将该段代码放在 try{} 和 catch{}之间
(
)
解析:
此题主要考察两个点,
1.request.getParemeter(“value”)能获取什么值 string,null(当 value
写错或不写)
2.Interger.parseInt()能转换什么类型的数据 整数
10.选出所有正确的答案
Which two are equivalent?
A.<%=YoshiBean.size %>
B.<%=YoushiBean.getSize() %>
C.<%=YoushiBean.getProperty(“size”) %>
D.
解析:
Which two are equivalent? (Choose two)
A. <%= YoshiBean.size%>
B. <%= YoshiBean.getSize()%>
C. <%= YoshiBean.getProperty("size")%>
D.
E.
F.
G.
此题考查的是 JavaBean 在 jsp 中的取值方式.
其中 C 和 G 效果是一样的.
二、简答题
1.JSP 和 Servlet 有哪些相同点和不同点?他们之间的联系是什么?
什么是 servlet:
(1) Servlet 是一种服务器端的 Java 应用程序,具有独立于平台和协议的特性,
可以生成动态的 Web 页面。
(2) 它担当客户请求(Web 浏览器或其他 HTTP 客户程序)与服务器响应(HTTP
服务器上的数据库或应用程序)的中间层。
什么是 jsp:
JSP 全名为 Java Server Pages,中文名叫 java 服务器页面,其根本是一个简化的
Servlet 设计,它[1] 是由 Sun Microsystems 公司倡导、许多公司参与一起建立的
一种动态网页技术标准。
servlet 和 jsp 的联系:
jsp 是对 servlet 的一种高级封装。本质还是 servlet。
在第一次加载 jsp 页面的时候,会生成一个 java 文件,在虚拟机编译为.class 文
件,最后加载并初始化为一个 servlet。
servlet 和 jsp 的共同点和不同点:
(1)servlet 在 java 代码中通过 httpservletresponse 来动态的生成一个 html 页面
(2)jsp 是通过吧 java 代码嵌入到 html 中去生成一个动态的 html 页面
(一个是在 java 中写 html,另一个是在 html 中写 java 代码)
JSP 在本质上就是 servlet,但是两者的创建方式不一样.
Servlet 完全是 java 程序代码构成,擅长于流程控制和事务处理,通过 Servlet 来
生成动态网页很不直观.
jsp 由 HTML 代码和 jsp 标签构成,可以方便地编写动态网页.
因此在实际应用中采用 Servlet 来控制业务流程,而采用 jsp 来生成动态网页.
在 struts 框架中,jsp 位于 MVC 设计模式的视图层,而 Servlet 位于控制层.
jsp 和 servlet 出现的意义:
(1)当我们使用 servlet 来生成动态页面的时候,会非常的复杂。因为需要在
out.println()来写入 html 语句。但是 servlet 在处理前端和后台数据交互的时候有
特别的优秀。
(2)因此在这个时候我们引入 jsp 技术来替代 servlet 生成 html 的功能。让 serlvet
只专注前端页面和后台数据的交互。从而也是实现来 mvc 的思想。
2. swtich 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上?
答:(1)switch 语句由一个控制表达式和多个 case 标签组成。
(2)switch 控制表达式支持的类型有 byte、short、char、int、enum(Java 5)、
String(Java 7)。
(3)switch-case 语句完全可以与 if-else 语句互转,但通常来说,switch-case 语
句执行效率要高。
default 在当前 switch 找不到匹配的 case 时执行。default 并不是必须的。
(4)一旦 case 匹配,就会顺序执行后面的程序代码,而不管后面的 case 是否匹
配,直到遇见 break。
3、如何用 CSS 约束一个层不可见
答:display: none;
4.多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?
答:多线程有两种实现方法,一是继承 Thread 类,重写方法 run(),二是实现
Runnable 接口,实现方法 run();
同步有两种实现方法,分别是 synchronized、wait 与 notify。
三、编程题
1.给你一组字符如{1,3,4,7,2,1,1,5,2,6}
让你输出里面出现次数最多且数值做大的一个,出现几次?
int[] num = {1,3,4,7,2,1,1,5,2,6 };//声明一个数组
//声明一个 map
Map map = new HashMap();
for (int i = 0; i < num.length; i++) {//遍历数组
if (map.containsKey(num[i])) {//判断集合中是否有该元素
// 如果已经有 key--num[1],那么这个 put,就会把
value 值+1 覆盖原来的 value 值
map.put(num[i], (Integer) map.get(num[i]) + 1);
} else {
map.put(num[i], 1);//否则添加进去
}
}
//声明 2 个变量
Integer max = Integer.MIN_VALUE;
Integer max2 = Integer.MIN_VALUE;
//遍历每一组键值对
for (Entry entry : map.entrySet()) {
Integer key = entry.getKey();//获取 key
Integer value = entry.getValue();//获取 value
if (value >= max) {
max = value;//把 value 赋值给 max
if (key >= max2) {
max2 = key;//把 key 赋值给 max2
}
}
}
for (Entry entry : map.entrySet()) {
Integer key = entry.getKey();
Integer value = entry.getValue();
if (key == max2) {
System.out.println("频率最大数" + key + " 频率:" + value );
}
}
2.写一个算法对 1,8,5,2,4,9,7 进行顺序排序
public static void main(String[] args) {
int []arr={1,8,5,2,4,9,7};
for(int i=0;i
arr[j+1]){
int t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}
}
}
for(int i=0;i