Java 基础
1. JDK 和 JRE 有什么区别?
- JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。
- JRE:Java Runtime Environment 的简称,java 运行环境,为 java 的运行提供了所需环境。
2. final 在 java 中有什么作用?
- final 修饰的类叫最终类,该类不能被继承。
- final 修饰的方法不能被重写。
- final 修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。
3. 普通类和抽象类有哪些区别?
- 普通类不能包含抽象方法,抽象类可以包含抽象方法。
- 抽象类不能直接实例化,普通类可以直接实例化。
4. 接口和抽象类有什么区别?
- 实现:抽象类的子类使用 extends 来继承;接口必须使用 implements 来实现接口。
- 构造函数:抽象类可以有构造函数;接口不能有。
- main 方法:抽象类可以有 main 方法,并且我们能运行它;接口不能有 main 方法。
- 实现数量:类可以实现很多个接口;但是只能继承一个抽象类。
- 访问修饰符:接口中的方法默认使用 public 修饰;抽象类中的方法可以是任意访问修饰符。
5. ArrayList 和 LinkedList 的区别是什么?
- 数据结构不同:ArrrayList底层的数据结构是数组,LinkedList底层是Link(链表)的数据结构。
- 效率不同:对于查询,ArrayList比LinkedList的效率更高,对于增删改,LinkedList比ArrayList的效率更高。
- 线程安全:ArrayList线程不安全,LinkedList线程安全。
7. HashMap 和 Hashtable 有什么区别?
- hashTable同步的,而HashMap是非同步的,效率上比hashTable要高。
- hashMap允许空键值,而hashTable不允许。
8. throw 和 throws 的区别?
- throws是用来声明一个方法可能抛出的所有异常信息,throws是将异常声明但是不处理,而是将异常往上传,谁调用我就交给谁处理。而throw则是指抛出的一个具体的异常类型。
9. final、finally、finalize 有什么区别?
- final 可以修饰类、变量、方法,修饰类表示该类不能被继承、修饰方法表示该方法不能被重写、修饰变量表示该变量是一个常量不能被重新赋值。
- finally一般作用在try-catch代码块中,在处理异常的时候,通常我们将一定要执行的代码方法finally代码块中,表示不管是否出现异常,该代码块都会执行,一般用来存放一些关闭资源的代码。
- finalize是一个方法,属于Object类的一个方法,而Object类是所有类的父类,该方法一般由垃圾回收器来调用,当我们调用System的gc()方法的时候,由垃圾回收器调用finalize(),回收垃圾。
10. try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?
- 会执行,在 return 前执行。
简述 tcp 和 udp的区别?
- TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接。
- TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。
- Tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。
- UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
- 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信。
- TCP对系统资源要求较多,UDP对系统资源要求较少。
String 和 StringBuilder 的区别
- String是字符串常量。不可变,线程安全。
- StringBuilder是可变的,线程不安全,效率比StringBuffer高。
- StringBuffer是可变的,线程安全,效率比StringBuilder低。
& 和 &&的区别
- &是位操作,&&是逻辑运算符.
重载和重写的区别
对多态性的体现不同:
1.重载体现的是编译多态性
2.重写体现的是运行多态性
规则不同:
重载:
对象:同一个类的不同方法中
参数必须不同,可以是类型,也可以是顺序
不规定返回值类型必须一样
可以有不同的权限修饰符
方法名必须一样,才能称方法与方法之间构成重载
可以抛出任意大小的异常
重写:
前提:重写(覆盖)必须发生在子父类之间,且只能是子类对父类的方法进行重写
参数列表必须和父类的一样
返回值类型需一致
权限修饰符子类需大于或等于父类方法权限修饰
子类抛的异常需不能大于父类抛出异常