2021-07-20----最近看的java面试基础

最近遇到与看到的java面试基础题------以后遇到其他的会继续补充

简单说说Java有哪些数据类型
1、分为基本数据类型和引用数据类型。
基本类型有8个:整数类型 (byte、short、int、long)、浮点数类型 (float、double)、字符型 (char)、布尔类型 (boolean)
引用类型包括三种:类 Class、接口 Interface、数组 Array

基本类型:基本类型值在内存中占据固定大小,保存在栈内存中
引用类型:引用类型的值是对象,保存在堆内存中,而栈内存存储的是对象的变量标识符以及对象在堆内存中的存储地址

关于可变与不可变数据类型
所有基本数据类型与String都是不可变数据类型
引用类型与Stringbuffer为可变数据类型

string类是字符串常量,不可变,stringbuffer是字符串容器,可变
string重写了equals方法,stringbuffer则没有
string之间可以用+来连接,stringbuffer不行

LinkedeList和ArrayList的区别

1、数据结构不同
ArrayList是Array(动态数组)的数据结构,LinkedList是Link(链表)的数据结构。

2、效率不同
当随机访问List(get和set操作)时,ArrayList比LinkedList的效率更高
当对数据进行增加和删除的操作(add和remove操作)时,LinkedList比ArrayList的效率更高

3、自由性不同
ArrayList自由性较低,它需要手动的设置固定大小的容量,而LinkedList自由性较高,动态分配

使用场景:
处理的同类数据的数据量未知时,或者数据量超过静态数组定义范围时,就要用链表
知道同类数据的数量范围且不超过静态内存容许值时用数组

链表不是顺序存储

Array和ArrayList的区别?
①Array长度在定义之后就不运行改变了,而ArrayList是长度可变的,可以自动扩容。
②Array只能存储相同类型的数据,ArrayList可以存储不同类型的数据。
③ArrayList提供了更多操作数据的方法。

iterator接口
主要用于迭代(遍历)访问collection中的元素

set接口与list接口
都继承自collection接口
set接口中元素无序,不重复,list接口元素有序,可重复

map接口
是双列集合,键与值之间有对应关系(只要指定了键就能找到对应的值)

不可变数据类型:当该数据类型对应的变量的值发生了改变,那么它对应的内存地址也发生改变,对于这种数据类型,就称不可变数据类型。
即:原有内存地址中的内容不变,为变化后的值分配了新的内存。
可变数据类型:当该数据类型对应的变量的值发生了改变,那么它对应的内存地址不发生改变,对于这种数据类型,就称之为可变数据类型。
可变数据类型改变时实际上更改了内存中的内容。

float number=3.4;有没有问题?为什么?
有问题,因为3.4 是双精度数,将双精度型(double)赋值给浮点型(float)属于向下转型,可能会造成精度损失,所以必须进行强制类型转换
正确的写法是float number =(float)3.4;或者float number =3.4F;

==和equals有什么区别?equals和hashCode有什么联系?
①如果是引用类型,比较的是两个对象的引用是否完全相同,如果是基本类型,比较的是两个基本类型的数值是否相同。
②如果没有重写的话,equals默认按照
进行比较,如果重写了equals()方法,则按照对应的比较规则比较。
③两个对象如果相等,那么它们的hashCode值必须相等,但两个对象的hashCode值相等时,它们不一定相同。

简述JDK8的新特性
①接口中可以添加default修饰的非抽象方法,可以有方法体和内容。
②可以使用lambda表达式,减少代码量。
③函数式接口,使用@FunctionalInterface注解标明,该接口有且仅有一个抽象方法。
④方法引用,可以直接引用已有Java类或对象的方法或构造器,进一步简化lambda表达式。
⑤stream流,用于解决已有集合/数组类库的弊端,简化其操作,有foreach遍历、filter过滤、map映射、concat合并等功能。
⑥增加日期相关的API。

List、Set、Map有什么区别?
①List是有序、可重复、有索引的集合,可用索引遍历。
②Set是无序,不可重复的集合,Set的实现类LinkedHashSet和TreeSet是有序的。
③Map是无序、以key-value的键值对形式存储元素的集合,键不可重复,值无要求,重复的键对应的值会覆盖之前的值。

简述面向对象的特性

①封装:建议成员变量私有,然后提供公有的getter/setter方法来获取值/赋值,封装的核心思想是合理隐藏,合理暴露,可以提高安全性,实现代码的组件化。
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。

②继承:一种子类到父类的关系,是“is a”关系,可以提高代码的复用性,相同代码可写到父类,子类的功能更加强大,不仅得到了父类的功能,还有自己的功能。
子类可以对父类的方法重写。
java只支持单继承,不支持多重继承(因为若a被b和c继承,且a的方法都被b和c重写,而d同时同时继承了b和c,那么d在继承bc时就会冲突)
但java支持多接口实现
多接口会出现多继承的问题吗
不会,因为接口中的方法是抽象的,就算一个类实现了多个接口,且这些接口中存在某个同名方法,但我们要清楚的知道,这个同名方法最终需要由这个类自己来实现

③多态:同一个类型的对象执行相同的行为,在不同的状态下表现出不同的特征。多态可以降低类之间的耦合度,右边对象可以实现组件化切换,业务功能随之改变,便于扩展和维护。
如Student类继承了Person类,一个Student的对象便既是Student,又是Person。
1.多态体现为父类引用变量可以指向子类对象。
2.前提条件:必须有子父类关系。
3.多态的定义与使用格式
使用方法:父类类型 变量名=new 子类类型();
注意:在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法。
注意:我们不能使用一个子类的引用来指向父类的对象
注意:如果我们在子类中编写一个独有的方法(没有继承父类的方法),此时就不能通过父类的引用创建的子类对象来调用该方法

类和对象有什么区别?
类是一个抽象的概念,是具有相同特征的事物的描述,是对象的模板。对象是一个个具体的存在,是类的实例。

类被final修饰后将无法被继承
方法被final修饰后,该方法将复发被子类重写
变量被final修饰后将无法被修改

列举Object类的方法
equals(Object obj):判断其他对象是否与当前对象相等。
toString():打印当前对象的字符串表示。
wait():导致当前线程等待,等待其他线程唤醒,会释放锁。
notify()/notifyAll():随机唤醒一个/全部线程。
clone():创建并返回对象的一个副本。

方法重载和方法重写的区别?
①方法重载是同一个类中具有不同参数列表的同名方法,方法重写是子类重写覆盖父类中的方法(若想要在后续调用父类的方法要用super)
②重载的返回值类型和权限修饰符,异常抛出类型没有要求,重写方法的返回值类型小于等于父类被重写方法的返回值类型,修饰符权限大于等于父类被重写方法权限修饰符,抛出的异常类型小于等于父类被重写方法抛出的异常类型。

接口和抽象类有什么区别?
①接口中只能定义public staic final修饰的常量,抽象类中可以定义普通变量。
②但接口没有构造器,抽象类有构造器。
③接口可以多实现,抽象类只能单继承。

接口中的方法都是抽象的,不能实例化对象
接口中的属性只能是常量
抽象类实现接口时,可以只实现接口中的部分方法
一个类在继承另一个类的同时还可以实现接口

instanceof 是 Java 的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例

泛型和泛型擦除是什么?
①泛型的本质是参数化类型,泛型提供类型的安全检测机制,该机制允许程序在编译时检测非法的类型。
②在编译阶段采用泛型时加上的类型参数,会被编译器在编译时去掉,这个过程就被称为类型擦除,因此泛型主要用于编译阶段,在编译后生成的Java字节代码文件中不包含泛型中的类型信息。

有哪些异常处理方式?
①抛出异常:遇到异常不进行具体处理,而是将异常抛出给调用者,抛出异常有2种形式,一种是throws,作用在方法上,一种是throw,作用在方法内。
②使用try/catch进行异常的捕获处理,try中发生的异常会被catch代码块捕获,根据情况进行处理,如果有finally代码块无论是否发生异常都会执行。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值