JavaSE面试题(五)

==和equals的区别和联系

==

a)    基本类型,比较的是值

b)   引用类型,比较的是地址

c)    不能比较没有父子关系的两个对象

equals()

a)    系统类一般已经覆盖了equals(),比较的是内容。

b)   用户自定义类如果没有覆盖equals(),将调用父类的equals(比如是Object),而Object的equals的比较是地址(return (this == obj);)

c)    用户自定义类需要覆盖父类的equals()

注意:Object的==和equals比较的都是地址,作用相同

多态的技能点(前提条件,向上转型、向下转型)

实现多态的三个条件:

继承,子类重写父类方法,父类引用指向子类对象

向上转型:父类引用指向子类对象,自动转型。

通过父类引用变量调用的方法是子类覆盖或继承父类的方法,而不是父类的方法

通过父类引用变量无法调用子类特有的方法

向下转型:子类对象赋值给另一个子类的引用,强制转型

向下转型必须转换为父类引用指向的真实子类类型

向下转型时可以结合使用instanceof运算符进行强制类型转换,比如出现转换异常。

接口和抽象类的异同

抽象类和接口均包含抽象方法,抽象类和接口都不能实例化

两者的区别主要体现在两方面:语法方面和设计理念方面

在语法方面:

接口中只能定义全局静态常量不能定义变量。抽象类中可以定义常量和变量。

接口中所有的方法都是全局抽象方法。抽象类中可以有0个、1个或多个,甚至全部都是抽象方法。

一个类只能有一个直接父类(可以是抽象类),但可以充实实现多个接口

设计理念方面:

抽象类体现了一种继承关系,目的是复用代码,抽象类决定了类的本质是什么

接口决定了存在哪些功能,但并不是直接实现功能。一般和实现类一起组合使用

简述Java的垃圾回收机制

Java语言不需要程序员直接控制内存回收是由JRE在后台自动回收不再使用的内存称为垃圾回收机制。

  1. 可以提高编程效率。
  2. 保护程序的完整性。
  3. 其开销影响性能。Java虚拟机必须跟踪程序中有用的对象,确定哪些是无用的。

垃圾回收机制的特点

  1. 垃圾回收机制回收JVM堆内存里的对象空间,不负责回收栈内存数据。
  2. 对其他物理连接,比如数据库连接、输入流输出流、Socket连接无能为力。
  3. 垃圾回收发生具有不可预知性,程序无法精确控制垃圾回收机制执行。
  4. 可以将对象的引用变量设置为null,暗示垃圾回收机制可以回收该对象。
  5. 现在的JVM有多种垃圾回收实现算法,表现各异。
  6. 垃圾回收机制回收任何对象之前,总会先调用它的finalize方法(如果覆盖该方法,让一个新的引用变量重新引用该对象,则会重新激活对象)。
  7. 程序员可以通过System.gc()或者Runtime.getRuntime().gc()来通知系统进行垃圾回收,会有一些效果,但是系统是否进行垃圾回收依然不确定。
  8. 永远不要主动调用某个对象的finalize方法,应该交给垃圾回收机制调用。

Error和Exception的区别

Error仅靠程序本身无法恢复的严重错误,比如说内存溢出、动态链接异常、虚拟机错误。

发生Error我们只能尽可能的安全退出程序,别无他法。

Exception是Java应用程序抛出和处理的非严重错误,比如所需文件没有找到、零作除数,数组下标越界等。可分为两类:Checked异常和Runtime异常

Checked异常和Runtime异常

Runtime异常是运行时异常,不要求程序必须对它们作出处理。

比如输入不匹配InputMismatchException、ArithmeticException、空指针NullPointerException等。

即使没有使用try-catch或throws进行处理,仍旧可以进行编译和运行。

如果运行时发生异常,会输出异常的堆栈信息并中止程序执行

Checked异常是检查异常,除了运行时异常外的其他异常类都是Checked异常。

程序必须捕获或者声明抛出这种异常,否则出现编译错误,无法通过编译。

处理方式包括两种:

通过try-catch捕获异常,通过throws声明抛出异常从而交给上一级调用方法处理。

异常处理中throws和throw的区别

作用不同:throw是程序员手动生成的异常,用于提醒和放大异常。Throw是在声明的方法内抛出异常

位置不同:throw位于方法体的内部,可以单独使用,throws必须跟在方法参数后面,不能单独使用

内容不同:throw声明一个异常,而throws可以抛出一个或多个异常

为什么引入包装类?

基本数据类型不符合面向对象的思想

集合中的元素只能是Object

JDK1.5提供了自动装箱和自动拆箱的功能,从而实现了包装类到基本数据类型的转换

包装类还可以实现基本类型变量和字符串之间的转换:

“基本类型变量------------String.valueof()------------>字符串”

Int和Intager的区别

int是java提供的8种原始数据类型之一。

Java为每个原始类型提供了封装类,Integer是java为int提供的封装类。

int的默认值为0,Integer的默认值为null

Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值