java中阶测试题

1、Java中的两种异常类型是什么?他们有什么区别?

  • 两种类型分别是:受检查异常(checked)和不受检查异常(unchecked)
  • 两者的区别:
  • 不受检查的异常:不需要在方法和构造函数上进行声明异常。如果在方法或者构造函数的执行上抛出异常,不受检查的异常也可以传播到方法和构造函数的外边
  • 受检查的异常:必须要用到throws语句,在方法或者构造函数上声明异常。

2、abstract class和interface有什么区别?

  1. 抽象类和接口都不能被实例化。要想实例化,需要指向实现所有抽象方法或者接口方法的子类对象或者类对象。
  2. 抽象类和接口的方法,必须被子类或者类全部实现,如果没有该类只能是抽象类
  3. 抽象类是被子类继承,接口是被类实现。
  4. 接口只能做方法申明;抽象类中可以做方法申明,也可以做方法实现。
  5. 接口内的变量只能为公共的静态常量。抽象类的变量没有具体要求。
  6. 接口方法只能申明,不能实现,接口是设计的结果,抽象类是重构的结果。
  7. 抽象类可以没有抽象方法。
  8. 如果一个类有抽象方法,这个类只能为抽象类
  9. 抽象方法要被实现,不能是静态和私有的。
  10. 接口可以继承接口,并且可以多继承接口,但类只能单根继承。

3、int 和 Integer 有什么区别

java 提供了两种不同的类型:引用类型和原始类型(内置类类型)

  1. Int是java的原始数据类型(基本数据类型),Integer是java为int提供的封装类。(包装类)
  2. Interger变量必须实例化才能够使用,而变量不需要。
  3. Interger实际上是对象的引用,使用的时候会创建一个对象,通过指针指向该对象;而int直接存储数据。
  4. Interger的默认值为null,int的默认值为0.

4、阐述静态变量和实例变量的区别?

  1. 语法上: 静态变量需要static修饰,实例变量不需要。
  2. 静态变量从属于类,实例对象从属于对象
  3. 实例变量必须创建实例对象后,才会被分配空间,才能够使用。
  4. 静态变量也为类变量,只要程序运行,生成类的字节码,就会被分配空间,就可以使用。
  5. 实例变量必须创建对象后,通过这个对象来使用;静态变量直接类名来引用。

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

  • Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。(这个观点,个人认为是有所缺失的。应该是采用equals方法进行区别的)
  • equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。
  • equals()方法时判断的仅仅是两个值是否相同,不牵涉内存地址。
  • ==操作符专门用来比较两个变量的值是否相等,也就是比较值的相同和内存地址是否一致。

6、异常处理的时候,finally代码块的重要性是什么?

  • 首先: 无论是否抛出异常,finally代码块总是会被执行。
  • 就算是没有catch语句同时又抛出异常的情况下,finally代码块仍然会被执行。
  • finally代码块主要用来释放资源,比如:I/O缓冲区,数据库连接。

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

  • Java虚拟机是一个可以执行Java字节码的虚拟机进程。(Java源文件被编译成能被Java虚拟机执行的字节码文件。)
  • 因为不同的平台装有不同的JVM,它们能够将相同的.class文件,解释成不同平台所需要的机器码。
  • 正是因为有JVM的存在,java被称为平台无关的编程语言。

8、Overload和Override的区别?

  • Override(重写):
  • 重写方法的名字要和被重写的方法名字一样,才能覆盖。
  • 返回值类型需要一致。
  • 子类方法不能抛出比父类方法更多的异常(子类可以不抛出异常)。
  • 被final修饰的方法,不能被重写。
  • 针对于继承来说,父类的方法的修饰符为private,则子类无法进行重写。
  • Overload(重载)
  • 重载的使用需要通过不同的参数个数和参数数据类型,进行区分。具体的有:不同的参数类型,不同的参数个数,不同的参数顺序(参数类型不同)。
  • 不能通过访问权限、返回值类型、抛出异常的不同进行重载。
  • 重载是发生在同一个类中,不同方法之间的现象。

9、什么是值传递和引用传递?

  • 值传递:指的是在方法调用时,传递的参数是按值的拷贝传递。传递的是值的拷贝,不会影响到值的本身。
  • 引用传递:指的是在方法调用时,传递的参数是按引用进行传递,其实传递的是变量所对应的内存空间的地址。进行修改的时候,会影响到值本身。

10、JDK和JRE的区别是什么?

  • JDK:(Java Development Kit)Java 开发工具包。jdk 是整个 Java 开发的核心,它集成了 jre 和一些好用的小工具。
  • JRE:(Java Runtime Environment)Java 运行时环境。它主要包含两个部分,jvm 的标准实现和 Java 的一些基本类库。它相对于 jvm 来说,多出来的是一部分的 Java 类库。

扩增一个JVM

  • JVM :(Java Virtual Machine)Java 虚拟机。它只认识 xxx.class 这种类型的文件,它能够将 class
    文件中的字节码指令进行识别并调用操作系统向上的 API 完成动作。所以说,jvm 是 Java 能够跨平台的核心。

三者的关系:JDK>JRE>JVM。

11、HashMap和Hashtable有什么区别?

  • 相同点:
  • HashMap和Hashtable都实现了Map接口
  • 不同点
  • HashMap允许一个键为null和值是null;而Hashtable不允许键或者值是null。
  • Hashtable是同步的,而HashMap不是。因此,HashMap更适合于单线程环境,而Hashtable适合于多线程环境。
  • Hashtable效率低,安全性高,而HashMap效率高,安全性低。
  • HashMap包含可供应用迭代的键的集合,因此,HashMap是快速失败的。
  • 另一方面,Hashtable提供了对键的列举(Enumeration)。
    一般认为Hashtable是一个遗留的类。

12、throw和throws有什么区别?

  1. throws是声明异常(在方法后边声明),throw是抛出异常(方法体内使用)。
  2. throws出现在方法函数头,throw出现在函数体
  3. throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常对象。
  4. 两者都是消极处理异常的方式(这里的消极并不是说这种方式不好),只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。(仅仅是抛出异常,并不会去处理)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值