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.什么是序列化和反序列化
序列化:使用指定的技术,将对象的数据存储到指定文件或通过网络上传到指定位置上
反序列化:使用指定的技术,将指定的文件或网络地址上的数据下载到指定的对象中存储