为了面试,整理了几题。
1.面向对象的特征有哪些方面?
抽象,继承,封装,多态。
2.Java的基本数据类型
整型数据类型,(包括短整型,整型,长整型),浮点型数据类型(包括单精度浮点型(float)和双精度浮点型(double)),字符数据类型,布尔数据类型,字符串数据类型
3.int 和 Integer 有什么区别
int是基本数据类型, Integer是一个int的包装类(Integer类包含一个int值)
4.String和StringBuffer区别
String对象一旦生成就不能修改,StringBuffer可以
String对象传递的时候是值传递(具体是因为String是拷贝构造,具体为什么就不要难为我了,总之现实如此),StringBuffer是引用传递
5.运行时异常与一般普通异常有何异同
本质上应该没有区别,只不过运行时异常是和JVM相关的;
另外运行是异常是无法在写方法的时候显示的throws的。
级别不一样…
一般异常都是Exception的子类, 运行期异常与System.err平级的
一般异常值得捕获,运行期异常就管部了,无能为力地。
6.作用域public private protected 以及不写时的区别
区别如下:
作用域 当前类 同一package 子孙类 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
不写时默认为friendly defind
7.java 中文件的读写的基本类
InputStream & OutputStream 这两个基类
8.简述关联、聚合以及组合的概念,说明在uml中的图形和区别。
9.final, finally, finalize的区别
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
10.&和&&的区别
&是位运算符。&&是布尔逻辑运算符。
11.collection 和 collections的区别
Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
12.垃圾回收的优点和原理。并考虑2种回收机制
Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。
13.string s = new string( xyz );创建了几个string object?
2个
14.简要的叙述error和exception
Error和Exception都继承自Throwable,他们下列不同处:
Exceptions
1.可以是 可被控制(checked) 或 不可控制的(unchecked)
2.表示一个由程序员导致的错误
3.应该在应用程序级被处理
Errors
1.总是 不可控制的(unchecked)
2.经常用来用于表示系统错误或低层资源的错误
3.如何可能的话,应该在系统级被捕捉
15.抽象和继承的区别
1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。
2.在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。
3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是”is-a”关系,interface表示的是”like-a”关系。
4.实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。
5.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。
6.抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。
7.接口中的方法默认都是 public,abstract 类型的。
16.当一个对象被当作参数传递到一个方法后 此方法可改变这个对象的属性 并可返回变化后的结果 那么这里到底是值传递还是引用传递
是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。
17.描述一下jvm加载class文件的原理机制
18.JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
Java 通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口.在Java中,每个异常都是一个对象,它是Throwable类或其它子类的实例.当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理.Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally.一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理.
用try来指定一块预防所有”异常”的程序.紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的”异常”的类型.
throw语句用来明确地抛出一个”异常”.
throws用来标明一个成员函数可能抛出的各种”异常”.
Finally为确保一段代码不管发生什么”异常”都被执行一段代码.
可以在一个成员函数调用的外面写一个try语句,在这个成员函数内部写另一个try语句保护其他代码.每当遇到一个try语句,”异常”的框架就放到堆栈上面,直到所有的try语句都完成.如果下一级的try语句没有对某种”异常”进行处理,堆栈就会展开,直到遇到有处理这种”异常”的try语句.
19.java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
基于流:
InputStream
OutputStream
基于字符:
Reader
Writer
流和字符之间的配接:
InputStreamReader
OutputStreamWriter
字节流,字符流.字节流继承于InputStream OutputStream,字符流继承于InputStreamReader OutputStreamWriter.在java.io包中还有许多其他的流,主要是为了提高性能和使用方便.
20.什么是java序列化 如何实现java序列化?
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。
序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。
21. 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
package com.sytdc.cxl;
public class StringSplit2 {
/**
* 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。
* 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,
* 输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
*
* @param args
*/
public static void main(String args[]){
String s = “ABC汉DEF”;
int len = 3;
SplitStr(s,len);
}
public static void SplitStr(String str,int len){
String result = “”;
char temp;
//取得的字节数
int counter=0;
int i=0;
//汉字个数
int han = 0;
while(counter < len){
temp = str.charAt(i);
//System.out.println(Character.getNumericValue(str.charAt(3)));
if(Character.getNumericValue(temp)!=-1){
//遇到字母的时候
result = result +temp;
counter++;
i++;
}else{
//遇到汉字的时候,作为unicode字符,汉字的整数值是-1
result = result +temp;
counter = counter +2;
i++;
han = han +1;
}
}
if(counter > len){
if(len ==1){
result = “”;
}else{
result = result.substring(0,counter-(han+1));
}
}
System.out.println(”result “+ result);
}
}
22.请简要说明对J2EE的理解和认识?并列出J2EE框架包含的技术
首先,是一个分布式web应用程序平台, 基于四个重要的元素:J2EE规范和API,J2EE参考实现,J2EE蓝图,j2ee兼容测试套件。
其次,是一个完整的平台,从概念上分为两个部分:标准产品和标准服务。
标准产品有:应用程序组件,容器,资源管理驱动程序,数据库。应用程序组件又分为客户层组件如java应用程序,java applet,浏览器;表示层组件,如Servlet、JSP和HTML;业务层组件如EJB。容器则为组件提供生存环境。
标准服务有:http/https,JTA(java transaction API),RIM/IIOP,JDBC(java database connectivity),JMS,JNDI,JavaMail,JAF(Java Activation Framework),Jaxp,jaas,j2ee connector architecure
23.JSP有哪些内置对象?作用分别是什么 ?
JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应):
request 用户端请求,此请求会包含来自GET/POST请求的参数
response 网页传回用户端的回应
pageContext 网页的属性是在这里管理
session 与请求有关的会话期
application servlet 正在执行的内容
out 用来传送回应的输出
config servlet的构架部件
page JSP网页本身
exception 针对错误网页,未捕捉的例外
24.JSP有哪些动作?作用分别是什么?
JSP共有以下6种基本动作 jsp:include:在页面被请求的时候引入一个文件。 jsp:useBean:寻找或者实例化一个JavaBean。 jsp:setProperty:设置JavaBean的属性。 jsp:getProperty:输出某个JavaBean的属性。 jsp:forward:把请求转到一个新的页面。 jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记。
25.JSP中动态INCLUDE与静态INCLUDE的区别?
动态INCLUDE用jsp:include动作实现
<jsp:include page=”included.jsp” flush=”true”/>
它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数
静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面
<%@ include file=”included.htm” %>