您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 招聘面试 > java面试题(正确修改版)
1.Java中的异常处理机制的简单原理和应用。当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。所有的异常都是java.lang.Throwable的子类。2.在Java中,以下的异常:java.lang.Excetion,java.lang.RuntimeException,java.lang.Error有什么区别?Error类对象由Java虚拟机生成并抛出,Exception类对象由应用程序处理或抛出error表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。Error表示系统级的错误和程序不必处理的异常,RuntimeException是Exception的子类,一般来说该异常是程序在运行时抛出这种错误编译是无法捕捉的,如果在程序中不加处理,在程序运行就会产生并上缴给JVM处理。异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。Java编译器要求方法必须声明抛出可能发生的非运行时异常同,但是并不要求必须声明抛出未被捕获的运行时异常。exception表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况Exception表示需要捕捉或者需要程序进行处理的异常。3.Java中异常处理机制、事件机制?异常处理机制:Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。这种机制为复杂程序提供了强有力的控制方式。同时这些异常代码与“常规”代码分离,增强了程序的可读性,编写程序时也显得更灵活。异常处理还有一个好处是在你不能确定和处理异常时,你可以不处理,而把问题提交上去。另一方面,异常处理机制便利错误处理代码更有条理,更便于维护。事件机制:事件从事件源到监听者的传递是通过对目标监听者对象的Java方法调用进行的。对每个明确的事件的发生,都相应地定义一个明确的Java方法。这些方法都集中定义在事件监听者(EventListener)接口中,这个接口要继承java.util.EventLlistener。实现了事件监听者接口中一些或全部方法的类就是事件监听者。伴随着事件的发生,相应的状态通常都封装在事件状态对象中,该对象必须继承自java.util.EventObject。事件状态对象作为单参数传递给应响应该事件的监听者方法中。发出某种特定事件的事件源的标识是:遵从规定的设计格式为事件监听者定义注册方法,并接受对指定事件监听者接口实例的引用。有时,事件监听者不能直接实现事件监听者接口,或者还有其它和额外动作时,就要在一个源与其它一个或多个监听者之间插入一个事件适配器类的实例,来建立它们之间的联系。4.运行时异常与一般异常有何异同?异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。5.Java中使用接口比使用继承有那些更多的好处好处。由于Java不支持多继承,而有可能某个类或对象要使用分别在几个类或对象里面的方法或属性,现有的单继承机制就不能满足要求。与继承相比,接口有更高的灵活性,因为接口中没有任何实现代码。当一个类实现了接口以后,该类要实现接口里面所有的方法和属性,并且接口里面的属性在默认状态下面都是publicstatic,所有方法默认情况下是public.一个类可以实现多个接口。6.垃圾回收的优点和原理垃圾回收原理1、垃圾回收器只能回收由new产生的对象,如果你使用或产生了非new产生的对象,垃圾回收器是不知道如何把他清理掉的。这个时候就要使用到finalize()。2、垃圾回收器的运做方式是这样的,当垃圾回收器打算开始释放你的对象所占用的资源时,会先调用finalize(),并且在下一次垃圾回收动作放生的时候才回收该对象所占用的资源,如果使用finalize(),他便会让你得以在垃圾回收的时候执行你自己的清理动作3、finalize()是不会在对象销毁的时候自动唤起的。假设有一个对象在产生的过程中将自己绘制在屏幕之上。你要是没有手动的把他清理掉,那么他永远会在那里,而如果你将清理屏幕的功能放在finalize()之中,那么当这个对象被垃圾回收器回收之前,他在屏幕上的影象会先被清除4、你的对象永远可能都不会被回收,因为你的程序并没有把系统资源占用到需要垃圾回收器出马的状态,你所占用的系统资源会在程序结束运行的时候全部释放,那么你就不用付出垃圾回收器运行的额外系统开支。垃圾回收优点:Java语言中一个显著的特点就是引入了垃圾回收机制,使C++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有作用域的概念,只有对象的引用才有作用域。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。7.请说出你所知道的线程同步的方法。wait():使一个线程处于等待状态,并且释放所持有的对象的lock。sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。8.在java中一个类被声明为final类型,表示了什么意思?表示该类不能被继承9.谈谈final,finally,finalize的区别。final—用于声明属性、方法和类,分别表式属性不可改变,方法不可覆盖,类不可继承。修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。finally—是异常处理语句结构的一部分,表示问题执行。在异常处理时提供finally块来执行任何清除操作。如果抛出一个异常,那么相匹配的catch子句就会执行,然后控制就会进入finally块(如果有的话)。finalize—是Object类的一个方法,在垃圾悼念器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。Object类的一个方法。Java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在Object类中定义的,因此所有的类都继承了它。子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。10.Collection和Collections的区别。Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。Collection是个java.util下的接口,它是各种集合结构的父接口。11.heap和stack有什么区别。栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。堆是栈的一个组成元素12.发送一条邮件的几个步骤创建邮件对象、邮件对象中数据的封装以及邮件发送13.常用的组件技术常用的组件技术:Servlets,JSP,EJB,JDBC,JAVAMAIL,JNDI(名字目录服务),JAXP(解析XML的JAVAAPI)14.如果系统要使用超大整数(超过long长度范围),请你设计一个数据结构来存储这种超大型数字以及设计一种算法来实现超大整数加法运算)。/***超大整数相加:*题目要求:如果系统要使用超大整数(超过long的范围),请你设计一个数据结构来存储这种超大型数字以及设计一种算法来实现超大整数的加法运算*/publicclassVeryBigNumAdd{publicstaticvoidmain(String[]args){VeryBigNumAddvbn=newVeryBigNumAdd();Stringa=123453243455535634535252345234677576252241234123523453664563634;Stringb=123453243455535634535252345234677576252241234123523453664563634;Stringresult=vbn.doAdd(a,b);System.out.println(result:+result);}/****@parama加数字符串1*@paramb加数字符串2*@return结果字符串*分析:*1、取得两个字符串的长度*2、把两个的长度做比较,并得出较长的长度,及较短的长度*3、把长度较短的加数字符串,在左面补0,使之与较长的字符串一样长*4、从最高位,一个个数的取出来相加,当然首先得转换为整型*5、设置进位,如果两个数相加及加上进位大于等于10,并且这不是最左边一个字符相加,相加结果等于*(取出1+取出2+进位)-10,并把进位设为1;如果没有大于10,就把进位设为0,如些循环,把*相加的结果以字符串的形式结合起来,就得到最后的结果*/StringdoAdd(Stringa,Stringb){Stringstr=;intlenA=a.length();intlenB=b.length();intmaxLen=(lenAlenB)?lenA:lenB;intminLen=(lenAlenB)?lenA:lenB;StringstrTmp=;for(inti=maxLen-minLen;i0;i--){strTmp+=0;}//把长度调整到相同if(maxLen==lenA){b=strTmp+b;}elsea=strTmp+a;intJW=0;//进位for(inti=maxLen-1;i=0;i--){inttempA=Integer.parseInt(String.valueOf(a.charAt(i)));inttempB=Integer.parseInt(String.valueOf(b.charAt(i)));inttemp;if(tempA+tempB+JW=10&&i!=0){temp=tempA+tempB+JW-10;JW=1;}else{temp=tempA+tempB+JW;JW=0;}str=String.valueOf(temp)+str;}returnstr;}}15.匿名内部类是否可以做为父类被其它类继承,或是做为接口被实现。匿名内部类不能被继承,也不能被实现,因为它没名字。而一个内部类,只要有名字,就可以做为父类被继承,也可以做为接口被实现。16.静态内部类和内部类的不同。1、静态内部类,它可以不依赖外
本文标题:java面试题(正确修改版)
链接地址:https://www.777doc.com/doc-5352399 .html