java面试经典题目(java面试题详解)

如题所述

Java基础面试题都有哪些?

1.java异常机制的原理与应用\x0d\x0a答:每当程序出现异常之后,如果程序没有进行相应的处理,则程序会出现中断现象。手镇\x0d\x0a实际上,产生了异常之后,JVM会抛出一个异常类的实例化对象,如果此时使用了try语句捕获的话,则可以进行异常的处理,否则,交给JVM进行处理。当try语句捕获异常之后,将与catch语句的异常类型进行匹配,如果匹配成功则执行catch内的语句。简单的应用:在所以throws语句的地方加入try-catch。标准应用:try-catch-finally-throw-throws一起使用。\x0d\x0a\x0d\x0a2.垃圾回收机制的优点\x0d\x0a答:释放无用的对象所占用的空间。方式:自动回收,手动回收。使用System.gc(),实际上调用Runtime.getRuntime().gc()\x0d\x0a\x0d\x0a3.Error与Exception区别\x0d\x0a答:Error是jvm进行处理,是jvm出错\x0d\x0aexception是可以由程序处理的,可以用try-catch捕获的\x0d\x0a\x0d\x0a4.final,finally,finallize\x0d\x0a答:final定义的变量的值不能改变,定义的方法不能被覆盖,定义的类不能被继承\x0d\x0afinally是异常的统一出口,finallize是垃圾回收前的收尾工作,是Object类定义的\x0d\x0a\x0d\x0a5.AnonymousInnerClass是否可以extends,是否可以implementsInterface\x0d\x0a答:允许继承和实现,因为匿名内部类就是在抽象类和接口的基础上发展起来的\x0d\x0a\x0d\x0a6.StaticNestedClass与InnerClass的区别\x0d\x0a答:使用Static定义的Class就是外部类,可以通过外部类.内部类直接访问\x0d\x0a而InnerClass是不能被外部访问的,只能通过外部类的实例再找到内部类实例。\x0d\x0a\x0d\x0a7.HashMapandHashTable?\x0d\x0a答:HashMap:1)releasedinjdk1.2,newClass2)采用异步处理方式,性能较高,是非线程安全的3)允许null\x0d\x0aHashTable:\x0d\x0a1)releasedinjdk1.0,oldClass\x0d\x0a2)采用同步处友带理方式,性能低,是线程安全的\x0d\x0a3)不允许null\x0d\x0a\x0d\x0a8.assert代表什么?\x0d\x0a答:asserts是jdk1.4之后发布的新关键字,表示断言,即程序执行到某个地方肯定是预计的值,一般开发很少使用。要使用assert,必须加上-ea参数\x0d\x0a\x0d\x0a9.gc是什么?\x0d\x0a答:gc是garbagecollection,垃圾回收,使用gc可以进行垃圾空间的释放\x0d\x0a\x0d\x0a10.Strings=newString("xyz")产生了几个对象?\x0d\x0a答:一个匿名对象xyz,在栈空间内。一个new实例化的对象,在堆空间内。\x0d\x0a\x0d\x0a11.sleep()andwait()?\x0d\x0a答:sleep()是Thread类定义方法,表示线程的休眠,可以自动唤醒\x0d\x0await()方法是Object类定义的方法,需要手动notify()和notifyAll()//sleep()不释放资源,wait()释放资源\x0d\x0a\x0d\x0a12.Overload与Override的区别\x0d\x0a答:Overload:重载\x0d\x0a|-在一个类中定义的若干方法\x0d\x0a|-所有的方法名相同,但参数类型或个数不同\x0d\x0a|-只有参数有关,与返回类型无关\x0d\x0aOverride:覆写\x0d\x0a|-在继承的关系中\x0d\x0a|-子类定义了父类同好薯芦名的方法,参数类型或个数最好完全一样。\x0d\x0a|-访问权限不能更严格\x0d\x0a\x0d\x0a13.abstractclass和interface有什么区别?\x0d\x0a答:抽象类:\x0d\x0a|-由抽象方法和常量、变量、全局常量、构造方法、普通方法组成\x0d\x0a|-使用abstract声明\x0d\x0a|-子类要通过extends继承抽象类,子类如果不是抽象类,则必须覆写抽象类的全部抽象方法\x0d\x0a|-存在单继承的局限\x0d\x0a|-抽象类可以实现若干个接口\x0d\x0a接口:\x0d\x0a|-由抽象方法和全局常量组成\x0d\x0a|-使用interface关键字\x0d\x0a|-子类要通过implements实现接口,子类如果不是抽象类,则必须覆写抽象类的全部抽象方法\x0d\x0a|-一个子类可以实现多个接口\x0d\x0a|-接口不能继承一个抽象类,但允许继承多个接口

java开发面试题

结果如下,写的有些复杂了

private?static?ListTray?mergeTrays(ListTray?list)?{

????????MapInteger,?ListGoods?trayMap?=?new?HashMap();

????????ListTray?newTray?=?new?ArrayList();

????????for?(Tray?tray?:?list)?{

????????????int?id?=?tray.id;

????????????ListGoods?goods?=?tray.goods;

????????????if?(trayMap.containsKey(id))?{

????????????????//?将相同托盘id的商品放在一起

????????????????ListGoods?tempGoods?=?trayMap.get(id);

????????????????for?(int?i?=?0;?i??goods.size();?i++)?{

????????????????????tempGoods.add(goods.get(i));

????????????????}

????????????????trayMap.put(id,?tempGoods);

????????????}else{

????????????????trayMap.put(id,?goods);

???举渣?????????}

????????}

????????for?(Map.EntryInteger,?ListGoods?entry?:?trayMap.entrySet())?{

????????????int?id?=?entry.getKey();

????????????ListGoods?goods?=?entry.getValue();

????????????MapInteger,?Integer?goodsMap?=?new?HashMap();

????????????for?(int?i?=?0;?i??goods.size();?i++)?{

????????????????Goods?good?=?goods.get(i);

????????????????if?(goodsMap.containsKey(good.id))?{

????????????????????goodsMap.put(good.id,?goodsMap.get(good.id)?+?good.count);

????????????????}else{

????????????????????goodsMap.put(good.id,?good.count);

????????????????}

????????????}

????????????ListGoods?newGoods?=?new?ArrayList();

????????????for?(Map.EntryInteger,?Integer?goodEntry?:?goodsMap.entrySet())?{

????????????????Goods?good?=?new?Goods();

???塌局?????????????good.id?=?goodEntry.getKey();

????????????????good.count?=?goodEntry.getValue();

????????????????newGoods.add(good);

????????????}

????????????正衫悄Tray?tray?=?new?Tray();

????????????tray.id?=?id;

????????????tray.goods?=?newGoods;

????????????newTray.add(tray);

????????}

????????return?newTray;

????}

java基础面试题有哪些?

下面是10道java基础面试题,后附答案

1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?

Java虚拟机是一粗姿个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。

Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。

2.“static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?

“static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。

Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。static方法跟类的任何实例都不相关,所以概念上不适用。

3.JDK和JRE的区别是什么?

Java运行时环境(JRE)是将要执行Java程序的Java虚拟机。它同时也包含了执行applet需要的浏览器插件。Java开发工具包(JDK)是完整的Java软件开发包,包含了JRE,编译器和其他的工具(比如:JavaDoc,Java调试器),可以让开发者开发、编译、执行Java应用程序。

4.是否可以在static环境中访问非static变量?

static变量在Java中是属于类的,它在所有的实例中的值槐清是一样的。当类被Java虚拟机载入的时候,会对static变量进行初始化。如果你的代码尝试不用实例来访问非static的变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。

5.Java支持的数据类型有哪些?什么是自动拆装箱?

Java语言支持的8中基本数据类型是:

?byte

?short

?int

?long

?float

?double

?boolean

?char

自动装箱是Java编译器在基本数据类型和对应的对象包装类型之间做的一个转化。比如:把int转化成Integer,double转化成double,等等。反之就是自动拆箱。

6.Java支持多继承么?

不支持,Java不支持多继承。每个类都只能继承一个类,但是可以实现多个接口。

7.Java中,什么是构造函数?什么是构造函数重载?什么是复制构造函数?

当新对象被创建的时候,构造函数会被调用。每一个类都有构造函数。在程序员没有给类提供构造函数的情况下,Java编译器会为这个类创建一个默认的构造函数。

Java中构造函数重载和方法重载很相似。可以为一铅凳前个类创建多个构造函数。每一个构造函数必须有它自己唯一的参数列表。

Java不支持像C++中那样的复制构造函数,这个不同点是因为如果你不自己写构造函数的情况下,Java不会创建默认的复制构造函数。

8.Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?

Java中的方法重载发生在同一个类里面两个或者是多个方法的方法名相同但是参数不同的情况。与此相对,方法覆盖是说子类重新定义了父类的方法。方法覆盖必须有相同的方法名,参数列表和返回类型。覆盖者可能不会限制它所覆盖的方法的访问。

9.接口和抽象类的区别是什么?

Java提供和支持创建抽象类和接口。它们的实现有共同点,不同点在于:

?接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。

?类可以实现很多个接口,但是只能继承一个抽象类

?类如果要实现一个接口,它必须要实现接口声明的所有方法。但是,类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。

?抽象类可以在不提供接口方法实现的情况下实现接口。

?Java接口中声明的变量默认都是final的。抽象类可以包含非final的变量。

?Java接口中的成员函数默认是public的。抽象类的成员函数可以是private,protected或者是public。

?接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含main方法的话是可以被调用的。

10.什么是值传递和引用传递?

对象被值传递,意味着传递了对象的一个副本。因此,就算是改变了对象副本,也不会影响源对象的值。

对象被引用传递,意味着传递的并不是实际的对象,而是对象的引用。因此,外部对引用对象所做的改变会反映到所有的对象上。

最后祝你面试顺利!

温馨提示:答案为网友推荐,仅供参考
相似回答
大家正在搜