您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 招聘面试 > 经典Java基础面试题精编3篇
精编资料,供您参考经典Java基础面试题精编3篇【前言导读】由三一刀客最美丽的网友为您分享整理的“经典Java基础面试题精编3篇”文档资料,以供您学习参考,希望这篇文档对您有所帮助,喜欢就分享给朋友们呢!经典Java基础面试题1第一,谈谈final,finally,finalize的区别。final?修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载finally?再异常处理时提供finally块来执行任何清除操作。如果抛出一个异常,那么相匹配的catch子句就会执行,然后控制就会进入finally块(如果有的话)。finalize?方法名。Java技术允许使用finalize方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在Object类中定义的,因此所有的类都继承了它。子类覆盖finalize方法以整理系统资源或者执行其他清理工作。finalize方法是在垃圾收集器删除对象之前对这个对象调用的。第二,HashMap和Hashtable的区别。都属于Map接口的类,实现了将惟一键映射到特定的值上。HashMap类没有分类或者排序。它允许一个null键和多个null值。Hashtable类似于HashMap,但是不允许null键和null值。它也比HashMap慢,因为它是同步的。第三,Strings=newString(xyz);创建了几个StringObject?两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。第四,sleep和wait有什么区别?搞线程的最爱sleep方法是使线程停止一段时间的方法。在sleep时间间隔期满后,线程不一定立即恢复执行。这精编资料,供您参考是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级(b)正在运行的线程因为其它原因而阻塞。wait是线程交互时,如果线程对一个同步对象x发出一个wait调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。第五,shorts1=1;s1=s1+1;有什么错?shorts1=1;s1+=1;有什么错?shorts1=1;s1=s1+1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1=(short)(s1+1)。shorts1=1;s1+=1正确。第六,Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。第七,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals?它们有何区别?Set里的元素是不能重复的,那么用iterator方法来区分重复与否。equals是判读两个Set是否相等。equals和==方法决定引用值是否指向同一对象equals在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。第八,error和exception有什么区别?error表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。exception表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。第九,给我一个你最常见到的runtimeexception。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第十,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals?它们有何区别?Set里的元素是不能重复的,那么用iterator方法来区分重复与否。equals是判读两个Set是否相等。equals和==方法决定引用值是否指向同一对象equals在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。经典Java基础面试题21.不用main方法如何定义一个类?不行,没有main方法我们不能运行Java类。在Java7之前,你可以通过使用静态初始化运行Java类。但是,从Java7开始就行不通了。方法需要的参数不是字符串数组?不是的,main方法的参数必须是字符串数组。但是,在引进变参时,你可以将字符串类型的变参作为参数传递给main方法。变参一定得是数组。package;publicclassMainMethod{publicstaticvoidmain(Stringargs[]){}}3.我们能不能改变main方法的返回类型?不能,main方法的返回类型只能是空。任何其它类型都是不能接受的。package;publicclassA{publicstaticintmain(String[]args){return1;//runtimeerror:Nomainmethodfound}}方法为什么必须是静态的?精编资料,供您参考main方法一定是静态的。如果main允许是非静态的,那么在调用main方法时,JVM就得实例化它的类。在实例化时,还得调用类的构造函数。如果这个类的构造函数有参数,那么届时就会出现歧义。例如,在下面的程序中,在实例化类“A”的时候,JVM传递什么参数?package;publicclassA{publicMainMethod(inti){//Constructortakingoneargument}publicvoidmain(String[]args){//mainmethodasnon-static}5.我们能不能声明main方法为非静态?不能,main方法必须声明为静态的,这样JVM才可以调用main方法而无需实例化它的类。如果从main方法去掉“static”这个声明,虽然编译依然可以成功,但在运行时会导致程序失败。package;publicclassA{publicvoidmain(String[]args){(indhu);//Runtimeerror}}6.我们能否重载main方法?可以,我们可以重载main方法。一个Java类可以有任意数量的main方法。为了运行java类,类的main方法应该有例如“publicstaticvoidmain(String[]args)”的声明。如果你对此声明做任何修改,编译也是可以成功的。但是,运行不了Java程序。你会得到运行时错误,因为找不到main方法。package;publicclassA{publicstaticvoidmain(String[]args){(Indhu);}voidmain(intargs){(Sindhu);}longmain(inti,longd){(Saidesh);returnd;}}7.我们能否声明main方法为private或protected,或者不用访问修饰符?不能,main方法必须public。你不能定义main方法为private和protected,也不能不用访问修饰符。这是为了能让JVM访问main方法。如果你不定义main方法为public,虽然编译也会成功,但你会得到运行时错误,因为找不到main方法。package;publicclassA{privatestaticvoidmain(String[]args){//Runtimeerror}}8.我们能否在Java中覆盖main方法?不能,你不能在Java中覆盖main方法。这是因为main方法是静态方法,而在Java中静态方法在编译时会结合在一起,所以你在Java中不能覆盖静态方法。9.我们能否在Java中终结main方法?你可以在Java中终结main方法。JVM对此没问题。精编资料,供您参考10.我们能否在Java中同步main方法?是的,main方法可以在Java中同步,synchronized修饰符允许用于main方法的声明中,这样就可以在Java中同步main方法了。经典Java基础面试题31、如果main方法被声明为private会怎样?能正常编译,但运行的时候会提示”main方法不是public的”。2、Java里的传引用和传值的区别是什么?传引用是指传递的是地址而不是值本身,传值则是传递值的一份拷贝。3、如果要重写一个对象的equals方法,还要考虑什么?hashCode。4、Java的”一次编写,处处运行”是如何实现的?Java程序会被编译成字节码组成的class文件,这些字节码可以运行在任何平台,因此Java是平立的。5、说明一下publicstaticvoidmain(Stringargs[])这段声明里每个关键字的作用。public:main方法是Java程序运行时调用的第一个方法,因此它必须对Java环境可见。所以可见性设置为pulic.static:Java平台调用这个方法时不会创建这个类的一个实例,因此这个方法必须声明为static。void:main方法没有返回值。String是命令行传进参数的类型,args是指命令行传进的字符串数组。6、==与equals的区别==比较两个对象在内存里是不是同一个对象,就是说在内存里的存储位置一致。两个String对象存储的值是一样的,但有可能在内存里存储在不同的地方。==比较的是引用而equals方法比较的是内容。publicbooleanequals(Objectobj)这个方法是由Object对象提供的,可以由子类进行重写。默认的实现只有当对象和自身进行比较时才会返回true,这个时候和==是等价的。String,BitSet,Date,
本文标题:经典Java基础面试题精编3篇
链接地址:https://www.777doc.com/doc-10536117 .html