javaSE面试题01

什么是面向对象?谈谈你对面向对象的理解

对比面向过程,是两种不同的处理问题的角度

面向过程更加注重事情的步骤及顺序,面向对象更加注重事情的有哪些参与者,各自需要做什么事

面向对象有三大特性:

封装:封装的意义在于明确标识出允许外部进行访问的方法和属性。内部实现对外部透明,外部无需关心内部实现。

继承:继承基类的方法,并做出自己的改变或扩展。子类共性的方法或者属性直接使用父类的,而不需要自己在定义,只需要扩展自己的个性化。

多态:基于对象所属类的不同,外部对同一个方法的调用,实际执行的逻辑不同。

JDK、JRE、JVM三者的区别与联系。

JDK:java开发工具

JRE:java运行时环境

JVM:java虚拟机

JDK包含了JRE,JRE包含了JVM。

也就是说如果想要进行java开发,必须安装jdk。如果只需要运行java代码,那么可以只安装jre。

而jvm适应多个操作系统,使java程序能够一处编译,多处运行。

==与equals的区别

==:

==比较的是栈中的值,也就是说对于基本数据类型跟引用数据类型==比较的是不一样的

基本数据类型:比较的是值

引用数据类型:比较的是引用

equals:

euqals在Object类中默认是采用==进行比较,但是由于多个类将equals方法进行了重写使其比较的是值。例如:String

 注意:str1这样声明的字符串会在堆的常量池中进行内存分配的

final的作用

意思:最终的

  • 修饰类:表示类不可以被继承
  • 修饰方法:表示方法不可以被重写,但是可以重载
  • 修饰变量:表示变量一旦赋值就不可以更改它的值

String、StringBuilder、StringBuffer的区别及使用场景

  • String:是final修饰的,不可变的,每次操作都会生成新的String对象
  • StringBuffer、StringBuilder:都是可以在原对象上进行操作的
  • StringBuffer:是Synchronized修饰的,是线程安全的
  • StringBuilder:不是线程安全的

场景:

在经常需要改变字符串内容时使用StringBuffer与StringBuilder

优先使用StringBuilder,多线程使用共享变量时使用StringBuffer

重载和重写的区别

  • 重载:在同一个类中,方法名相同,参数列表不同(类型,个数,顺序),方法返回值和访问修饰符可以不同。
  • 重写:在父子类中,子类重写父类方法。方法名与参数列表均相同。访问修饰符类型大于等于父类,返回值范围小于等于父类,抛出异常范围小于等于父类。如果父类访问修饰符类型为private则子类不能重写该方法。

接口和抽象类的区别

  •  方法:抽象类可以存在普通成员函数,接口中的函数都是抽象的
  •  变量:抽象类中的成员变量可以是各种类型的,接口中的成员变量只能是常量
  •  继承:抽象类只能继承一个,接口可以实现多个

List和Set的区别

  • List是有序可重复的,可以存在多个NULL对象。可以通过迭代器(Iterator)取出所有元素,再进行逐一遍历,还可以使用get(int index)方法获取指定下标的元素
  • Set集合是无序不可重复的,只允许有一个NULL对象。获取元素时只能使用迭代器(Iterator)接口获取所有元素在进行遍历。

hashcode相同则equals也一定为true吗?

     不对。

  • hashcode相同说的是hash表中的两个键值对的哈希值相等。然后哈希值相等不一定键值对相等
  • equals的比较方法往往是由程序员来决定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值