Java SE 八股文(持续更新)

1.接口的作用

避免Java中单继承的局限性

tips:继承和实现接口同时出现时,先继承再实现

2.return break continue 的区别?

作用不同:

1)return结束方法,

2) break和continue都是结束流程控制语句

------break结束循环或switch语句----continue跳过本次执行,进入下一次执行操作

用法不同:

①break:终止语句,执行到break流程控制语句结束;适用于所有的循环语句和switch语句;

②continue:中断语句,执行到continue跳过本次执行下一次;适用于所有循环语句

③return:结束方法,一般定义在有返回值的方法中;

3.什么是方法重载?

在同一个类中,具有相同功能的方法(即方法名一致),但是参数列表不一致,将这种操作称之为方法的重载

4.如何构成方法重载(构成方法重载三要素)?

方法名一致&&参数列表不同(顺序||个数||类型)&&与访问权限修饰符和返回值无关

5.Java中的访问权限修饰符都有哪些?作用范围是什么?

类:public和缺省(什么是缺省)

类成员: 作用范围由大到小:public>protected>缺省>private

访问权限修饰符/作用域->

本类

同包

子类子包

任意

public(公有的)

protected(受保护的)--前提是被继承

缺省

private(私有的)

6.Java中常用修饰符都有哪些?能够修饰什么?特点?

static abstract synchronized final

修饰符

含义

能够修饰

特点

static

静态的

字段/方法/代码块

字段和方法直接通过类名打点调用,代码块优先主函数加载且只一次

final

最终的

类/字段/方法

类不能被继承;字段必须有初始值;方法不能被重写

abstract

抽象的

类、方法

类不能实例化对象,方法没有方法体

synchronized

同步的

方法、代码块

同步操作

7.简述Java中对象的声明和实例化的区别?

个数不同

        声明:定义一个

        实例化:创建两个

位置不同

        声明:栈内存中定义

        实例化:栈内存定义地址(对象名),在堆内存存储数据

是否能使用

        声明:不能使用,会抛出空指针异常

        实例化:可以使用

8.简述使用封装的好处

        提高代码安全性

        简化代码编写(简化主函数代码编写)

        降低类与类之间的耦合度(解耦合)

9.简述JavaBean规范

类必须使用public作为访问权限修饰符

所有成员字段必须使用private作为访问权限

提供公有的无参构造器

提供所有成员字段对应的get/set方法

10.简述继承的优缺点

优点:

        简化代码编写(简化子类代码编写)

        提高代码复用性(重写性)

缺点:

        一定程度上提高了类与类之间的耦合度

11.简述你知道的Java类的定义格式有哪些?

public class 类名{} --普通类

public abstract class 类名{} --抽象类

public interface 接口名 {} --接口

public enum 枚举类名{} --枚举类

12.简述普通类/抽象类/接口中能够定义哪些类成员

比较项

普通类

抽象类

接口

定义关键字

class

abstract

interface

继承或实现的关键字

extends

extends

implements

成员字段

变量 常量

变量 常量

常量

构造器

既能定义也能实例化

能定义不能实例化

不能定义也不能实例化

成员方法

普通方法

普通方法/抽象方法

抽象方法

13.使用多态的好处

        简化代码编写(简化业务类代码编写)

        提高代码复用性

14.简述你理解的面向对象,使用面向对象编程的好处?

        面向对象的实质就是封装 继承 多态 抽象的综合应用

好处:

        简化代码编写(继承,封装 多态)

        提高代码复用性(继承 多态)

        降低类与类之间耦合度(封装 )

        提高代码安全性(封装)

15.单例设计模式特点-

        私有化构造器

        只能在本类实例化对象一次

        对外提供获取本类对象的静态方法

16.懒汉式和饿汉式的区别

        饿汉式:单线程操作,方便快捷

        懒汉式:多线程操作更安全 synchronized(同步的)

17.什么是回调函数?

        父类调用子类对父类重写的方法

18.引用数据类型的转换(以父类为Person,子类为Student)

        1.向上塑型(向上造型)--自转

        Person 对象名 = new 子类 ();

        2.向下塑型(向下造型)--强转

        父类对象调用子类方法用强转

        Student 对象名 =(Student)父类对象名;

19.简述使用匿名操作的优缺点?适用场景

        优点:节省栈内存空间

        缺点:不利于用户获取

        适用场景:匿名内部类+匿名传参(匿名对象)

20.简述==与equals区别

①==.只能进行栈内存数据比较

        当进行基本数据类型比较时,比较值是否一致

        当进行引用数据类型比较时,比价的是栈内存中地址是否一致

②equals 只能进行引用数据类型比较

        当调用的是Object类中的equals方法时,作用与==一致,比较的是栈内存地址是否一致

        当调用的是子类重写父类的equals方法时,比较的是实例化引用数据类型后,堆内存中存储的数据值是否一致

21.为什么重写equals方法时,必须重写hashCode方法?

        提高equals方法的比较效率

22.为什么String是不可变的?

①在类结构上String是被final修饰的,表示最终类,因此类结构相对稳定

②由于String底层赋值相当于char[],而数组一旦创建,其长度固定. 因此String值不可改变

23.append和+都能进行字符串拼接操作,异同点是什么?

不同点:append操作缓存区,+操作堆栈内存

相同点:都是实现字符串尾部操作

24.String、StringBuffer、StringBuilder三个类特点

共同点:都是操作字符串类型数据的类

String和StringBuffer

        都是多线程安全操作

        都是JDK1.0版本开始应用

StringBuffer和StringBuilder

        都是可变字符串(可变指的是长度可变)

        都是操作缓冲区

String类是定长字符串,操作的是堆栈内存

StringBuiler类是JDK5版本开始,单线程操作更快捷

25.装饰设计模式和方法重写哪个更好?

①方法重写:类与类之间必须是继承关系,必须是对父类已有方法进行增强

        好处:不需要提供增强方法,直接调用父类中定义好的方法

        不足:类与类之间必须是继承关系,耦合度高

②装饰设计模式, 类与类之间不一定要继承关系,但是操作的数据类型必须一致,而且增强功能的方法在原有类不一定存在

        好处:降低类与类之间的耦合度

        不足:如果要调用相同功能的方法,需要在装饰类中重新定义,比较麻烦

③在实际开发中,一般都是继承+装饰设计模式组合使用,扬长避短;

26.简述Java中的异常处理机制是什么?如何处理?

两种处理方式:处理异常 和 抛出异常

处理:通过try对异常代码进行捕获,通过catch对异常进行处理,通过finally执行出现异常后必须要执行的代码,比如关闭资源;

27.final和finally关键字的异同点

相同点:都是修饰符,都表示最终的含义

不同点:修饰的内容不同

final修饰类(不能被继承)修饰方法(不能被重写)修饰成员字段(必须有初始值)

finall:修饰代码块,常用于定义无论是否出现异常都要执行的代码

28.集合和数组的异同点

相同点:

        都是存储多个数据的容器

        都可以存储引用数据类型

不同点

数据存储灵活性

        数组一旦创建,长度固定且内容不可改变,不够灵活

        集合可以随意增删操作,操作灵活

数据存储安全性

        数组只能存储同一种数据类型的数据,安全性高

        集合只可以存放任意一种引用数据类型,安全性稍低

数据存储类型不同

        数组既可以存放基本数据类型,也可以存放引用数据类型

        集合只能存储引用数据类型

29.单例集合存储数据的特点,以及不同集合实现类底层如何存储数据?

①特点:

Collection接口:既可以存储重复元素,也可以存储唯一元素;既可以存储有序数据,也可以存储无序数据

List接口:有序不唯一

Set接口:无序唯一

Queue接口:先进先出的队列式存储

②底层如何存储数据:

ArrayList类:基于动态数组存储

LinkList类:基于双链表式存储

TreeSet类:基于二叉树存储

HashSet类:基于哈希码值存储

30.Java中创建多线程的方式有哪些? 如何开启多线程操作?实际开发中使用哪种方式更好一些?

①创建方式

继承Thread类 实现Runaable接口 实现Callable接口

②通过Thread类对象调用start方法开启多线程,并调用run方法执行操作

③实际开发中更推荐使用实现Runnable接口的操作,可以避免java中单继承的局限性

每种状态下,多线程所具备的操作权限

线程状态

权限

创建状态

只具备生存权

运行状态

有生存权有执行权

临时/阻塞状态

有生存权没执行权(线程已经开启,但没有抢占到cpu执行权)

消亡状态

没有生存权也没有执行权

31Java中解决多线程安全隐患问题的方式有哪些?区别是什么?

方法:同步代码块 同步函数

区别:锁不同

        同步代码块:3种锁

                本类对象锁(this)/Object锁(obj)/反射机制锁(类名.class)

        同步函数: 1种锁

                本类对象锁(this)

32.简述Java中IO流的分类

字符流

        字符输入流--Reader

                FIleReader/BufferedReader

        字符输出流--Writer

                FIleWriter/BufferedWriter

字节流

        字节输入流-InputStream

                FileInputStream/BufferedInputStream

        字节输出流--OutputStream

                FileOutputStream/BufferedOutputStream

33.字符高效流和字节高效流中是否都提供了高效的工作方法?如果提供,方法的作用是什么?如果没提供,为什么还要使用?

字符高效流,提供了高效方法,分别是BufferedWriter提供的换行操作--newLine(), 体现

Java语言的跨平台性,以及BufferedReader类提供的读一行操作--readLine();

字节高效流中没有提供高效方法,还使用的原因由于操作的是缓冲区,一定程度上缓解堆栈内存操作压力

34.什么是序列化和反序列化

序列化:使用指定的技术,将对象的数据存储到指定文件或通过网络上传到指定位置上

反序列化:使用指定的技术,将指定的文件或网络地址上的数据下载到指定的对象中存储

35.熟练使用递推与递归

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值