Java面试复习题汇总

文章目录

第一组

1,Java有哪些基本数据类型,对应的包装类型有哪些, 为什么需要包装类?

byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

基本数据类型不具备方法去使用,如果想通过基本数据类型来转换,不太方便,所以引出了包装类

2,Java的访问修饰符及特点

private:私有的,同一个类中可以被调用,不能用来修饰类

default:默认的,类的同一个包下都可以调用,可以修饰类,变量,方法

protected:受保护的,类的同一个包下面都可以调用,可以修饰类,变量,方法

public:公共的,所有位置都可以被调用

3,final关键字的用法

final表示最终的,可以用来修饰类,变量,方法

final修饰类,不能被继承

final修饰变量,变量不能被重新赋值,final修饰的是常量,一般final修饰的变量都需要指定初始值

final修饰方法,方法不能被重写

4,static关键字的用法

static是静态的意思,用来修饰类的变量和方法

被static修饰的变量叫类变量,被static修饰的方法叫类方法,static也可以修饰代码块

static修饰变量

(1)static修饰的属性是可以共享的

(2)如果所有对象有一个共同属性值的变量,可将其定义为静态的,用来节约空间

static修饰方法

(1)随着类的加载而加载

(2)只有静态成员变量和静态方法

static修饰的代码块叫静态代码块

(1)在类加载时自动执行

(2)只执行一次

(3)可用于异常处理

5,什么是里氏代换原则

所有引用父类的地方对于子类来说都是透明的,子类都可以访问父类所有位置,并且如果替换成子类也不会出现异常或者错误

但是反过来就不行,子类到达的地方,父类不一定能达到。

第二组

1, == 和 equals()方法的区别

==可以用来比较基本类型和引用类型
用来比较基本类型的时候比较的是值
用来比较引用类型的时候比较的是对象的地址值
.equals()是Object中的方法,一般用来比较对象是否相同,想实现效果必须进行重写

2,什么是封装以及封装的好处

封装:是对象的一种隐藏技术,目的是将对象的属性和方法组织起来同时隐藏,不想把属性和方法的实现细节暴露出来,用户和其他对象看不到,也不能对其进行修改,将来只有通过指定的接口去调用对象的方法,才能达到通信的目的。通过private
封装的好处: 将设计者和使用者分开,不会暴露属性及实现的方法,用户不需要知道实现的细节,只需要设计者提供方法来访问对象就行了

3,什么是继承以及继承的好处

继承: 多个类中,相同成员提取出来,定义到一个独立的类中,让当前类和独立类产生关系,使当前类具有独立类的内容
写法是:class 子类 extends 父类{}
继承的好处:提高代码的复用率,提高代码的维护性
让类与类之间产生关系,是学习多态的前提

4,什么是多态,多态的特点,多态的转型

多态:一个对象,在不同时刻体现出来的不同状态。
写法是:父类 对象名 = new 子类();
多态的特点:有继承或者实现关系,有方法的重写,有父类或者父接口的引用指向子类对象
多态的转型:向上转型,把子类对象看成是父类对象
写法:Fu f = new Zi();它一定是安全的
向下转型,把父类对象还原成子类对象,完成子类特有方法的调用
写法:Zi zi = (Zi)f;它不一定安全,转换的前提是父类对象必须指向子类对象

5,方法重载和重写的区别

重载是同一个类中,根据参数的类型,个数和顺序,定义多个同名但是签名不同的方法,他的方法可以有不同的返回值类型,重载经常提供相似但功能不同的操作
重写是在继承关系中,子类重新定义父类已有的方法,要求方法名,参数列表,返回类型完全相同,通过重写,子类可以改变父类方法的实现,从而实现自身特有的行为
重载是同一个类中根据参数的不同定义多个同名的方法,用于提供相似但功能不同的操作
重写是子类重新定义父类方法,用来改变自身的实现方法

第三组

1,成员变量和局部变量的区别

声明位置不同
成员变量:类中,方法外
局部变量:类中,方法内
初始值不同
成员变量:可以不同赋值,系统默认给初始值
局部变量:使用前必须赋值
内存位置不同
成员变量:堆
局部变量:栈
生命周期不同
成员变量:随着对象的创建而存在,对象的消失而消失
局部变量:随着方法的调用而存在,方法调用结束而消失

2,this关键字的用法

this.属性名:调用当前对象的属性
this.方法名:调用当前对象的方法
this():调用当前类的无参构造
this(参数):调用当前类的有参构造

3,super关键字的用法

super.父类属性名:调用父类的属性
super.父类方法名:调用父类的方法
super():调用父类的无参构造函数
super(参数):调用父类的有参构造函数

4,什么是构造函数?构造函数的特点

构造函数:在使用new关键词,创建类的对象时,调用的这个方法
构造函数特点:没有返回值,
名称必须与类名相同,
参数可以是0,1,或多个,
需要搭配new一起使用
创建类后,系统默认一个无参构造

5,抽象类 和 接口的区别

在这里插入图片描述
接口:总纲,起主导地位
抽象类:模板式设计,不起主导地位

第四组

1,什么是自动装箱和自动拆箱

自动装箱:将基本类型的值,直接赋值给对应的包装类对象。
自动拆箱:将包装类型的对象,直接赋值给对应基本类型变量

2,常见的5个运行时异常

NullPointerException(空指针异常)
ArrayIndexOutOfBoundsException(数组越界异常)
ClassCastException(类转换异常)
IllegalArgumentException(非法参数异常)
ArithmeticException(算术异常)

3,throw和throws区别

throw声明在方法内
throws声明在方法体中

throw抛出一个具体的异常类型
throws声明一个方法可能抛出的所有异常信息,表示将来异常的一种可能性,但并不一定发生异常

throw需要用户自己捕获相关异常,然后再对其处理,最后将异常信息抛出
throws通常不需要显式的捕获异常,由系统自动将异常抛给上级方法

4,final、finally、finalize 三个的区别

final 是一个修饰符,用于修饰类、方法和变量,分别表示不可继承、不可重写和不可修改。
finally 是一个关键字,用于定义在异常处理中一定会被执行的代码块。

finalize 是 Object 类的一个方法,用于对象的垃圾回收前的清理操作,

5,String和StringBuffer、StringBuilder的区别

String声明的字符不可变,可以看做是字符串常量,String的内容一旦改变,引用就改变了,可以看成是一个新的引用,所以,String类型做字符串拼接,比较耗时
StringBuffer称为字符串缓冲区,提供了一些方法,可以改变该缓冲区中的数据,但是对应的引用没有改变,相对来说StringBuffer效率更快
StringBuffer和StringBuilder ,他们都是字符串缓冲区,只不过StringBuffer的方法多了一个 synchronized关键字,它是线程安全的。多线程情况下,用StringBuffer,单线程就用StringBuilder

第五组

1,常见的数据结构及特点

栈: 先进后出

队列:先进先出

数组:查询速度快,增删速度慢

链表:查询速度慢,增删速度快

: 每个节点都有0个或多个子节点

​ 没有父节点的节点叫做根节点

​ 每一个非父节点,有且仅有一个父节点

​ 除了根节点,每个子节点都可以分为多个不相交的子树

​ 查询和增删都很快

2,Collection的体系结构

在这里插入图片描述

3,List集合的特点,Map的特点

List接口是Collection接口的子接口,表示有序的序列,可以通过索引访问到List中的元素

List中可以存放 重复的元素 ,并且可以存放null,存放多个null
List接口中提供了 ListIterator,除了实现Iterator接口中的往后遍历的方法,还写了往前遍历的方法

Map一次存储两个元素,一个是key(键),一个是value(值)
Map中的key(键)是唯一的,
Map中的value(值)是可以重复的,可以有null值

4,ArrayList的特点

ArrayList 底层是一个数组,具有数组的优点:查询更新速度快,增加删除慢
可以存放null,多个null
ArrayList 默认的初一个object空数组,初始值是10,随着元素的不断添加,该数组会扩充为原来数组长度的1.5倍
适合频繁进行查询时使用
数组长度不可变但是集合长度可变
线程是不安全的

5,HashMap的特点

键值对存储
快速查询
无序存储
不允许键重复
允许存放空键和空值
非线程安全
容量可调
迭代顺序不确定

第六组

1,写一个冒泡排序

在这里插入图片描述

2,写一个快速排序

在这里插入图片描述

3,写一个面向对象的代码示例,私有化属性,添加构造方法、get/set方法子类继承父类,重写父类方法,创建特有方法使用多态方式创建对象,分别调用父类方法、子类方法

在这里插入图片描述

4,写一个抽象类和子类的示例

在这里插入图片描述

5,写一个接口和实现类的示例

在这里插入图片描述

6,写一个ArrayList,往ArrayList中存放元素并遍历

在这里插入图片描述

7,写一个HashMap示例,往Map中存放元素并遍历

在这里插入图片描述

8,写一个通过io读写的示例

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值