1-4 异常-接口和抽象类-socket通信原理-Runtime类-泛型-字节流和字符流-内部类
上一篇:
1-3 IO-BIO和NIO和AIO-Select和epoll多路复用
这里是easy的java基础面试
下面是总的阅览:
java基础
java集合
JVM
多线程
mysql_数据库
计算机网络
nosql_redis
设计模式
操作系统
消息中间件activeMq
SSM框架面试题
服务中间件Dubbo
目录
1-异常
1-1异常类型
两种异常: 受检查(checked)异常和不受检查(unchecked)异常。
区别: 不受检查的异常不需要在方法或者是构造函数上声明,就算方法或者构造函数的执行可能会抛出这样的异常,并且不受检查的异常可以传播到方法或者是构造函数的外面。相反,受检查的异常必须要用throws语句在方法或构造函数上声明。
1-2throws和throw区别
throw是指程序中明确的抛出异常,相反throws语句用来表明方法不能处理的异常。每一个方法都必须要指定哪些异常不能处理,所以方法的调用者才能确保处理可能发生的异常,多个异常是用逗号分隔开来的。
1-3异常机制
检查式异常: 我们经常遇到的IO异常及时sql异常都是检查式异常。对于这种异常,java编译器要求我们必须对出现的这些异常进行catch。所以面对这种异常不管我们是否愿意,只能自己写一堆catch来捕获这些异常。
运行时异常: 我们可以不处理,当出现这样的异常时,总是由虚拟机接管。比如:我们从来没有人去处理过NullPointerException异常(java14已经解决),它就是运行时异常,并且是最常见的一种异常。
UndeclaredThrowableException也是一个 运行时异常,一个场景
项目在测试环境下,不稳定,rpc调用时发生超时,造成TimeOutException ,但是被调用方没有处理这个异常。TimeOutException不是业务方法所声明的异常,因此就被包装成UndeclaredThrowableException抛出了。这是一个RuntimeException。
1-4异常体系
2-接口和抽象类
2-1区别
类别 | 抽象类 | 接口 |
---|---|---|
构造方法 | 有 | 无 |
普通成员 | 有 | 无 只能是final常量 |
非抽象的普通方法 | 有 | 无,必须是抽象方法,不能有非抽象普通方法 |
抽象方法修饰符 | public protected | 只能是public abstract |
静态方法 | 有 | 无 |
静态成员变量 | 有 public | public static final 常量 |
总结 | 一个类可以实现多个接口,但是只能继承一个抽象类 |
2-2注意几个小点
1. Java抽象类可以有构造函数吗?
可以。但是不可以创建抽象类的实例,所以构造函数只能通过构造函数链调用.(一个调用另一个。)
2. 抽象类可以实现接口? 他们需要实现所有的方法吗?
可以 , 不需要
3. 抽象类可以是fianl的吗?
不可以,Java抽象类不能是fianl的。如果是final,会阻止他们被继承,会报编译时错误。 final证明了完成性
4. Java抽象类可以有static方法吗?
可以
5. 可以创建抽象类的实例吗?
不可以,因为它们是不完全的----> 不能被实例化,如果会 则会在java编译时发生错误。
6. 抽象类必须有抽象方法吗?
不需要,抽象类有抽象方法,不是强制性的。abstract 就可以将类声明为抽象类。 编译器会强制所有结构的限制来适用于抽象类。
7. 何时选用抽象类而不是接口? **重要,面试必问**
如果不可能在一个发布的接口中添加一个新方法,用抽象类会更好。
8. Java中的抽象方法是什么?
没有一个方法体的方法。我们仅需声明一个方法,不需定义只加上关键字abstract即可。Java接口中的方法默认为public abstract … 。
9. Java抽象类可以包含main方法吗?
可以,它只是一个静态方法,用main方法可以执行抽象类,但是不能创建任何实例。
3-Socket通信原理
4-Runtime类
runtime: 运行时,是一个封装了JVM的类。每一个Java程序实际上都是启动了一个JVM进程,每一个JVM进程都对应一个runtime实例,此实例是由JVM为其实例化的。
我们不能实例化一个runtime对象,应用程序也不能创建自己的runtime类实例,但可以 getRuntime 获取当前 Runtime运行时对象的引用。一旦得到一个当前的runtime对象的引用,就可以调用runtime对象的方法来控制Java虚拟机的状态和行为。
public static runtime getRuntime()
5-泛型T 和 ?
? —> N种数据类型
T ----> 同一类多个对象实例 / 基本类型值
如果一个方法show(List<? extends Teacher> alist) Teacher继承于student , student继承于 child ,,那么加入三种 teacher student child对象。
记住: 此方法List只能接受teacher和 student 。 child会自动向上转型为student。
student extends teacher , child extend student。
6-枚举类Enum
https://blog.csdn.net/javazejian/article/details/71333103
7-字节流和字符流
InputStreamReader,从字节流---> 字符流,读取字节 经过指定编码方式-->字符流
区别:
分类 | 字节流 | 字符流 |
---|---|---|
操作时 | 不使用缓冲区,与文件本身直接操作 | 使用缓冲区 |
操作文件时 | 不close,文件也能输出 | 不close,文件不能关闭,证明使用了缓冲区。使用flush强制刷新缓冲区,这样才能在不close()的情况下,文件输出。 |
read字节 | 返回int,两个字节,0~65535,末尾则返回-1 | 返回int, 一个字节,0~255,末尾则返回-1 |
处理方式 | 处理字节和字节数组或二进制对象 | 处理字符,字符数组或字符串 |
下一篇:
1-5 序列化-内部类-待定其他知识