网易首页 > 网易号 > 正文 申请入驻

Java面试题36-45

0
分享至

36、数组有没有length()这个方法? String有没有length()这个方法?

数组没有length()这个方法,有length的属性。String有有length()这个方法。

37、下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d";

答:对于如下代码:

String s1 = "a";

String s2 = s1+ "b";

String s3 = "a" + "b";

System.out.println(s2== "ab");

System.out.println(s3== "ab");

第一条语句打印的结果为false,第二条语句打印的结果为true,这说明javac编译可以对字符串常量直接相加的表达式进行优化,不必要等到运行期去进行加法运算处理,而是在编译时去掉其中的加号,直接将其编译成一个这些常量相连的结果。

题目中的第一行代码被编译器在编译时优化后,相当于直接定义了一个”abcd”的字符串,所以,上面的代码应该只创建了一个String对象。写如下两行代码,

String s = "a" + "b" + "c" + "d";

System.out.println(s == "abcd");

最终打印的结果应该为true。

38、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

也许你的答案是在return之前,但往更细地说,我的答案是在return中间执行,请看下面程序代码的运行结果:

publicclassTest {

* @paramargs add by zxx ,Dec 9, 2008

publicstaticvoidmain(String[] args) {

// TODOAuto-generated method stub

System.out.println(newTest().test());;

static inttest()

intx= 1;

try

returnx;

finally

---------执行结果 ---------

1

运行结果是1,为什么呢?主函数调用子函数并得到结果的过程,好比主函数准备一个空罐子,当子函数要返回结果时,先把结果放在罐子里,然后再将程序逻辑返回到主函数。所谓返回,就是子函数说,我不运行了,你主函数继续运行吧,这没什么结果可言,结果是在说这话之前放进罐子里的。

39、下面的程序代码输出的结果是多少?

public class smallT

public static void main(String args[])

smallT t = new smallT();

int b = t.get();

System.out.println(b);

public int get()

try

return 1;

finally

return 2;

返回的结果是2。

我可以通过下面一个例子程序来帮助我解释这个答案,从下面例子的运行结果中可以发现,try中的return语句调用的函数先于finally中调用的函数执行,也就是说return语句先执行,finally语句后执行,所以,返回的结果是2。Return并不是让函数马上返回,而是return语句执行后,将把返回结果放置进函数栈中,此时函数并不是马上返回,它要执行finally语句后才真正开始返回。

在讲解答案时可以用下面的程序来帮助分析:

publicclassTest {

* @paramargs add by zxx ,Dec 9, 2008

publicstaticvoidmain(String[] args) {

// TODOAuto-generated method stub

System.out.println(newTest().test());;

inttest()

try

returnfunc1();

finally

returnfunc2();

intfunc1()

System.out.println("func1");

return1;

intfunc2()

System.out.println("func2");

return2;

-----------执行结果-----------------

func1

func2

2

结论:finally中的代码比return 和break语句后执行

类似问题:

package tt;

public class Test {

int a = 1;

int b = 2;

* @param args add by zxx ,Dec 9, 2008

public static void main(String[] args) {

// TODO Auto-generated method stub

System.out.println(new Test().test());;

int test()

try

return func1();

finally

func2();

int func1()

System.out.println("func1");

return a;

void func2()

//System.out.println("func2");

//return b;

a = 10;

执行结果

func1

1

40、final, finally, finalize的区别。

final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

内部类要访问局部变量,局部变量必须定义成final类型,例如,一段代码……

finally是异常处理语句结构的一部分,表示总是执行。

finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。JVM不保证此方法总被调用

41、运行时异常与一般异常有何异同?

异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。

42、error和exception有什么区别?

error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。 exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

43、Java中的异常处理机制的简单原理和应用。

异常是指java程序运行时(非编译)所发生的非正常情况或错误,与现实生活中的事件很相似,现实生活中的事件可以包含事件发生的时间、地点、人物、情节等信息,可以用一个对象来表示,Java使用面向对象的方式来处理异常,它把程序中发生的每个异常也都分别封装到一个对象来表示的,该对象中包含有异常的信息。

Java对异常进行了分类,不同类型的异常分别用不同的Java类表示,所有异常的根类为java.lang.Throwable,Throwable下面又派生了两个子类:Error和Exception,Error 表示应用程序本身无法克服和恢复的一种严重问题,程序只有死的份了,例如,说内存溢出和线程死锁等系统问题。Exception表示程序还能够克服和恢复的问题,其中又分为系统异常和普通异常,系统异常是软件本身缺陷所导致的问题,也就是软件开发人员考虑不周所导致的问题,软件使用者无法克服和恢复这种问题,但在这种问题下还可以让软件系统继续运行或者让软件死掉,例如,数组脚本越界(ArrayIndexOutOfBoundsException),空指针异常(NullPointerException)、类转换异常(ClassCastException);普通异常是运行环境的变化或异常所导致的问题,是用户能够克服的问题,例如,网络断线,硬盘空间不够,发生这样的异常后,程序不应该死掉。

java为系统异常和普通异常提供了不同的解决方案,编译器强制普通异常必须try..catch处理或用throws声明继续抛给上层调用方法处理,所以普通异常也称为checked异常,而系统异常可以处理也可以不处理,所以,编译器不强制用try..catch处理或用throws声明,所以系统异常也称为unchecked异常。

提示答题者:就按照三个级别去思考:虚拟机必须宕机的错误,程序可以死掉也可以不死掉的错误,程序不应该死掉的错误;

44、请写出你最常见到的5个runtime exception。

这道题主要考你的代码量到底多大,如果你长期写代码的,应该经常都看到过一些系统方面的异常,你不一定真要回答出5个具体的系统异常,但你要能够说出什么是系统异常,以及几个系统异常就可以了,当然,这些异常完全用其英文名称来写是最好的,如果实在写不出,那就用中文吧,有总比没有强!

所谓系统异常,就是…..,它们都是RuntimeException的子类,在jdk doc中查RuntimeException类,就可以看到其所有的子类列表,也就是看到了所有的系统异常。我比较有印象的系统异常有:NullPointerException、ArrayIndexOutOfBoundsException、ClassCastException。

45、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?

java5以前,有如下两种:

第一种:

new Thread(){}.start();这表示调用Thread子类对象的run方法,new Thread(){}表示一个Thread的匿名子类的实例对象,子类加上run方法后的代码如下:

new Thread(){

public void run(){

}.start();

第二种:

new Thread(new Runnable(){}).start();这表示调用Thread对象接受的Runnable对象的run方法,new Runnable(){}表示一个Runnable的匿名子类的实例对象,runnable的子类加上run方法后的代码如下:

new Thread(new Runnable(){

public void run(){

).start();

从java5开始,还有如下一些线程池创建多线程的方式:

ExecutorService pool = Executors.newFixedThreadPool(3)

for(int i=0;i<10;i++)

pool.execute(new Runable(){public void run(){}});

Executors.newCachedThreadPool().execute(new Runable(){public void run(){}});

Executors.newSingleThreadExecutor().execute(new Runable(){public void run(){}});

有两种实现方法,分别使用new Thread()和new Thread(runnable)形式,第一种直接调用thread的run方法,所以,我们往往使用Thread子类,即new SubThread()。第二种调用runnable的run方法。

有两种实现方法,分别是继承Thread类与实现Runnable接口

用synchronized关键字修饰同步方法

反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出真正的问题所在。suspend()方法容易发生死锁。调用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除非被"挂起"的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定的资源,就会造成死锁。所以不应该使用suspend(),而应在自己的Thread类中置入一个标志,指出线程应该活动还是挂起。若标志指出线程应该挂起,便用wait()命其进入等待状态。若标志指出线程应当恢复,则用一个notify()重新启动线程。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
心酸!吴柳芳身高1米5 恋爱不顺+工作不稳定 被训诫后删跳舞视频

心酸!吴柳芳身高1米5 恋爱不顺+工作不稳定 被训诫后删跳舞视频

念洲
2024-11-26 19:43:33
每个怕冷的人,都建议穿上它,太暖了!(不是秋裤)

每个怕冷的人,都建议穿上它,太暖了!(不是秋裤)

丁香生活研究所
2024-11-28 12:14:36
英国一母亲把女儿藏抽屉养到3岁,女孩无法爬行、走路、说话、身体畸形

英国一母亲把女儿藏抽屉养到3岁,女孩无法爬行、走路、说话、身体畸形

观威海
2024-11-27 23:01:31
新《奔跑吧》最无聊的3位嘉宾,无趣、无梗、惹人厌,不要再来了

新《奔跑吧》最无聊的3位嘉宾,无趣、无梗、惹人厌,不要再来了

八卦南风
2024-11-27 16:12:31
未来两个月,走鸿运、赚大钱的4大生肖,横财到手,富贵加身,钱途越走越宽,存款天天见涨!

未来两个月,走鸿运、赚大钱的4大生肖,横财到手,富贵加身,钱途越走越宽,存款天天见涨!

老六师傅
2024-11-28 19:51:43
外交部:一些政治势力编造涉疆谎言的目的就是要搞乱新疆

外交部:一些政治势力编造涉疆谎言的目的就是要搞乱新疆

人民资讯
2024-11-28 21:40:39
省部级高干在中央党报公开表达“不满”:我困惑很久,不吐不快!

省部级高干在中央党报公开表达“不满”:我困惑很久,不吐不快!

趣说世界哈
2024-11-25 00:15:02
谈判11轮仍无结果!我国苏岩礁被韩国非法占领,究竟有多重要?

谈判11轮仍无结果!我国苏岩礁被韩国非法占领,究竟有多重要?

山海公子
2024-11-24 15:34:47
年旅客吞吐量突破8000万人次!成都跻身“全球航空大都市二十强”

年旅客吞吐量突破8000万人次!成都跻身“全球航空大都市二十强”

红星新闻
2024-11-28 10:52:17
小S首谈跟许雅钧开放性关系:只要不再有一个小孩,惨遭对方拒绝!

小S首谈跟许雅钧开放性关系:只要不再有一个小孩,惨遭对方拒绝!

圈里的甜橙子
2024-11-28 08:37:13
梅西出局后,MLS和苹果都慌了

梅西出局后,MLS和苹果都慌了

体育产业生态圈
2024-11-28 20:33:39
40岁保姆色诱70岁教授,“性猝死”背后真相是如何露馅的?

40岁保姆色诱70岁教授,“性猝死”背后真相是如何露馅的?

苏大强专栏
2024-07-26 11:50:51
美国大祸临头了!特朗普对华打响“第一枪”?出人意料的事情发生

美国大祸临头了!特朗普对华打响“第一枪”?出人意料的事情发生

老妖的针见
2024-11-29 02:50:02
入渝5年,“75后”姜国杰晋升副部级

入渝5年,“75后”姜国杰晋升副部级

鲁中晨报
2024-11-28 20:56:11
224秒16枚导弹窜出水面!向世界发出警告,美直呼堪比末日降临

224秒16枚导弹窜出水面!向世界发出警告,美直呼堪比末日降临

小胡军事爱好
2024-11-26 21:10:28
经济最强地级市,迎来最年轻副市长,“85后”政坛崭露头角

经济最强地级市,迎来最年轻副市长,“85后”政坛崭露头角

南方都市报
2024-11-27 22:15:07
中国终于取消铜材、铝材等59种产品的出口退税了!这下解脱了!

中国终于取消铜材、铝材等59种产品的出口退税了!这下解脱了!

小企鹅侃世界
2024-11-28 13:38:49
真正见过世面的女人,身上会有这3句话,很厉害

真正见过世面的女人,身上会有这3句话,很厉害

知和大叔
2024-11-28 23:48:18
怀疑巴铁有内鬼,“勇士-8”演习刚开始就被袭击 。

怀疑巴铁有内鬼,“勇士-8”演习刚开始就被袭击 。

星辰故事屋
2024-11-27 12:18:18
金氏家族执政80年,为何期间无人反对,相反深受民众爱戴?

金氏家族执政80年,为何期间无人反对,相反深受民众爱戴?

寒武纪历史
2024-11-23 18:31:16
2024-11-29 04:12:49
沈阳爱尚优才IT培养基地
沈阳爱尚优才IT培养基地
专注Java、Python、UI设计、视频剪辑、新媒体运营培训等IT方向。
272文章数 2关注度
往期回顾 全部

科技要闻

讽刺谁?特斯拉称供应链付款周期缩至90天

头条要闻

大众宣布将出售其在新疆的业务 外交部回应

头条要闻

大众宣布将出售其在新疆的业务 外交部回应

体育要闻

道心破碎的姆巴佩,交出一张负分答卷

娱乐要闻

冯绍峰新恋情曝出!女方第一时间发文辟谣

财经要闻

洪灏:不要误解增量政策 不是数越大越好

汽车要闻

ID. CODE概念车/探岳L领衔 大众汽车携25款车亮相

态度原创

家居
健康
游戏
艺术
公开课

家居要闻

简约大气风格 舒适通透空间

花18万治疗阿尔茨海默病,值不值?

《小丑牌》登Steam Deck榜单第四!紧随星露谷

艺术要闻

故宫珍藏的墨迹《十七帖》,比拓本更精良,这才是地道的魏晋写法

公开课

一块玻璃,如何改变人类世界?

无障碍浏览 进入关怀版