一、选项中哪一行代码能够替换题目中//add code here而不产生编译错误?()java
public abstract class MyClass { public int constInt = 5; //add code here public void method() { } }
Apublic abstract void method(int a);web
B constInt = constInt + 5;数据库
C public int method();设计模式
D public abstract void anotherMethod() {}服务器
答案:Asession
解析:考察抽象类的使用。并发
抽象类遵循的原则:app
(1)接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是能够有私有方法或私有变量的。函数
(2)abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。可是,一个类却能够实现多个interface,实现多重继承。接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的做用。ui
(3)在abstract class 中能够有本身的数据成员,也能够有非abstarct的成员方法,而在interface中,只可以有静态的不能被修改的数据成员(也就是必须是 static final的,不过在 interface中通常不定义数据成员),全部的成员方法默认都是 public abstract 类型的。
(4)abstract class和interface所反映出的设计理念不一样。其实abstract class表示的是"is-a"关系,interface表示的是"has-a"关系。
(5)实现接口的必定要实现接口里定义的全部方法,而实现抽象类能够有选择地重写须要用到的方法,通常的应用里,最顶级的是接口,而后是抽象类实现接口,最后才到具体类实现。抽象类中能够有非抽象方法。接口中则不能有实现方法。
(6)接口中定义的变量默认是public static final 型,且必须给其初值,因此实现类中不能从新定义,也不能改变其值。抽象类中的变量默认是 friendly 型,其值能够在子类中从新定义,也能够在子类中从新赋值。
二、下面程序的运行结果是什么()
1 class HelloA { 2 3 public HelloA() { 4 System.out.println("HelloA"); 5 } 6 7 { System.out.println("I'm A class"); } 8 9 static { System.out.println("static A"); } 10 11 } 12 13 public class HelloB extends HelloA { 14 public HelloB() { 15 System.out.println("HelloB"); 16 } 17 18 { System.out.println("I'm B class"); } 19 20 static { System.out.println("static B"); } 21 22 public static void main(String[] args) { 23 new HelloB(); 24 } 25 26 }
答案
static A static B I'm A class HelloA I'm B class HelloB
解析:
说实话我以为这题很好,考查静态语句块、构造语句块(就是只有大括号的那块)以及构造函数的执行顺序。
对象的初始化顺序:(1)类加载以后,按从上到下(从父类到子类)执行被static修饰的语句;
(2)当static语句执行完以后,再执行main方法;
(3)若是有语句new了自身的对象,将从上到下执行构造代码块、构造器(二者能够说绑定在一块儿)。
三、[问答题]谈一下拦截器和过滤器的区别。
拦截器和过滤器均可以用来实现横切关注功能,其区别主要在于:
①拦截器是基于Java反射机制的,而过滤器是基于接口回调的。
②过滤器依赖于Servlet容器,而拦截器不依赖于Servlet容器。
③拦截器只能对Action请求起做用,而过滤器能够对全部请求起做用。
④拦截器能够访问Action上下文、值栈里的对象,而过滤器不能。
四、[问答题]Struts2中如何实现I18N?
七、JSP有哪些内置对象?做用分别是什么?
答:JSP有9个内置对象:
- request:封装客户端的请求,其中包含来自GET或POST请求的参数;
- response:封装服务器对客户端的响应;
- pageContext:经过该对象能够获取其余对象;
- session:封装用户会话的对象;
- application:封装服务器运行环境的对象;
- out:输出服务器响应的输出流对象;
- config:Web应用的配置对象;
- page:JSP页面自己(至关于Java程序中的this);
- exception:封装页面抛出异常的对象。
补充:若是用Servlet来生成网页中的动态内容无疑是很是繁琐的工做,另外一方面,全部的文本和HTML标签都是硬编码,即便作出微小的修改,都须要进行从新编译。JSP解决了Servlet的这些问题,它是Servlet很好的补充,能够专门用做为用户呈现视图(View),而Servlet做为控制器(Controller)专门负责处理用户请求并转发或重定向到某个页面。基于Java的Web开发不少都同时使用了Servlet和JSP。JSP页面实际上是一个Servlet,可以运行Servlet的服务器(Servlet容器)一般也是JSP容器,能够提供JSP页面的运行环境,Tomcat就是一个Servlet/JSP容器。第一次请求一个JSP页面时,Servlet/JSP容器首先将JSP页面转换成一个JSP页面的实现类,这是一个实现了JspPage接口或其子接口HttpJspPage的Java类。JspPage接口是Servlet的子接口,所以每一个JSP页面都是一个Servlet。转换成功后,容器会编译Servlet类,以后容器加载和实例化Java字节码,并执行它一般对Servlet所作的生命周期操做。对同一个JSP页面的后续请求,容器会查看这个JSP页面是否被修改过,若是修改过就会从新转换并从新编译并执行。若是没有则执行内存中已经存在的Servlet实例。咱们能够看一段JSP代码对应的Java程序就知道一切了,并且9个内置对象的神秘面纱也会被揭开。
public class NULL { public static void haha(){ System.out.println("haha"); } public static void main(String[] args) { ((NULL)null).haha(); } }
答案:能正常运行
解析:输出为haha,由于null值能够强制转换为任何java类类型,(String)null也是合法的。但null强制转换后是无效对象,其返回值仍是为null,而static方法的调用是和类名绑定的,不借助对象进行访问因此能正确输出。反过来,没有static修饰就只能用对象进行访问,使用null调用对象确定会报空指针错了。