Java面试题
在现实的学习、工作中,我们总免不了要接触或使用试题,试题是学校或各主办方考核某种知识才能的标准。那么你知道什么样的试题才能有效帮助到我们吗?下面是小编收集整理的Java面试题,欢迎阅读,希望大家能够喜欢。
Java面试题 1
1、Collection 和 Collections的区别?
Collection是集合的根接口,其下有set及list
Collections是集合的算法。
2、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?用contains来区分是否有重复的对象。还是都不用?
在比较时先调用hashCode方法,如果不相同,证明不相等。
如果相同,再调用equals方法,如果equals方法相同,证明相等,不相同,证明不相等。
==:主要用在基本数据类型及引用
equals:主要是对象或对象引用的比较。
集合中是否包含某一个元素用contains来判断。
3、List,Set,Map是否继承自Collection接口?
List,set继承于Collection
Map没有继承于Collection,其相对是独立的。
属于Collection类型的对象,可以通过构造函数将一个集合构造成另外一个集合。
4、面向对象的特征有哪些方面?
1.抽象:
找共性,将共有的属性、方法放到父类中
2.继承:
子类继承于父类,具有父类的所有属性与方法,可以重用,也可以覆盖。
3.封装:
一个类包括多个属性及方法。
4. 多态性:
5、String是最基本的数据类型吗?
基本数据类型包括byte、int、char、long、float、double、boolean和short。
java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类
6、int 和 Integer 有什么区别?
int 是基本数据类型,不是对象,占一个内存空间,没有方法。与其同类的`有long,char,doble
Integer是封装类,具有方法及属性。与其同类的有Long,Double.Float
7、运行时异常与一般异常有何异同?
运行时异常:JVM抛出的异常,代码中不用处理。
一般异常:用户抛出的异常,如果用throws 声明了,调用这个方法的代码必须对其处理。
8、&和&&的区别?
&:与: 左边若为false右边还执行。
&&:短路与,左边若为false右边不执行。
9、final,finally,finalize的区别?
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
10、heap和stack有什么区别?
栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。堆是栈的一个组成元素
11、Static Nested Class 和 Inner Class的不同?
Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。
12、GC是什么? 为什么要有GC?
GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。
13、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)
short s1 = 1; s1 += 1;(可以正确编译)
14、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)==12
Math.round(-11.5)==-11
round方法返回与参数最接近的长整数,参数加1/2后求其floor.
15、Java有没有goto?
java中的保留字,现在没有在java中使用。
16、给出一个你最常见到的runtime exception ArithmeticException,ArrayStoreException,BufferOverflowException,BufferUnderflowException,CannotRedoException,CannotUndoException,ClassCastException,CMMException,ConcurrentModificationException,DOMException,EmptyStackException,IllegalArgumentException,IllegalMonitorStateException,IllegalPathStateException,IllegalStateException,ImagingOpException,IndexOutOfBoundsException,MissingResourceException,NegativeArraySizeException,NoSuchElementException,NullPointerException,ProfileDataException,ProviderException,RasterFormatException,SecurityException,SystemException,UndeclaredThrowableException,UnmodifiableSetException,UnsupportedOperationException
一般异常:
IOException
FileNotFoundException
SqlException
17、数组有没有length()这个方法? String有没有length()这个方法?
数组没有length()这个方法,有length这个属性
String有length()这个方法.
18、构造器Constructor是否可被override?
构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。
19、是否可以继承String类?
String类是final类故不可以继承。
20、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。
21、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
会执行,在return前执行。
22、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
不对,有相同的 hash code
这是java语言的定义:
1) 对象相等则hashCode一定相等;
2) hashCode相等对象未必相等
23、四种会话跟踪技术?
Cookie
Session
Hidden
url 重写
24、写一个Singleton出来。
Singleton模式主要作用是保证在Java应用程序中,一个类只有一个实例存在。
一般Singleton模式通常有几种种形式:
第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
public class Singleton {
private Singleton(){}
//在自己内部定义自己一个实例,是不是很奇怪?
//注意这是private 只供内部调用
private static Singleton instance = new Singleton();
//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance() {
return instance;
}
}
第二种形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次
//使用时生成实例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; }
}
其他形式:
定义一个类,它的构造函数为private的,所有方法为static的。
一般认为第一种形式要更加安全些
25、Java中的异常处理机制的简单原理和应用。
原理: 有错直接转到异常处理部分或向上抛出。
应用:JAVA的异常就是错误,有两种,一种是运行时,编码可以不用捕捉。一种是一般异常,如果throws声明了,必须进行处理。
26、描述一下JVM加载class文件的原理机制?
JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。
Java面试题 2
1)Java 中能创建 Volatile 数组吗?
能,Java 中可以创建 volatile 类型数组,不过只是一个指向数组的引用,而不是整个数组。我的意思是,如果改变引用指向的数组,将会受到 volatile 的保护,但是如果多个线程同时改变数组的元素,volatile 标示符就不能起到之前的保护作用了。
2)volatile 能使得一个非原子操作变成原子操作吗?
一个典型的例子是在类中有一个 long 类型的成员变量。如果你知道该成员变量会被多个线程访问,如计数器、价格等,你最好是将其设置为 volatile。为什么?因为 Java 中读取 long 类型变量不是原子的,需要分成两步,如果一个线程正在修改该 long 变量的值,另一个线程可能只能看到该值的一半(前 32 位)。但是对一个 volatile 型的 long 或 double 变量的'读写是原子。
3)volatile 修饰符的有过什么实践?
一种实践是用 volatile 修饰 long 和 double 变量,使其能按原子类型来读写。double 和 long 都是64位宽,因此对这两种类型的读是分为两部分的,第一次读取第一个 32 位,然后再读剩下的 32 位,这个过程不是原子的,但 Java 中 volatile 型的 long 或 double 变量的读写是原子的。volatile 修复符的另一个作用是提供内存屏障(memory barrier),例如在分布式框架中的应用。简单的说,就是当你写一个 volatile 变量之前,Java 内存模型会插入一个写屏障(write barrier),读一个 volatile 变量之前,会插入一个读屏障(read barrier)。意思就是说,在你写一个 volatile 域时,能保证任何线程都能看到你写的值,同时,在写之前,也能保证任何数值的更新对所有线程是可见的,因为内存屏障会将其他所有写的值更新到缓存。
4)volatile 类型变量提供什么保证?(答案)
volatile 变量提供顺序和可见性保证,例如,JVM 或者 JIT为了获得更好的性能会对语句重排序,但是 volatile 类型变量即使在没有同步块的情况下赋值也不会与其他语句重排序。 volatile 提供 happens-before 的保证,确保一个线程的修改能对其他线程是可见的。某些情况下,volatile 还能提供原子性,如读 64 位数据类型,像 long 和 double 都不是原子的,但 volatile 类型的 double 和 long 就是原子的。
5) 10 个线程和 2 个线程的同步代码,哪个更容易写?
从写代码的角度来说,两者的复杂度是相同的,因为同步代码与线程数量是相互独立的。但是同步策略的选择依赖于线程的数量,因为越多的线程意味着更大的竞争,所以你需要利用同步技术,如锁分离,这要求更复杂的代码和专业知识。
6)你是如何调用 wait()方法的?使用 if 块还是循环?为什么?(答案)
wait() 方法应该在循环调用,因为当线程获取到 CPU 开始执行的时候,其他条件可能还没有满足,所以在处理前,循环检测条件是否满足会更好。下面是一段标准的使用 wait 和 notify 方法的代码:
// The standard idiom for using the wait method
参见 Effective Java 第 69 条,获取更多关于为什么应该在循环中来调用 wait 方法的内容。
Java面试题 3
1). applet的运行过程要经历4个步骤,其中哪个不是运行步骤?
A.浏览器加载指定URL中的HTML文件
B.浏览器显示HTML文件
C.浏览器加载HTML文件中指定的applet类
D.浏览器中的Java运行环境运行该applet
正确答案:B
2). 二维数组A[O,…,8][0,…,9],其每个元素占2字节。从首地址400开始,按行优先顺序存储,则元素A[8][5]的存储地址为( )。
A.570
B.506
C.410
D.482
正确答案:A
答案解析:A[8][5]元素存储的位置在第9行第6列,所以A[8][5]之前存储的个数应为8×10+5 = 85,这些元素占用的空间为85×2字节=170字节,所以A[8][5]的存储位置为400+170= 570。
3). 用于生产过程控制的系统,一般都是( ),它要求有对输入数据及时做出响应的能力。
A.批处理系统
B.分时系统
C.实时系统
D.及时系统
正确答案:C
答案解析:用于生产过程控制的系统,一般都是实时系统,它要求有对输入数据及时做出反应(响应)的能力。由于环境和控制对象以及工作任务的不同,控制系统对计算机系统的要求也会不同,一般会对计算机系统的可靠性、封闭性、抗干扰性等指标提出要求。
4). Java语言的许多特点中,下列哪个特点是C++语言所不具备的?
A.高性能
B.跨平台
C.面向对象
D.有类库
正确答案:B
5). 在匹配器(Matcher)类中,用于寻找下一个模式匹配串的方法是( )。
A.static boolean matches()
B.boolean matcher .fi nd()
C.i nt matcher .start()
D.i nt matcher .end()
正确答案:A
答案解析:本题考查考生对Java 中的匹配器(Matcher)类的理解。Matcher 类用于将一个输入字符串i nput 和模式串pattern 相比较。Boolean matcher .fi nd()方法用于寻找下一个模式匹配串;i nt matcher .start()方法用于返回匹配串的一个起始索引整数值;i nt matcher .end()方法用于返回匹配串的一个终止索引整数值。而用于输入字符串与模式串比较的方法是static boolean matches(),选项A 正确。
6). J2EE和( )语言绑定。
A.C
B.C++
C.Java
D.汇编语言
正确答案:C
答案解析:J2EE的基础是J2SE,以Java为平台;而C语言用于ODBCAPI。由于两者不兼容,SUN公司才提出了JDBC作为Java几个平台与麴据库的标准连接。
7). 下列关于结构化设计原则的'描述,错误的是
A.在块和进程的非正常出口处往往需要调用GOTO语句,使用GOTO语句使程序执行效率提高,但是滥用GOTO语句确实有害,应该避免使用GOTO语句。
B.程序设计时应该自顶向下,逐步求精。
C.程序设计时,应该将复杂问题进行模块化,就是将程序设计的总目标分解为若干个分目标,再进一步分解为具体的小目标。
D.在进行程序设计时,应该尽量在一行书写一条语句,尽量做到效率第一,清晰第二。
正确答案:D
8). 如果线程调用下列方法,不能保证使该线程停止运行的是( )。
A.sleep()
B.stop()
C.yield()
D.wait()
正确答案:C
答案解析:线程的方法中sleep()方法的作用是使比当前线程优先级低的线程运行。该方法使一个线程暂停运行一段固定时间。在休眠时间内,线程将不运行,低优先级的线程将有机会运行。yield()方法为只让给同等优先级的线程运行。如果没有同等优先级的线程是可运行状态,yield()方法将什么也不做,即线程将继续运行。stop()方法是强行终止线程。wait()方法是线程间交互的方法,是使一个线程停止运行,进入等待状态。
9). 开发软件时对提高开发人员工作效率至关重要的是( )。
A.操作系统的资源管理功能
B.先进的软件开发工具和环境
C.程序员的数量
D.计算机的并行处理能力
正确答案:B
答案解析:先进的软件开发工具和环境对提高开发人员工作效率是至关重要的。
10). 信息隐蔽的概念与下述哪一种概念直接相关( )。
A.软件结构定义
B.模块独立性
C.模块类型划分
D.模拟耦合度
正确答案:B
答案解析:信息隐蔽的概念与模块独立性这一概念直接相关。
Java面试题 4
一.选择题(30分)
1.下列哪些情况可以终止当前线程的运行?
a. 抛出一个异常时。
b. 当该线程调用sleep()方法时。
c. 当创建一个新线程时。(与当前进程无关)
d. 当一个优先级高的线程进入就绪状态时。
2. 下面哪些为构造函数的特性定义
a. 在类中声明构造函数时,名称应该与类名相同
b. 具有重载特性,可以建立多个相同的名称
c. 使用类建立新对象时,会自动执行构造函数,因此在构造函
数内设定变量的初值或进行内存分配
d. 以上都是
3. 关于异常处理机制的叙述哪些正确
a. catch部分捕捉到异常情况时,才会执行finally部分(无论是否有毛病,都执行)
b. 当try区段的程序发生异常时,才会执行catch区段的程序
c. 不论程序是否发生错误及捕捉到异常情况,都会执行finally部分
d. 以上都是
4. 下列关于接口的叙述中哪些是正确的
a. 接口中的数据必须设定初值(就是接口中的常量)
b. 接口中的方法都是抽象方法
c. 接口可以声明引用
d. 以上都正确
5.Java语言中,方法的重写(Overriding)和重载(Overloading)是多态性的不同表现。下边哪些说法是对的?
A. 重写是父类与子类之间多态性的一种表现。
B. 重写是一个类中多态性的一种表现。
C. 重载是一个类中多态性的一种表现。
D. 重载是父类与子类之间多态性的一种表现。
6.在Struts应用的视图中包含哪些组件?
A. JSP
B. Servlet
C. ActionServlet
D. Action
E. 代表业务逻辑或业务数据的JavaBean
F. EJB
G. 客户化标签
7. struts框架中,关于FormBean,下列哪些说法是正确的:
A FormBean是一种数据bean,主要用来封装表单提交上来的数据,并把这些数据传递给Action
B 在FormBean中可以对页面上传递来的参数进行一下格式上的验证,这种验证是一种客户端的验证
C 用户每次提交表单,都会产生一个新的FormBean实例
D 动态FormBean不能进行验证操作
8哪些方法可以进行servlet的调试?()
A、使用打印语句; 在桌面计算机上运行服务器
B、使用Apache Log4J
C、使用IDE集成的调试器
D、直接查看HTML源码 ????
E、返回错误页面给客户
9、下面关于servlet的功用说法正确的有哪些?()
A、读取客户程序发送来的显式数据
B、读取客户程序发送来的隐式数据
C、生成相应的结果
D、发送显式的数据给客户程序
E、发送隐式的数据给客户程序
10、下面关于session的用法哪些是错误的?(
A、HttpSession session = new HttpSession();
request.getSession();
B、String haha =(String) session.getParameter(Attribute)(“haha”);
C、session.removeAttribute(“haha”);
D、session. setAttribute(“haha”,值);
11、关于说法正确的有哪些?()
A、URL的输出在请求时入到JSP页面中
B、不能含有影响整个页面的JSP内容
C、被包含文件改变后不需更改使用它的页面
D、被包含文件更改后,需要手动地更新使用它的页面(不需要手动更新)
12、关于bean的说法正确的有哪些?()
A、具备一个零参数(空)的构造函数(不是必须的)
B、不应该有公开的实例变量(字段)
C、所有的属性都必须通过getXxx和setXxx方法来访问
D、布尔型的属性使用isXxx,而非getXxx
13、下面关于MVC说法错误的有哪些?()
A、必须使用复杂的框架
B、使用内建的RequestDispatcher能够很好地实现MVC
C、当其中一个组件发生变化的时候,MVC影响整个系统的设计
D、我们可以用MVC来处理单个请求
14、下面的标签中哪些是JSTL标签?()
15、struts框架,错误的是,下面那些说法正确?
A Struts中无法完成上传功能
B Struts框架基于MVC模式
C Struts框架容易引起流程复杂、结构不清晰等问题(清晰)
D Struts可以有效地降低项目的类文件数目
二、填空题( 5分)
1、调用函数MOD(123,10)返回值为___。
2、select round (123.67,1) from dual;这语句输出值为______。
3、创建一个临时替代变量使用的字符是_____。
4、若v_comm = 2800, X := NVL (V_comm,0) ,则X的值为____。
5、调用函数INSTR(‘Here you are’,’er’)返回值为___。
三、判断题(10分)
1、WHERE子句限制行记录,也可以指定限制分组结果的条件。 ()
2、具有UNIQUE约束的列不能包含多个空值。 ()
3、DATE型数据中包含着时间值。 ()
4、具有外键约束的列可以包含空值。 ()
5、如果在类型为4)的列中输入“hello”,则只能存储hell。 ()
6、含有Group by子句的查询,其结果是排好序的。 ()
7、定义游标时,其中的select语句不能使用order by子句。(子查询
不能用) ()
9、触发器一定会被激发。 、过程可以有返回值。 ()
10、instead
of触发器只是基于视图的。
四、写出相应的SQL语句(括号内为列名)(10分)
1、查询从事各工作(JOB)的员工人数。
2、查询与员工SMITH在同一部门(DEPTNO)的员工的姓名(ENAME),工资(SAL)和部门。
3、查询所有员工的姓名(ENAME),工资(SAL)和工资等级(GRADE)。
4、查询获得工资(SAL)最高的3个员工信息。
5、查询所有员工的姓名(ENAME)及其主管姓名(ENAME)。
五、简答题(15分)
1. 在PL/SQL程序中,进行用户自定义异常处理的3个步骤是
什么?
2. 面向对象的特征有哪些方面?并简要介绍
3. List、Map、Set三个接口,存取元素时,各有什么特点?
List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存key-value值,value可多值。
4 .struts1.0和struts2.0的区别?如何控制两种框架中的单例模式?
5. 描述一下如何在struts1.0实现国际化,以两国语言(中文,英文)为例:
6.struts中怎么配置form-bean、action
7. Hibernate自带的分页机制是什么?如果不使用Hibernate自带的.分页,则采用什么方式分页?
8. hibernate中一对多配置文件返回的是什么?
9.什么样的数据适合存放到第二级缓存中?
10你一般用spring做什么?
11项目中如何体现Spring中的切面编程,具体说明。
12 触发触发器的数据操作有哪些?
13 解释视图的含义以及使用视图的好处。
14 简述ORACLE中5种约束及其作用。
15 ORACLE中过程和函数的异同点。
六、编程题(30分)
1、创建一个PL/SQL块,根据用户输入的编号,在emp表中查询出该编号的员工姓名、部门号及其主管编号,要有异常处理。
2、创建一个PL/SQL块,根据用户输入的工作,从emp表中逐条输出从事这一工作的每位员工的编号、姓名和受雇如期,每条信息格式如下:(用游标实现)
编号 姓名 受雇日期
7751 JOHN 95-12-31
3、编写一个函数,用于判断EMP表中某一工作(JOB)是否存在,若EMP表存在此工作名称,则返回TRUE,否则返回FALSE。
4、编写一触发器,在EMP表执行插入或修改前被激发,此触发器将对员工的工资(SAL)超过5000进行报错,不能插入或修改,不超
过5000的才将员工编号、工作及当时的日期(SYSDATE)插入UP_EMP表
(注:此表已建好,表结构为UP_EMP(EMPNO NUMBER(4),SAL NUMBER(7,2),UDETE DATE))
5下面程序的输出结果是多少?
importjava.util.Date;
public class Test extends Date{
public static void main(String[] args) {
new Test().test();}
public void test(){
System.out.println(super.getClass().getName());}}
6下面的程序代码输出的结果是多少? public class smallT
{}
public static void main(String args[]) { } public int get() { } try { } finally { } return 2 ; return 1 ; smallT t = new smallT(); int b = t.get(); System.out.println(b);
7子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序。
8去掉一个Vector集合中重复的元素
9有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数
10. xxx公司的sql面试
Table EMPLOYEES Structure:
EMPLOYEE_ID NUMBER Primary Key,
FIRST_NAME VARCHAR2(25),
LAST_NAME VARCHAR2(25),
Salary number(8,2),
HiredDate DATE,
Departmentid number(2)
Table Departments Structure:
Departmentid number(2) Primary Key,
DepartmentName VARCHAR2(25).
(1)基于上述EMPLOYEES表写出查询:写出雇用日期在今年的,或者工资在[1000,2000]之间的,或者员工姓名(last_name)以’Obama’打头的所有员工,列出这些员工的全部个人信息。
(2) 基于上述EMPLOYEES表写出查询:查出部门平均工资大于1800
元的部门的所有员工,列出这些员工的全部个人信息。()
(3) 基于上述EMPLOYEES表写出查询:查出个人工资高于其所在部门平均工资的员工,列出这些员工的全部个人信息及该员工工资高出部门平均工资百分比。
参考答案
1答案:ABD
2答案: D
3答案:BC
4答案:AB
5答案AC
6答案:A,G
7答案:A
8A B C D E
9A B C D E
10A B D
11A B C
12B D
13A C
14A B C
15A B C
16答案:C
二 填空
3 123.7 & 2800 2
三判断
× ×√√√√×√×√
四写出相应的SQL语句
1Select job,count(*) from emp group by job;
2Select ename,sal,deptno from emp where deptno=(select deptno from emp where ename=’SMITH’);
3Select ename,sal,grade from emp,salgrade where sal between losal and hisal;
4Select * from (select * from emp order by sal desc) where rownum<=3;
5Select e1.ename empname,e2.ename mgrname from emp e1,emp e2 where e1.mgr=e2.empno;
五简答
可以通过声明和发布来截获自定义异常。
一、在声明部分为声明自定义异常名。
二、在执行部分使用 RAISE 语句显式地发布异常。
三、在相应的异常处理例程中引用已声明的异常。
2(1).抽象:
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
(2).继承:
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性, 新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
(3).封装:
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
(4). 多态性:
多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存key-value值,value可多值。
3List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存key-value值,value可多值
4a、Action类:
struts1.2要求Action类继承一个基类。struts2.0 Action要求继承ActionSupport基类 b、线程模式
struts1.2 Action是单例模式的并且必须是线程安全的,因为仅有一个Action的实例来处理所有的请求。
单例策略限制了Struts1.2 Action能做的事情,并且开发时特别小心。Action资源必须是线程安全的或同步的。
struts2.0 Action为每一个请求产生一个实例,因此没有线程安全问题。
c、Servlet依赖
struts1.2 Action依赖于Servlet API,因为当一个Action被调用时HttpServletRequest和HttpServletResponse被传递给execut方法。
struts2.0 Action不依赖于容器,允许Action脱离容器单独测试。如果需要,Struts2 Action仍
然可以访问初始的Request和Response。
但是,其他的元素减少或者消除了直接访问HttpServletRequest和HttpServletResponse的必要性。
d、可测性
测试struts1.2 Action的一个主要问题是execute方法暴露了Servlet API(这使得测试要依赖于容器)。一个第三方扩展:struts TestCase
提供了一套struts1.2的模拟对象来进行测试。
Struts2.0 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”也使得测试更容易。
【Java面试题】相关文章:
java面试题10-30
Java经典面试题12-29
java面试题汇总10-18
Java面试题集10-15
JAVA经典算法面试题04-16
经典的Java基础面试题集锦11-03
高级Java面试题集合10-22
java面试题spring框架11-02
瞬联java面试题03-26