专栏首页xingoo, 一个梦想做发明家的程序员【面试虐菜】—— JAVA面试题(3)

【面试虐菜】—— JAVA面试题(3)

1 throws与throw的区别

解析:throws和throw是异常处理时两个常见的关键字,初级程序员常常容易正确理解throw和throws的作用和区别,说明已经能比较深入理解异常处理。Throw用来抛出异常,如果执行了throw语句,程序将发生异常,进入到异常处理机制。Throws用来声明异常,说明这个方法可能会发生某些类型的异常,那么编译器将强制在调用这个方法的时候处理异常。API中的很多方法都使用了throws声明了异常,所以使用这些方法时编译器会提示需要处理异常。   参考答案:throw用来在方法体内抛出异常,而throws用来在方法声明处声明异常。这两个关键字有着一定的联系。如果一个方法中使用了throw关键字抛出了异常,那么要么立即用try/catch语句进行捕获,要么就是用throws进行声明,否则将出现编译错误。然而,  并不是只有使用了throw关键字之后才能使用throws关键字,语法上来说,任何一个方法都可以直接使用throws关键字,抽象方法也可以使用。 

2 collection接口与map接口

解析:Collection和Map是Java集合框架中两个基本集合类型,要区别不同的集合首先要从Collection和Map开始。 

参考答案:Collection接口是传统的集合接口,可以把单个对象存储进来。而Map接口是映射接口,存储的是键值对。 

3 list与set的区别

解析:List和Set是Collection接口的两个子接口,也是使用最多的两种集合类型。程序员应该熟悉这两个接口的基本特征,能够更准确地选择正确的集合类型。  参考答案:List实现了列表类型的集合,List中的元素是有序(ordered)的,每个元素根据放入集合的顺序而对应一个索引值, 可以根据这个索引值返回集合原宿。而Set实现了不重复元素集合,即Set中的元素不能够重复,重复的元素将无法添加到集合中

4 list都有哪些实现

解析:List是用的较多的集合类型,List是一个接口,具体使用List集合类型时,需要使用时实现类。List接口的每个实现类也都实现了不同的数据结构,各自具有不同的特征,其中最常用的是List实现类。

 参考答案:List接口中有以下几个常用实现

1 ArrayList:实现了动态数组的特征。

2 LinkedList: 实现了链表的数据结构,LinkedList也可以用作栈或者队列。

3 Vector:向量。

4 ArrayList  

Vector类的功能 ArrayList都可以实现,区别在于Vector是现行同步的。

5 如何创建线程对象

解析:Java 语言能够支持多线程编程,将线程封装成Thread类型的对象,只要创建Thread类型的对象,就能够便捷地启动线程、执行线程体。程序员首先必须掌握创建线程的常用方法。  参考答案:Java语言中经常使用两种方法创建线程。①创建Thread类的子类,在子类中覆盖Thread类的run方法,实现线程的运行体,只要创建该子类对象就是线程对象。②创建Runable接口的实现类,在实现类中覆盖接口中的run方法,实现线程的运行体。使用Thread(Runable)构造方法可以创建线程对象,参数是Runable接口实现类的实例。

6  什么是泛型,作用?

解析:泛型是JDK5中增加的特性,API中有大量的泛型接口、泛型类及泛型方法等。程序员需要了解泛型的作用,尤其在使用集合框架时,往往需要使用到泛型。  参考答案:泛型的本质就是参数化类型,也就是说把数据类型指定为一个参数。在需要声明数据类型的地方,就可以不指定具体的某个类型,而是使用这个参数。这样一来,就能够在具体使用时再指定具体类型,实现了参数的“任意化”。泛型的好处是在编译的时候能够检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率

7 自动装箱?拆箱?

解析:自动装箱/拆箱指的是八个包装器类与八个基本类型的转换问题。然而。这个特征却需要谨慎使用,因为虽然表面上看起来非常方便,而实质上依然需要创建对象、进行转换等操作,使用不恰当会降低性能。 

参考答案:自动装箱指的是可以直接将基本数据类型转换为包装器类型,自动拆箱指的是可以直接将包装器类型转换为基本数据类型,如下代码所示:

int m=100; 

Integer  im=m; 

int  n=im;  

上诉代码中,直接将m赋值给包装器对象im,这就是自动装箱,然后直接将im赋值给基本数据类型n,这就是自动拆箱。虽然表面上看代码简洁方便,然而本质上装箱时候依然使用new创建了对象,而拆箱时也依然调用了方法进行运算。因此,不要在没有必要的时候,频繁使用装箱拆箱,会降低性能。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【设计模式】—— 创建者模式Builder

      模式意图   一个对象的创建十分复杂,为了区分构建过程和使用过程,因此分开。使用一个Director类进行对象的创建,Builder规定了这个创建过程。 ...

    用户1154259
  • 关于cuda拷贝的速度测试

    由于没有使用profiler,仅仅通过简单的传输函数测试,如下测试了10000个点,1000000个点,100000000个点的速度: 均按时钟周期来计时,通过...

    用户1154259
  • (JAVA版)冒泡排序

    核心代码: public void bubbleSort(){ for(int i=0;i<length-1;i++){ ...

    用户1154259
  • JDK 8 新特性 之 函数接口

    Jacob丶
  • 如果是你,你对信安之路会有哪些期望

    昨天在 信安之路学习交流群 发了一个小调查,来了解大家对于文章的喜好以及对信安之路未来的期望,希望能够尽可能的满足小伙伴的期望,让信安之路走的更远,让更多的小伙...

    信安之路
  • TDD中的T到底是什么Test?

    这次TDD训练营,终于有学员提出了这个问题:“我之前在某个Session中,听说TDD分为ATDD和UTDD,咱们现在做的是UTDD,后面会涉及ATDD?”

    袁慎建@ThoughtWorks
  • 日常踩坑实录

    最近在抓取了几十万条微博数据,目的是对其进行情感分析,这就需要过滤掉内容中表情等特殊符号。在Google了一圈以后,发现很多方法过滤的效果不好,因此自己记录一下...

    GitOPEN
  • ThinkPHP多表查询

    这里有两张关联的表(table1,table2),想要通过其中一张表(table1)查询另外一张表(table2)的详细信息.在tp框架中该如何实现呢?

    仇诺伊
  • Little Tips 记录

    最近在抓取了几十万条微博数据,目的是对其进行情感分析,这就需要过滤掉内容中表情等特殊符号。在Google了一圈以后,发现很多方法过滤的效果不好,因此自己记录一下...

    GitOPEN
  • 设计模式的征途—13.代理(Proxy)模式

    所谓代购,简单说来就是找人帮忙购买所需要的商品。代购分为两种类型,一种是因为在当地买不到某件商品,又或者是因为当地这件商品的价格比其他地区的贵,因此托人在其他地...

    Edison Zhou

扫码关注云+社区

领取腾讯云代金券