java笔试一下程序exception_java笔试面试题

一、匿名内部类是否可以继承其它类,是否可以实现接口?

匿名内部类:

1.匿名内部类其实就是内部类的简写格式。

2.定义匿名内部类的前提:内部类必须是继承一个抽象类或者实现接口。只要一个类是抽象的或是一个接口,那么其子类中的方 法都可以使用匿名内部类来实现

3.匿名内部类的格式: new 父类或者接口(){定义子类的内容}

4.其实匿名内部类就是一个匿名子类对象。而且这个对象有点胖。可以理解为带内容的对象。

5.匿名内部类中定义的方法最好不要超过3个。

二、静态嵌套类和内部类的不同点

①. 什么是嵌套类及内部类?

可以在一个类的内部定义另一个类, 这种类称为嵌套类(nested classes),它有两种类型:

静态嵌套类和非静态嵌套类.静态嵌套类使用很少, 最重要的是非静态嵌套类, 也即是被称作为

内部类(inner).嵌套类从JDK1.1开始引入.其中inner类又可分为三种:

(1) 在一个类(外部类)中直接定义的内部类;

(2) 在一个方法(外部类的方法)中定义的内部类;

(3) 匿名内部类.

static nested class 指静态嵌套类,或称嵌套类,是C++中常用的说法,inner class指内部类,是JAVA中的说法.

内部类是一个类内部类的统称,具体分为四种:成员类,静态成 员类,局部类,匿名类.其中匿名类是局部类的特殊情况.对于成员类和静态成员类都存在于类的顶层代码中,相当于类的静态方法和非静态方法的关系,区别在于 成员类依赖于类实例而静态成员类不依赖.所以前者只能访问实例方法和成员而后者只能访问静态方法和成员.它们都用于创建一个只和当前类有关,和其它类无关 的依赖类.是否静态取决于是否依赖类的实例.局部类相当于局部变量,存在于类的局部代码中,相当于在main()中随意定义和使用类,唯一的不同是它只能 使用final型的局部变量,这和垃圾回收机制有关,即局部变量会在代码块结束后被回收,而对象不一定,所以对象只能使用final的局部变量,同样,局 部类存在的局部代码块也可以有静态和非静态的差别.局部类最常见的应用就是匿名类.匿名类就是无名字的局部类,常在SWING设计中的添加监听中出现.

static nested class相当于inner class中的静态成员类.

三、hashmap和hashtable的区别。

常问。

hashmap可以看做是hashtable的替代者。

①HashMap的Value和Key都可为NULL,而HashTable不可以。

②HashTable是线程同步的,而HashMap不是.

③HashTable用Iterator遍历,HashMap用Enumeration遍历.

④HashTable 中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。

⑤计算index的方法不同,HashTable直接利用hashcode()得出,HashMap对hashcode重新计算得出.

四、collection和collections的区别。

collection是集合类的上级接口,子接口有List和Set等,Collections是java.util下的一个工具类,提供一些列静态方法对集合搜索排序线程同步化等.

0818b9ca8b590ca3270a3433284dd417.png

五、什么时候用assert。

api级的技术人员有可能会问这个。

在调试和优化中使用,用于判断逻辑表达式真假,若为假,终止 程序并返回异常.assert比if的优点在于可以选择是否开启assert检查,也就是说assert产生的测试代码可以在正式发布时候选择忽略,这带 来极大便利,默认assert检查是关闭的.此外,Junit相比assert来说,有着相似但更强大的测试能力。

六、gc是什么?为什么要有gc?

基础。

GC 即 garbage collection(垃圾收集),是JAVA用于回收内存的一种方式,主要的实现方法有引用计数,标记回收,复制清除等,GC可以避免内存泄露和堆栈溢出,有效提高内存的利用效率,同时将程序员从繁琐的内存管理中释放出来.

七、string s=new string(“xyz”);创建了几个stringobject?

2个,文字池中1个,堆中1个.先在文字池中创建1个”xyz”对象,再在堆中拷贝一个”xyz”对象,并将其赋给引用s.

八、math.round(11.5)等於多少?math.round(-11.5)等於多少?

Math.round(x)相当于(int)Math.floor(x+0.5f),

故Math.round(11.5)=Math.floor(11.5+0.5)=Math.floor(12)=12;

Math.round(-11.5)=Math.floor(-11)=-11;

九、short s1=1;s1=s1+1;有什么错?short s1=1;s1+=1;有什么错?

s1=s1+1会出错,s1+1是int型,不能将int赋值给s1.需要显示转换,s1=(int)(s1+1).而s1+=1不会出错,至于原因,有人说和编译器的机制有关,需要看编译原理,⊙﹏⊙b汗,话说编译原理什么的最讨厌了,就这样吧.

十、sleep()和wait()有什么区别?

搞线程的最爱。

1,sleep()是java.lang.Thread中的静态方法,wait()是java.lang.Object中的方法

2,sleep()用作当前线程阻塞自己,并在制定时间后恢复,wait()用于当前线程决定其他线程阻塞,是线程通信的表现.

3,sleep()不释放资源,wait()释放资源.

4,sleep()必须捕获异常,而wait()不需要.

十一、java有没有goto?

goto是java的关键字,但java不支持 goto,goto会影响程序的可读性,使逻辑显得混乱.我的这本java教程上说因为同样的原因,要尽量少用continue和break,且可以用等 价的无continue/break循环代替,更不要说goto了…总之一句话,java不支持goto

十二、数组有没有length()这个方法?string有没有length()这个方法?

数组无,数组是成员变量length,String是成员函数length();我不知道这个题意义何在,平时都用eclipse的,会在意这个么…

十三、overload和override的区别。overloaded的方法是否可以改变返回值的类型?

常问。

我写的一篇随笔详细说明了重载,重写和多态之间的关系,返回值类型不包含在函数签名中,所以只有返回值不同的重载不成立.

十四、set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用hashcode()还是equals()?它们有何区别?

这个属于集合类的查找机制问题,在集合类中,确定两个元素是否相同,是用equals方法进行比较,hashcode的存在在于可以给元素快速分配一个index来存储.可以将collection看做很多个大箱子,index是箱子的编号,先将要扔进去的物品进行hash确定index,扔进响应箱子,然后再和箱子里的其它物品equals()来比较是否相同. 此外,相等的物品一定具有相同的hashcode,不等的物品不一定.具有相同hashcode的元素不一定相等.不同的hashcode的元素肯定不等.以上规则可以想象一下相等物品一定要分在同一个箱子中的情况.

十五、给我一个你最常见到的runtimeexception。

如果你这个答不出来,面试的人会认为你没有实际编程经验。

NullPointerException,空引用异常.说实话,中软的笔试题就有这个,我连题目意思都理解错了,压根没认出来runtime exception是指运行时异常.

十六、error和exception有什么区别?

为什么水的题最容易出现?

感觉这个题很水,要说C++的话有区别,感觉JAVA里区别不大.反正中软的题目里我就瞎扯了.单纯从字面的角度去说,error就是严重的错误,像JVM产生的一些错误等,会停止程序运行或产生错误结果.exception是一定程度上可预见的错误,可以捕获以及处理.其实error也可以捕获…

十七、Collection的子接口包括BeanContext, BeanContextServices, BlockingQueue, List, Queue, Set, SortedSet.不包括Map

差点被某网页忽悠了,还是JAVA DOC比较专业.

十八、abstractclass和interface有什么区别?

常问。

真的是常问…在中软笔试题中出现…

抽象类可以有抽象方法和普通方法,也可以有自己的数据成员.接口只允许有常量,抽象方法和静态类成员.接口可以被多继承,抽象类不行.接口被实现时,所有方法必须被重写.抽象类被继承时如果有抽象方法没被重写,则子类也为抽象类.

十九、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

abstact方法需要子类重写,重写的概念是就实例方法而言, 所以不能是static.因为同一原因,要重写就不能native,抽象方法在抽象类中,无实例,不能被调用,也没有内容,所以synchronized 没有意义.abstract方法的修饰符只有private和public

二十、接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承实体类(concreteclass)?

接口可以继承接口,抽象类可以实现接口,抽象类可以继承实体类.换句话说,抽象类除了不能实例化以外和普通类没什么区别.

二十一、启动一个线程是用run()还是start()?

用start(),start()会通过调用run()来实现多进程.

二十二,构造器constructor是否可被override?

构造函数不能被重写.

二十三,是否可以继承string类?

String类为final,不可被继承.

二十四,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

多线程编程涉及不多,运用到锁的更是少的可怜,找到篇关于这个问题很详尽的分析帖,直接将结果拿过来.

1 可以进入此对象其他非同步方法.

2 不可进入此对象此同步方法

3 不可进入此对象其他同步方法

详细分析

见:http://blog.csdn.net/yexianyi/archive/2009/04/26/4125633.aspx

多个线程访问同一个类的synchronized方法时, 都是串行执行的 ! 就算有多个cpu也不例外 ! synchronized方法使用了类java的内置锁, 即锁住的是方法所属对象本身. 同一个锁某个时刻只能被一个执行线程所获取, 因此其他线程都得等待锁的释放. 因此就算你有多余的cpu可以执行, 但是你没有锁, 所以你还是不能进入synchronized方法执行, CPU因此而空闲. 如果某个线程长期持有一个竞争激烈的锁, 那么将导致其他线程都因等待所的释放而被挂起, 从而导致CPU无法得到利用, 系统吞吐量低下. 因此要尽量避免某个线程对锁的长期占有 !

http://www.jianshu.com/p/f23a90a79b3a

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

return前被执行。

二十六,编程题:用最有效率的方法算出2乘以8等於几?

有c背景的程序员特别喜欢问这种问题。

二十七,两个对象值相同(x.equals(y) true),但却可有不同的hashcode,这句话对不对?

这句话本身没有错,equals和hashcode都是 Object的方法,都可以覆盖并由程序员自己决定算法,完全可以做到以上要求,但问题是如果是Collection中的元素,这样做会带来一些错误,一 些不可预知的错误,所以在Collection中这样做是禁止的.

二十八,当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

引用传递,毫无疑问,对象传递只能是引用.你可以换改变引用的内容,但并不能改变引用本身.

二十九,swtich是否能作用在byte上,是否能作用在long上,是否能作用在string上?

switch语句中的表达式只能是整数类型,即必须是int,char或者枚举类型数据.不能是boolean或浮点型,甚至其他类型的整数数据(byte,short及long).

从教材上摘录而来,应该相当权威了.

三十,编程题:写一个singleton出来。 singleton模式即确保一个类只有一个实例.应用级singleton好像比较复杂,但最简单的singleton还是很好实现的.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值