第一篇:Java编程语言面试题
西安英泰移动通信学院S2级Java编程语言测试题 1
Java编程语言面试题
一、简答题
1、简述用Java编程语言编写、编译、解释和执行过程。
2、简述在Java JDK中,java.exe程序的作用。
3、简述Java编程语言中的数组和C编程语言中定义数组有什么区别。
4、简述类与对象的关系。对象的方法和类的方法是否为一回事?
5、JVM在解析代码Person p1=new Person()和new Person()时有什么区别?
6、简述this关键字的四中用途。
7、简述构造函数的作用。
8、分别简述static和final关键字的意义。
9、简述抽象类和接口的区别,并阐明抽象类和接口的用途。
10、简述多态的概念和意义。
11、简述异常和错误的区别。
12、简述如何创建和启动一个线程的两种方法
13、简述栈内存和堆内存分别用来做什么。
14、简述throw关键字在程序中抛出的是什么。
15、在一个类的public static void method()中,能够直接使用该类什么类型的成员。
二、计算题
1、在类Runner中定义一个方法move(),要求这个方法的参数是一个实现了接口Runnable的匿名内部类的对象,该接口中的方法中的内容自己可以决定。
2、类Outer中与方法属性平行定义的内部类为Inner{ public void doStuff(){}},写出在另一个类TestInner的public static void main(String s)中调用方法doStuff()的代码。
3、类Book{ public void insert(String id)throws Exception{…}}中的方法被类TestBook中public void testInser()方法调用,写出该方法中的主要代码。
4、两个顶级包test1和test2,需要将它们压缩成一个文件myjava.jar,再用WinRaR打开时,会在浏览器上看到下列层次;
◎META-INF
◎test1
◎test2
注:◎为文件夹
请写出操作过程,并写出运行的命令行程序(提示:用jar.......).5、同一个线程类ThreadTest中定义了:
public synchronized void sale(){...}
synchronized(str){...}
写出能使这两个类成员保持同步的改进代码。
6、解释类class Q{
private String name=“李四”;
private String sex=“女”;
boolean bFull=false;
public synchronized void put(String name,String sex){
if(bFull)
try{
wait();
this.name=name;
}catch(InterruptedException e){}
try{
Thread.sleep(10);
}catch(Exception e){
System.out.println(e.getMessage());
}
this.sex=sex;
bFull=true;
notify();
}
public synchronized void get()
{
if(!bFull)
try{
wait();
}catch(InterruptedException e){}
System.out.println(name + “----” + sex);
bFull=false;
notify();
}
}
中wait()、notify()、sleep()诸方法的作用。
7、在类class TestInteger{
public static void main(String[] args){
int w =。。。。。。。。。。。。。。。。。。。。// 将args[0]转换int型的方法
int h =。。。。。。。。。。。。。。。。。。。。//将args[1]转换int型的另一种方法//int h = Integer.valueOf(args[1]).intValue();//第三种方法
for(int i=0;i StringBuffer sb=new StringBuffer(); for(int j=0;j sb.append('*'); } System.out.println(sb.toString()); } } } 中,args[0]的值为:“1234”,args[1]的值为:“5678”,请上面代码块中的……………处填写代码。 8、下面类 import java.util.*; public class TestVector{ public static void main(String [] args){ int b=0; Vector v=new Vector();System.out.println(“Please Enter Number:”); while(true){ try{ b= System.in.read();//……….} catch(Exception e){ System.out.println(e.getMessage()); } if(b=='r' || b== 'n') break; else{ int num=b-'0'; v.addElement(new Integer(num));//………..} } int sum=0; Enumeration e=v.elements();//………………… while(e.hasMoreElements()){ Integer intObj=(Integer)e.nextElement();//………………..sum += intObj.intValue(); } System.out.println(sum); } } 中,请在诸单行注释//。。。。中解释其左边一行代码的意义。 9、下面类 import java.io.*; public class DataStreamTest{ public static void main(String[] args){ try{ FileOutputStream fos=new FileOutputStream(“c:hello.txt”);//…….BufferedOutputStream bos= new BufferedOutputStream(fos);//…… DataOutputStream dos= new DataOutputStream(bos);//……..dos.writeUTF(“ab中国”);//……… dos.writeBytes(“ab中国”); dos.writeChars(“ab中国”); dos.close();//………… FileInputStream fis=new FileInputStream(“hello.txt”);//…….BufferedInputStream bis=new BufferedInputStream(fis);//…….DataInputStream dis=new DataInputStream(bis);//…….System.out.println(dis.readUTF()); dis.close(); }catch(Exception e){ System.out.println(e.getMessage()); } } } 中,请在诸单行注释//。。。。中解释其左边一行代码的意义。 10、已知接口:interface PCI { voidstart(); voidstop(); } 要求:写两个类:NetWorkCard,SoundCard分别实现上面接口的方法(内容自编),并写第三个类MainBoard,该类中的方法install(PCI p)应用NetWorkCard,SoundCard两个类对象的方法。根据上面的要求,填写下面的代码: class Assembler { public static void main(String []args) { //在下面写代码….} } class NetWorkCard ….{ } class SoundCard…………{ } class MainBoard…………………………………..{ install(PCI p){ } } 第一章初识Java 1.程序是为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合。 2.Java包括编程语言和相关的技术。 3.Java主要用于开发,桌面应用程序和Internet应用程序。4.开发一个Java应用程序的基本步骤:编写源程序,编译程序和运行程序。源程序以.java为扩展名,编译后生成的文件以.class为扩展名。使用javac命令可以编译.java文件,使用java命令可以运行编译后生成的.class文件。 5.编写Java程序要符合Java编码规范,为程序编写注释可大大增加程序的阅读性。 6.MyEcplise是一个功能强大的集成开发环境(IDE)。它的各种窗口便于Java程序的开发,调试和管理。 第二章变量、数据类型和运算符 1.变量是一个数据存储空间的表示,它是存储数据的基本单元。变量的命名规则: (1)必须以字母,“_”,“$”开头。(2)可以包括数字,但不能以数字开头(3)不能包括除“_”,“$”以外的特殊符号(4)不能使用Java语言关键字或者保留字(goto) 2.Java中数据类型分为基本数据类型和引用数据类型,基本数据类型有整型(int),双精度浮点型(double),字符型(char)和字符串(String)。3.变量要先声明并赋值,才能使用。4.Java提供各种类型的运算符,具体如下。 (1)赋值运算(=)(2)算术运算符(+,-,*,/,%)(3)关系运算符(>,>=,<,<=,==,!=)(4)条件运算符(条件?表达式1:表达式2)(5)逻辑运算符(&& , || ,!, & , |)&&(短路与)与&的区别:&&进行判断时,当第一个条件为假,则不需要判断第二个条件,结果为假。&进行判断时,即使第一个条件为假时,也需要判断完第二个条件才能给出结果为假。||(短路或)与|的区别:与上同理(5)位运算符(&, | , << , >> , >>>)5.数据类型转换是为了方便不同类型的数据之间进行运算 6.数据类型转换包括了自动类型转换和强制类型转换,自动类型转换需要满足类型兼容且目标类型大于源类型的条件 7.Java中使用boolean类型表示真假,boolean类型的两个值为true和false。 8.Java中的关系运算符可以用于来比较大小,高低,多少等,比较厚的结果是boolean类型。 9.Java提供Scanner类,可以实现从控制台获取键盘上输入的信息 第三章选择结构(一)Java中的if选择结构,包括以下形式 (1)基本的if选择结构:可以处理单一或组合条件的情况(2)if-else选择结构:可以处理简单的条件分支情况(3)多重if选择结构:可以处理连续区间的条件分支情况(4)嵌套if选择结构:可以处理复杂的条件分支情况 第四章选择结构(二)1.switch选择结构适用于进行等值判断 2.switch关键字后面小括号里表达式的值可以是int , short , byte , char , 枚举 , String(JDK1.7开始支持) 第五章循环结构(一)1.循环结构由循环结构和循环操作构成,只要满足循环条件,循环操作就会反复执行 2.使用循环结构解决问题问题的步骤:分析循环条件和循环操作,套用循环结构的语法写出代码,检查循环能否退出 3.while循环结构是先判断后执行,do-while是先执行,后判断。Do-while至少执行一次。 4.debug调试:设置断点,单步运行,观察变量 第六章循环结构(二)1.for循环结构的语法结构如下 for(表达式1:表达式2:表达式3){ } //循环体 表达式1:循环结构的初始部分,为循环变量赋初值 表达式2:循环结构的循环条件 表达式3:循环条件的迭代部分,通常用来修改循环变量的值 2.用break和continue语句控制流程 (1)break语句用于终止某个循环,程序跳转到循环体外的下一条语句。Break也可以在switch语句中使用 (2)continue语句用于跳出本次循环,进入下一次循环 (3)return可以结束当前方法的执行并退出,返回调用该方法的语句处 第七章数组 1.数组是可以在内存中连续存储多个元素的结构,数组中的所有元素必须属于相同的数据类型 2.数组中的元素通过数组的下标进行访问,数组的下标从0开始 3数组可用一个循环为元素赋值,或用一个循环输出数组中的元素信息 4.通过数组名.length可获得数组长度 5.利用Arrays.提供的sort()方法可以方便的对数组中的元素进行排序 6.二维数组实际上就是一个一维数组,他的每个元素又是一个一维数组。 第八章循环结构进阶 1.数组的输入排序,选择排序,冒泡排序 2.在二重循环中可以使用break、continue语句控制程序的执行 选择排序: 思路:每次循环得到最小值的下标,然后交换数据。如果交换的位置等于原来的位置,则不交换。插入排序: 思路:将数据插入到已排序的数组中。 关于Java不适做主要编程教学语言.txt38当乌云布满天空时,悲观的人看到的是“黑云压城城欲摧”,乐观的人看到的是“甲光向日金鳞开”。无论处在什么厄运中,只要保持乐观的心态,总能找到这样奇特的草莓。最近有一篇文章,说两位退休的美国大学教授上书反对将Java作为编程教学语言,对此我表示高度认同。对于Java,我并不反感,而且相信它在工业应用中的地位不可取代,但是,我一直反对将Java作为主要的编程教学语言,因为教学语言承担着与生产语言不同的任务,它必须能够帮助学生奠定坚实的技术基础,塑造核心技术能力。在这方面,Java不能够胜任。 1990年代中期以前,美国的计算机编程入门教育以Pascal为主。我的一位美国程序员朋友至今还怀念他与Pascal为伴的高中年代。到了1990年代中后期,由于ANSI C语言“纠正”了早期C语言的一些不适合编程教学的问题,因此成为很多美国高中和大学编程入门课的教学语言。1998年,美国指导编程教学的一个协会推荐将C++作为入门教学语言,在当时引起很大的反响,认为是编程教育方面的一个重要进步。但遗憾的是,C++非常复杂,而当时C++语言的教育体系又非常不成熟,因此很多地方的教学方法不得当,把学生迅速拖入无边无际的语言细节当中,引起了学生痛苦的抱怨。大约经过两三年不成功的实践之后,在本世纪初,美国计算机教育界普遍接受Java作为编程入门语言。此后在很短的时间里,Java迅速成为美国高中和大学里的首选编程教学语言,老师教得轻松,学生学得甜蜜,所以这个局面一直持续到现在。 而在中国,BASIC语言及其变体一直到1990年代中期都还是“算法语言”课程的主要教学内容,充分折射出当时中国计算机教学与工业应用之间的脱节。只是到了1990年代后期,C语言才确立了在中国工科计算机编程入门教育中的主流地位。到现在为止,大部分工科学生都“必修”“C程序设计语言”这门课程。不过事实上,根据我的了解,这门课程的总体教学质量相当糟糕,大部分学生可以说是满怀希望而来,两手空空而去。在这种情况下,中国高校计算机编程入门教育已经开始悄悄向Java过渡了。据我所知,有一些名校已经开始将Java设为编程入门课程,并且认为这是与国际接轨进步标志。 在我的朋友圈子里,大多数真正的一线开发者和技术领导者,对于将Java作为入门教学语言的“发展方向”都持质疑态度。他们中很多人目前主要的工作都集中在Java上,因此这种态度并非来自所谓语言宗教情绪,而是来自他们招聘和实际工作中的感受。他们发现,只学习Java、C#、VB等“现代”编程语言的学生,精于拿来主义,长于整合和快速开发,思维活跃,生产效率高,让他们来做直截了当的、有章可循的、非研究性和非创新性的工作比较合适,但是基础不扎实,对计算机系统的理解薄弱,处理细节和矛盾的能力不足,一旦他们熟悉的套路用不上,则缺少自主分析问题、解决问题的知识、能力和经验。 今天看到两位教授的“上书”,才知道原来他们也有同感。只不过这两位教授说的更直白,直接反对将Java作为入门编程语言,而是冒天下之大不韪,公然号召开历史倒车,要求退回到C、C++、Lisp和Ada去。 我是支持两位教授的。我认为,Java、C#、VB和其它虚拟机之上的语言都不适合作为专业程序员的入门教学语言。在中国还非常缺乏具有创新和独立解决问题的高水平程序员的局面下,我们应该认真做好的事情是努力提高C/C++的教学质量,而不是图快活转向Java。 教学语言的选择是至关重要的事情。作为大多数学生第一种需要认真学习理解的编程语 言,教学语言将会成为他们中间很多人的“编程母语”,深深地烙印在学生的思维方式中。这个编程母语要帮助学生破除计算机和软件的神秘感,建立对于程序的基本认识和对计算机模型的最初理解。在后续专业基础课和专业课程的学习中,这门编程语言应该作为主要工具贯穿始终,帮助学生认识计算机系统,掌握算法与数据结构技能,熟悉操作系统概念,理解编译原理知识,理解软件抽象及软件设计的基本思想,完成一定量的课程及课外项目实践,建立正确的软件开发实践习惯。不但如此,这种教学语言必须是工业界的主流语言,否则学生学非所用,学习动力无法保证。 按照这个标准来衡量,Java适合于作为主要的编程教学语言吗?我不这么认为。首先,我承认Java在教学上有一些优势,比如其开发环境和工具支持非常成熟,有助于培养学生正确的编程习惯;Java是当今第一工业主流语言,标准类库非常全面,可以迅速地开发具有实际用途的程序,有助于激发和保持学生的兴趣;而在数据结构、算法、编译原理的教学方面,Java也毫不落于下风,在软件抽象设计(面向对象)方面,Java还有着明显的优势;特别是在并行编程的教学方面,Java 1.5 concurrency包提供的优势是压倒性的。尽管有如上这些优势,但Java作为教学语言存在着一个致命的缺陷,即它是一个虚拟机语言,这一点就足以把它从教学语言的名单上去掉。 作为一个虚拟机语言,Java对开发者隔绝了下层的真实系统,从而构造了一个近乎完美的环境,在这个环境里,世界上只有一种机器,一个操作系统,内存是无限的,所有的机器都具有相同的字节顺序和一致的类型约定,为了设计的优美而牺牲速度永远是正义行为,从反射到运行时自动加载,从完备的容器类到统一字符编码,一大堆漂亮的功能都可以不费吹灰之力唾手而得。要是这个世界上每台计算机都是一个Java机器,每项编程任务都可以在这样一个近乎完美的环境中开发,那毫无以为,Java是最合适的编程教学语言。但是事实上呢?这样一个完美的环境是Java力量的源泉,但这却不是真实的世界。在真实世界里,我们可能面对非常原始的环境,苛刻的运行时限制,复杂多变的系统环境,令人窒息的细节魔鬼,要对付这些东西,需要开发者具有在应对复杂性,自己构造环境,在诸多限制条件下寻找解决方案的能力。而这种能力,被无数人无数次地证明是软件开发、特别是软件创新的核心能力。把Java作为教学语言,恰恰会导致这种核心能力的缺失。除此之外,如果耐心观察的话,不难发现,几乎在任何软件领域里的创新性成果都首先是由C/C++语言实现的,原因很简单,Java是站在C/C++基础之上的,只有C/C++先把大路趟开,Java才能够顺势而上。 相反,尽管C/C++语言作为教学语言有很多的不足,比如不同环境下开发模式差异大,细节繁多,开发效率低,容易犯错,测试和调试困难,学习者难以保持动力,等等,但是这些问题都可以解决。而C/C++的关键优点,是能够让学习者在真实的计算机抽象上、在大量的细节和矛盾中学会思考,学会解决问题,学会了解真实的系统,知轻重,明生死,从而建立核心能力。掌握了C/C++语言,再去学习和理解Java、C#、Python、Ruby和其它语言,就比较容易达到更高的境界。反之,如果习惯了舒舒服服躺在完美世界里当阔少,那就很难有勇气面对真实的世界。当然,很多开发者认为,现在更重要的能力是理解业务、整合现有资源的能力,而不是处理底层细节的技术。这种说法放在个人身上没有问题,但是不能成为整个编程教育的指导思想。我们需要各个层面上的人才,精通业务和设计的架构师固然很重要,但能够在底层作出创新成果的编程高手实际上更为稀缺和珍贵,很多时候也能够创造更大的价值。而且,更重要的是,一个精通系统知识的开发者在往上走的时候不会遇到大的障碍,而一个只知道拼装组合的“高级设计师”,往往连往下看的勇气都没有。 Java的另外一个问题,是其所倡导的繁琐设计风格,一个对象套一个对象,一个对象叠一个对象,概念之间彼此横七竖八地互相依赖,人为制造出一大堆貌似精美、实则累赘的所谓设计。这个问题我已经批评过多次,并且相信这股歪风一定会最终被人们抛弃,Java最终会归于质朴。但是在这一天到来之前,Java对于初学者来说,很可能蒙住他们的双眼,使他们看不到软件设计中最可贵的简单性和优美的统一,体会不到数据和程序的统一。在这一点上,C表现的非常好,而C++如果教学得体,可以做的更好。 当然,这并不是为现在的C/C++教学辩护。恰恰相反,从我了解的情况来看,目前普通高校的C/C++教学质量非常令人担忧。学生学不会,而且越学越没有兴趣,老师则感到教起来很棘手,迫于现实情况往往选择敷衍了事。反而是教Java,无论如何学生还能学到一点东西,对就业也有直接的帮助。至于学生的核心能力确实,发展后劲不足等问题,就让他们在现实工作中自己解决吧。坦率地说,这种想法也很有道理。不过,从教学角度来说,我认为老师们还是应该积极考虑如何提高C/C++的教学质量。毕竟学生阶段是十分宝贵的,基础不在这个时期夯实,将来想弥补,就算不是完全不可能,也将付出十倍的代价。本着对学生职业生涯的负责态度,还是应该帮助学生达到这个阶段应该达到的目标。在两位教授的公开信里,也充分表达出这个意思。 我赞成的编程教育过程,应当是以C/C++(基本上是C)为主线,贯穿起算法、数据结构、系统原理、编译和数据处理、软件设计和组件技术等关键知识领域,让学生能够从根本上理解现代软件系统的原理和构造,并通过有效的练习建立正确的软件设计观念和良好的工程实践习惯。在这个基础上,无论将来是深入学习C++,还是进入Java的繁荣世界,或者拥抱Python、Ruby,甚至于走向Web开发,都会心领神会,势如破竹。 1、面向对象的四个特征:封装、继承、多态、抽象 封装: 继承:子类继承父类,除private修饰以外的所以方法和属性 多态:一个对象多种状态,可以把子类对象当作父类对象来看,一旦这样做了,就只能 去调用父类中原有定义的属性和方法,也就是子类中扩展的方法或属性就不能调用了。 抽象: 2、abstractclass 和interface的区别 声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。 接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。 3、final、finally、finalize的区别 final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。finally是异常处理语句结构的一部分,表示总是执行。 finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。 4、匿名内部类是否可以作为父类被其他类继承,或做为接口被实现? 匿名内部类不被继承也不能被实现,因为它没有名字,而一个内部类只要有名字就可以作为父类被继承,也可以作为借口被实现。 5、多线程有几种实现方法,同步有几种实现方法,都是什么? 多线程有两种实现方法,分别继承继承Thread类与实现runnable借口。 同步的实现方法有两种,分别是synchronized,wait与notify。 6、string 与 stringbuffer的区别? String的长度是不可变的,而stringbuffer的长度是可变的。如果你对字符中的内容经常进行操作,特别是内容修改时,那么就要使用stringbuffer,如果最后需要使用string,那么使用stringbuffer的tostring()方法。 7、解析XML文件的几种方式和区别 DOM:处理大型文件时其性能下降的非常厉害 SAX:SAX是事件驱动型的XML解析方式,它是顺序读取XML文件,不需要一次性全部装载整个文件。 8、sleep()和wait()有什么区别? sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。 wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 9、数组有没有length这个方法?string有没有length这个方法? 数组没有length()这个方法,有length这个属性 String有length()这个方法 10、LinkedList、ArrayList和Vector的区别? ArrayList和Vector是采用数组方式存储数据,此数组元素总数大于实际存储的数据个数以便增加和插入元素,二者都允许直接序号索引元素,但是插入数据要移动数组元素等内存操作,所以它们索引数据快、插入数据慢。 Vector由于使用了synchronized同步方法(如add、insert、remove、set、equals、hashcode等操作),因此是线程安全,性能上比ArrayList要差。 LinkedList使用双向链表实现存储,按序号索引数据需要进行向前或向后遍历,但是插入数据时只需要记录本项的前后项即可,所以插入数度较快!LinkedList双向链表,是指可以从first依次遍历至last(从头到尾),也可以从last遍历至first(从尾到头),但首尾没有构成环,不同于双向循环链表(注意区分): 11、hashmap与hashtable的区别? 都属于Map接口的类,实现了将惟一键映射到特定的值上。 HashMap类没有分类或者排序。它允许一个null键和多个null值。 Hashtable类似于HashMap,但是不允许null键和null值。它也比HashMap慢,因为它是同步的。 12、Jsp有哪些内置对象,作用分别是什么?(至少能说出五个) request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header, 和session数据的有用的方法。 response表示HttpServletResponse对象,并提供了几个用于设置送回 浏览器的响应的方法(如cookies,头信息等) out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。 pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。 session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息 applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息 config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。 page表示从该页面产生的一个servlet实例 13、Javaservletapi中forward()与redirect()的区别? 前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。 14、重载(overload)与重写(override)的区别? Overload:方法名相同,参数不同,与返回值无关 Override:方法名相同,参数相同,相同的返回值,建立在继承的基础之上 15、什么是单例模式,在程序中如何使用? 单例模式确保一个类只有一个实例 饿汉式单例类 public class Singleton { private Singleton(){} private static Singleton instance = new Singleton(); 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; } } 16、Servlet生命周期? 加载和实例化 初始化init() 请求处理service() 服务终止destroy() 17、spring中IOC与AOP的含义? IOC:控制反转,是一种设计模式,一层含义控制权的转移,由传统的在程序中控制依赖转移到由容器来控制,第二层是依赖注入将互相依赖的对象分离,在spring配置文件中描述它们的依赖关心,它们的依赖关系只是在使用的时候才建立 AOP:面向切面,是一种编程思想,oop的延续,将系统中非核心的业务提取出来,进行单独的处理,比如事务、日志和安全等 Spring的AOP和IOC都是为了解决系统代码耦合度过高的问题,使用代码重用性高,易于维护,不过AOP和IOC并不是spring中特有的,只是spring把它们应用的更灵活方便。 18、hibernate与JDBC的区别? 相同点: 1>两者都是JAVA的数据库操作中间件。 2>两者对于数据库进行直接操作的对象都不是线程安全的,都需要及时关闭。 3>两者都可以对数据库的更新操作进行显式的事务处理。 不同点: 1>使用的SQL语言不同:JDBC使用的是基于关系型数据库的标准SQL语言,Hibernate使用的是HQL(Hibernate query language)语言 2>操作的对象不同:JDBC操作的是数据,将数据通过SQL语句直接传送到数据库中执行,Hibernate操作的是持久化对象,由底层持久化对象的数据更新到数据库中。3>数据状态不同:JDBC操作的数据是“瞬时”的,变量的值无法与数据库中的值保持一致,而Hibernate操作的数据是可持久的,即持久化对象的数据属性的值是可以跟数据库中的值保持一致的。 19、struts中的标签库有几种,分别是? 有5种标签,分别是:bean标签库、html标签库、logic标签库、tiles标签库nested标签库 20、Error与Exception有什么区别? Error表示系统级的错误和程序不必处理的异常,Exception表示需要捕捉或者需要程序进行处理的异常。 21、Collection和Collections的区别。 Collection是集合类的上级接口,继承与他的接口主要有Set 和List.Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作 22、GC是什么?为什么要有GC?(基础)。 GC是垃圾收集器。Java程序员不用担心内存管理,因为垃圾收集器会自动进行管理。 要请求垃圾收集,可以调用下面的方法之一: System.gc() Runtime.getRuntime().gc() 23、启动一个线程是用run()还是start()? 启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。 24、&和&&的区别。 &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。 25、heap和stack有什么区别。 栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方 式进行处理。 堆是栈的一个组成元素 26、List, Set, Map是否继承自Collection接口? List,Set是,Map不是 27、MVC的各个部分都有那些技术来实现?如何实现? MVC 是Model-View-Controller的简写。“Model” 代表的是应用的业务逻辑(通过JavaBean,EJB组件实现),“View” 是应用的表示面(由JSP页面产生),“Controller” 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。 28、Static Nested Class 和 Inner Class的不同。 Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。 29、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类 (concrete class)? 接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数 30、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? JSP 是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是“类servlet”。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑 31、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 不能,一个对象的一个synchronized方法只能由一个线程访问。 32、运行时异常与一般异常有何异同? 异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 33、JSP中动态INCLUDE与静态INCLUDE的区别? 动态INCLUDE用jsp:include动作实现 静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面<%@ include file=“included.htm” %> JAVA编程心得 计算机3班 窦金霞 20104773 最近几周一直在弄程序,说实话真的很累,但累中也有成功的快乐。我觉得学到了很多东西,这是只看课本知识所不能学到的。 说实话,以前我一直没学过JAVA虽然我也知道JAVA的重要性,可是即使上课听了,不实践还是掌握不了。因为种种原因,今年我没有买笔记本。没有机器,仅仅靠每周一次的上机练习是绝对不够的。所以我就插空调程序,在舍友们不用的时候自己再接她们的电脑调。 调上一个WEB版的通讯录程序时我已经感觉到学的很吃力,好多东西都不懂。这次做的这个学生成绩管理系统更复杂了,所以一开始调的时候感觉特别吃力.所以我告诉自己不能放弃,慢慢来,就这样我从最基本的sql语句session对象开始学起,我觉得我还有太多不懂得所以要比别人付出更多的努力。就这样我一点一点的学着„„ 说心里话,在做上一个web版的通讯录时,我就感觉到成功的喜悦。好多地方我都是一点一点的问的,在问的过程中,我也学会了很多,像:Servlet和jsp之间跳不过去时有两种解决办法,一是关闭底层类中的db.close;二是将Servlet中的throws Exception改成try catch以捕捉异常;我还学到了集中查找错误的方法,可以加上两个双斜杠“//”将具体的方法屏蔽掉,一检查是方法错误还是Servlet错误,还有就是写上System.out.println()将获得的数据输出,用来检查数据传输过程有没有错误等等。 虽然在别人看来,这些方法可能都很常规,但是确实我自己学会的,我觉得很有成就感。我已经做好计划了,暑假的时候去买本本用自己的本本练习一下JAVA,虽然下学期不学JAVA了,但是我对JAVA的热情不会因为这个而削减的! 做完这个学生成绩管理系统后,我觉得我对JAVA的看法已经改变了。一前总以为JAVA很繁琐很难,听同学说JAVA不好学,开始又有一些听不懂,所以一直很畏惧JAVA。但真正做了这个系统以后我才感觉到其实任何事都没有难与不难之分,只要你肯努力的去做,世上无难事只怕有心人! 我现在对java学习充满了热情,我知道我还有很多的不足 还有很多需要努力的地方,所以我的JAVA之旅将继续进行„„第二篇:Java编程语言基础总结
第三篇:关于Java不适做主要编程教学语言
第四篇:JAVA面试题
第五篇:JAVA编程心得体会