Java概念性问题7

来源:互联网 发布:vb数据库源代码 编辑:程序博客网 时间:2024/06/05 23:55
下列程序的运行结果A
public void getCustomerInfo() {        try {            // do something that may cause an Exception        } catch (java.io.FileNotFoundException ex) {            System.out.print("FileNotFoundException!");        } catch (java.io.IOException ex) {            System.out.print("IOException!");        } catch (java.lang.Exception ex) {            System.out.print("Exception!");        }    }

A IOException!
B IOException!Exception!
C FileNotFoundException!IOException!
D FileNotFoundException!IOException!Exception!

try-catch-finally 规则(异常处理语句的语法规则)
1) 必须在 try 之后添加 catch 或 finally块。try 块后可同时接 catch 和 finally 块,但至少有一个块。
2) 必须遵循块顺序:若代码同时使用 catch 和 finally块,则必须将 catch 块放在 try 块之后。
3) catch 块与相应的异常类的类型相关。

4) 一个 try 块可能有多个 catch块。若如此,则执行第一个匹配块。即Java虚拟机会把实际抛出的异常对象依次和各个catch代码块声明的异常类型匹配,如果异常对象为某个异常类型或其子类的实例,就执行这个catch代码块,不会再执行其他的 catch代码块

5) 可嵌套 try-catch-finally 结构。
6) 在 try-catch-finally 结构中,可重新抛出异常。
7) 除了下列情况,总将执行 finally 做为结束:JVM 过早终止(调用 System.exit(int));在finally 块中抛出一个未处理的异常;计算机断电、失火、或遭遇病毒攻击
由此可以看出,catch只会匹配一个,因为只要匹配了一个,虚拟机就会使整个语句退出

下面哪一项不是加载驱动程序的方法?A

A 通过DriverManager.getConnection方法加载
B 调用方法 Class.forName
C 通过添加系统的jdbc.drivers属性
D 通过registerDriver方法注册

加载驱动方法
1.Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”);
2.DriverManager.registerDriver(new com.mysql.jdbc.Driver());
3.System.setProperty(“jdbc.drivers”, “com.mysql.jdbc.Driver”);
4.DriverManager.getConnection方法返回一个Connection对象,这是加载驱动之后才能进行的

JDBC流程:
1 加载驱动 DriverManager. registerDriver(Driver driver)
2 获取连接 Connection conn =
3 DriverManager.getConnection(url,user,pass);
4 通过连接创建statement Statement st =conn.createStatement();
5 解析sql获取结果集 ResultSet rs = st.excuteQuery(sql);
6 遍历结果集,获得数据 rs.getobject(xx)
7 释放资源,关闭连接

有这么一段程序:C
public class Test{     public String name="abc";     public static void main(String[] args){         Test test=new Test();         Test testB=new Test();         System.out.println(test.equals(testB)+","+test.name.equals(testB.name));     } }

A true,true
B true,false
C false,true
D false,false

public boolean equals(Object obj) {        return (this == obj);    }

Object 中euqals的源码如上。没有重写equals时,是直接用==判断的,而String中重写了equals方法。

以下是java concurrent包下的4个类,选出差别最大的一个C

A Semaphore
B ReentrantLock
C Future
D CountDownLatch

1、答案选C。
a、它是个接口。
b、别的类都处理线程间的关系,处理并发机制,但该类只用于获取线程结果。
2、Future表示获取一个正在指定的线程的结果。对该线程有取消和判断是否执行完毕等操作。
3、CountDownLatch 是个锁存器,他表示我要占用给定的多少个线程且我优先执行,我执行完之前其他要使用该资源的都要等待。
4、Semaphore,就像是一个许可证发放者,也想一个数据库连接池。证就这么多,如果池中的证没换回来,其他人就不能用。
5、ReentrantLock 和synchronized一样,用于锁定线程。

使用mvc模式设计的web应用程序具有以下优点,除了?D

A 可维护行强
B 可扩展性强
C 代码重复少
D 大大减少代码量

  MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
  MVC只是将分管不同功能的逻辑代码进行了隔离,增强了可维护和可扩展性,增强代码复用性,因此可以减少代码重复。但是不保证减少代码量,多层次的调用模式还有可能增加代码量
这里写图片描述

ArrayList list = new ArrayList(20);中的list扩充几次A

A 0
B 1
C 2
D 3
ArrayList的构造函数总共有三个:
(1)ArrayList()构造一个初始容量为 10 的空列表。
(2)ArrayList(Collection<-? extends E> c)构造一个包含指定 collection 的元素的列表,这些元素是按照该 collection 的迭代器返回它们的顺序排列的。
(3)ArrayList(int initialCapacity)构造一个具有指定初始容量的空列表。调用的是第三个构造函数,直接初始化为大小为20的list,没有扩容

下面有关servlet service描述错误的是?B

A 不管是post还是get方法提交过来的连接,都会在service中处理
B doGet/doPost 则是在 javax.servlet.GenericServlet 中实现的
C service()是在javax.servlet.Servlet接口中定义的
D service判断请求类型,决定是调用doGet还是doPost方法
doGet/doPost 则是在 javax.servlet.http.HttpServlet 中实现的
service()是在javax.servlet.Servlet接口中定义的, 在 javax.servlet.GenericServlet 中实现了这个接口。 而 doGet/doPost 则是在 javax.servlet.http.HttpServlet 中实现的,javax.servlet.http.HttpServlet 是 javax.servlet.GenericServlet 的子类。
所以可以这样理解, 其实所有的请求均首先由 service() 进行处理, 而在 javax.servlet.http.HttpServlet 的 service() 方法中, 主要做的事情就是判断请求类型是 Get还是 Post, 然后调用对应的 doGet/doPost 执行。
这里写图片描述

下面有关servlet的层级结构和常用的类,说法正确的有?ABCD

A GenericServlet类:抽象类,定义一个通用的、独立于底层协议的Servlet。
B 大多数Servlet通过从GenericServlet或HttpServlet类进行扩展来实现
C ServletConfig接口定义了在Servlet初始化的过程中由Servlet容器传递给Servlet得配置信息对象
D HttpServletRequest接口扩展ServletRequest接口,为HTTP Servlet提供HTTP请求信息

Java中有关servlet的层级结构和常用的类的描述:
1.GenericServlet类:抽象类,定义一个通用的、独立于底层协议的Servlet。
2.大多数Servlet通过从GenericServlet或HttpServlet类进行扩展来实现
3.ServletConfig接口定义了在Servlet初始化的过程中由Servlet容器传递给Servlet得配置信息对象
4.HttpServletRequest接口扩展ServletRequest接口,为HTTP Servlet提供HTTP请求信息
HttpServlet是GenericServlet的子类。
GenericServlet是个抽象类,必须给出子类才能实例化。它给出了设计servlet的一些骨架,定义了servlet生命周期,还有一些得到名字、配置、初始化参数的方法,其设计的是和应用层协议无关的,也就是说 你有可能用非http协议实现它。
HttpServlet是子类,当然就具有GenericServlet的一切特性,还添加了doGet,doPost, doDelete, doPut, doTrace等方法对应处理http协议里的命令的请求响应过程。
一般没有特殊需要,自己写的Servlet都扩展HttpServlet 。

Servlet的生命周期可以分为初始化阶段,运行阶段和销毁阶段三个阶段,以下过程属于初始化阶段是(ACD)。

A 加载Servlet类及.class对应的数据
B 创建serletRequest和servletResponse对象
C 创建ServletConfig对象
D 创建Servlet对象

初始化阶段肯定需要加载Servlet类及.class对应的数据,创建Servlet对象,其次也需要调用init(ServletConfig config)方法,所以也需要创建ServletConfig对象。
Servlet生命周期:
一、初始化阶段; 调用init()方法
二、响应客户请求阶段;调用service()方法
三、终止阶段;调用destroy()方法
  init():在Servlet的生命周期中,仅执行一次init()方法。它是在服务器装入Servlet时执行的,负责初始化Servlet对象。可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet。无论有多少客户机访问Servlet,都不会重复执行init()。
  service():它是Servlet的核心,负责响应客户的请求。每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用,而且传递给这个方法一个“请求”(ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已存在Service()方法。默认的服务功能是调用与HTTP请求的方法相应的do功能。
  destroy(): 仅执行一次,在服务器端停止且卸载Servlet时执行该方法。当Servlet对象退出生命周期时,负责释放占用的资源。一个Servlet在运行service()方法时可能会产生其他的线程,因此需要确认在调用destroy()方法时,这些线程已经终止或完成。

在D:\Test目录下有一个文本文件javatest.txt,文件内容是:

Hello,I am a boy!
I like java programming!
I want to pass the NCR examination!
下列程序使用文件输入流将该文件的内容打印到计算机屏幕上,请根据程序功能完成空白处代码。

package Test;1public class Test46{static class file= 2public static void main(String[]args){try{FileInputStream fis=new FileInputStream(file);int eof=0while((eof=fis.read( ))!=-1)System.out.print((char)eof);3 ;}catch(IOException ioe){System.out.println(”文件错误!”);System.exit(1);}}}

1 import java.io.*
2 D:\Test\javatest.txt--> “D:/Test/javatest.txt”
3  fis.close()

下列哪一项的实现不可以添加为 TextField 对象的监听器(C)

A MouseMotionListener
B FocusListener
C WindowsListener
D ActionListener
在单行文本输入区(Textfield)构件上可能发生的事件包括FocusEvent焦点事件,所对应的事件监听器是FocusListener;ActionEvent动作事件,所对应的事件监听器是ActionListener;MouseEvent鼠标事件,所对应的事件监听器是MouseMotionListener;

java如何接受request域中的参数?C

A request.getRequestURL()
B request. getAttribute()
C request.getParameter()
D request.getWriter()
  request.getAttribute 其实是取的web容器里面的值,而不是页面通过get或者post方式传上来的参数值。 一个request就是一个对象,setAttribute,其实就是在request scope里面添加了一个变量。我们打个比方,request里有一个map,setAttribute就是map.put。
  request.getParameter(“username”) 只是处理参数,但是在有username这个参数的情况下,你可以认为是等价。 但是paramter是个string返回值。
  request.setAttribute()和getAttribute()方法传递的数据只会存在于Web容器内部,在具有转发关系的web组件之间共享。 这两个方法能够设置Object类型的共享数据。
 
request.getRequestURL():返回客户端发出请求时的完整URL(不包含参数);
basePath:http://localhost:8080/test/ ;
getRequestURL:http://localhost:8080/test/test.jsp ;
getRequestURI:/test/test.jsp ;

request.getAttribute(String name):获取request对象的name属性的属性值,例如:request.getAttribute(“data”) ;

request.getParameter():获得客户机请求参数(客户端提交的数据);
request.getWriter():获得一个输出流;

以下哪项陈述是正确的?E

A 垃圾回收线程的优先级很高,以保证不再 使用的内存将被及时回收
B 垃圾收集允许程序开发者明确指定释放 哪一个对象
C 垃圾回收机制保证了JAVA程序不会出现 内存溢出
D 进入”Dead”状态的线程将被垃圾回收器回收
E 以上都不对
A: 垃圾回收在jvm中优先级相当相当低。
B:垃圾收集器(GC)程序开发者只能推荐JVM进行回收,但何时回收,回收哪些,程序员不能控制。
C:垃圾回收机制只是回收不再使用的JVM内存,如果程序有严重BUG,照样内存溢出。
D:进入DEAD的线程,它还可以恢复,GC不会回收

问这个程序的输出结果D
package Wangyi;class Base{    public void method()    {        System.out.println("Base");    } }class Son extends Base{    public void method()    {        System.out.println("Son");    }    public void methodB()    {        System.out.println("SonB");    }}public class Test01{    public static void main(String[] args)    {        Base base = new Son();        base.method();        base.methodB();    }}

A Base SonB
B Son SonB
C Base Son SonB
D 编译不通过
编译看左边,运行看右边
Base base=new Son(); 是多态的表示形式。父类对象调用了子类创建了Son对象。
base调用的method()方法就是调用了子类重写的method()方法。
而此时base还是属于Base对象,base调用methodB()时Base对象里没有这个方法,所以编译不通过。
要想调用的话需要先通过SON son=(SON)base;强制转换,然后用son.methodB()调用就可以了。

关于struts项目中的类与MVC模式的对应关系,说法错误的是D

A Jsp文件实现视图View的功能
B ActionServlet这一个类是整个struts项目的控制器
C ActionForm、Action都属于Model部分
D一个struts项目只能有一个Servlet
https://www.ibm.com/developerworks/cn/java/l-struts-mvc/

下面有关servlet和cgi的描述,说法错误的是?D

A servlet处于服务器进程中,它通过多线程方式运行其service方法
B CGI对每个请求都产生新的进程,服务完成后就销毁
C servlet在易用性上强于cgi,它提供了大量的实用工具例程,例如自动地解析和解码 HTML表单数据、读取和设置HTTP头、处理Cookie、跟踪会话状态等
D cgi在移植性上高于servlet,几乎所有的主流服务器都直接或通过插件支持cgi
  选择D,servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。
  Servlet与CGI的比较
  和CGI程序一样,Servlet可以响应用户的指令(提交一个FORM等等),也可以象CGI程序一样,收集用户表单的信息并给予动态反馈(简单的注册信息录入和检查错误)。然而,Servlet的机制并不仅仅是这样简单的与用户表单进行交互。传统技术中,动态的网页建立和显示都是通过CGI来实现的,但是,有了Servlet,您可以大胆的放弃所有CGI(perl?php?甚至asp!),利用Servlet代替CGI,进行程序编写。
  对比一:当用户浏览器发出一个Http/CGI的请求,或者说调用一个CGI程序的时候,服务器端就要新启用一个进程(而且是每次都要调用),调用CGI程序越多(特别是访问量高的时候),就要消耗系统越多的处理时间,只剩下越来越少的系统资源,对于用户来说,只能是漫长的等待服务器端的返回页面了,这对于电子商务激烈发展的今天来说,不能不说是一种技术上的遗憾。而Servlet充分发挥了服务器端的资源并高效的利用。每次调用Servlet时并不是新启用一个进程,而是在一个Web服务器的进程共享和分离线程,而线程最大的好处在于可以共享一个数据源,使系统资源被有效利用。
对比二:传统的CGI程序,不具备平台无关性特征,系统环境发生变化,CGI程序就要瘫痪,而Servlet具备Java的平台无关性,在系统开发过程中保持了系统的可扩展性、高效性。
对比三:传统技术中,一般大都为二层的系统架构,即Web服务器+数据库服务器,导致网站访问量大的时候,无法克服CGI程序与数据库建立连接时速度慢的瓶颈,从而死机、数据库死锁现象频繁发生。而我们的Servlet有连接池的概念,它可以利用多线程的优点,在系统缓存中事先建立好若干与数据库的连接,到时候若想和数据库打交道可以随时跟系统”要”一个连接即可,反应速度可想而知。

0 0