1.JDK和JRE有什么区别?
JDK是Java软件开发工具包,提供了Java开发环境和运行环境
包含了Java开发工具,基础开发库,基础开发库的源码
基本组件: 编译器,打包工具,文档生成器以及查错工具
JRE是Java的最小运行环境
其中JDK中包含JRE,如果只是运行Java只需安装JRE,想要编译Java程序则需要安装JDK
2.== 与equals的区别?
== 比较的是值是否相同
equals 比较的是引用是否相同(本质上是==)
String 和 Integer 重写equals方法 比较的是值是否相同
3.hashCode()相同,equals()是否一定为true?
不对,因为在散列表中,hashCode()相等即两个键值对的哈希值相等,但是哈希值相等不能一定得出键值相等
如遇到哈希碰撞,计算的哈希值相等,但哈希值位置上的有值时,相等的哈希值会形成链表的方式将值放在该值后面.
4.final在Java中的作用?
被final修饰的类不能被继承,为最终类;
final修饰的方法不能被重写;
final修饰的变量为常量,常量必须初始化,初始化后值不能被改变;
5.this能修饰哪些?
this能修饰属性,方法,构造器,不能修饰类;
6.Java分哪几种类型?
1.基本类型: byte(1字节) Boolean(1字节) char(2字节) short(2字节) int(4字节) long(8字节) float(4字节) double(8字节) (8中基本类型)
2.引用类型;
7.Java中操作字符串都有哪些类?之间有什么区别?
有String StringBuilder StringBuffer
String是一个封装char[]数组的对象,字符串不可变,每次操作都会生成新的String对象,然后再将指针指向新的String对象;
StringBuilder StringBuffer 则是可变的字符序列,提供了一组可以修改字符内容的方法,平常连接字符串用append()方法代替'+';
内部初始容量为字符串长度加16 (str.length()+16),新数组扩容为原来的2倍加2,如果还不够则扩充到需要的容量;
StringBuilder 与 StringBuffer之间区别 StringBuilder 线程不安全 StringBuffer线程安全
8.普通类与抽象类有哪些区别?
普通类不能包含抽象方法,抽象类可以包含普通方法;(抽象类用abstract关键字声明)
抽象类不能被实例化,普通类可以直接实例化;
补充:抽象类中不一定要有抽象方法、抽象类不能被final修饰、抽象方法没有方法体;
9.接口与抽象类有什么区别?
实现:抽象类的子类使用extends来继承;
接口必须使用implement来实现接口。
构造方法:抽象类可以有构造方法;接口不能有。
main方法:抽象类可以有main方法,可以运行;接口中不能有;
实现数量:类可以实现很多接口;但是子类只能继承一个抽象类。
访问修饰符:接口中的方法默认访问修饰符为public;
抽象类中的方法可以任意访问修饰符。
10.Java中的IO流分为几种?
功能分:输入流(input)、输出流(output)。
类型分:字节流(8位传输以字节位单位)、字符流(16位传输以字符为单位);
11.局部变量和成员变量有什么区别?
位置:局部变量方法里或者局部代码块中;(必须手动初始化分配内存)
成员变量类里方法外;(可不被初始化,默认初始化)
作用域:局部变量方法运行完内存就被释放;
成员变量存在整个类中,类消失了,变量才会被释放。
12.BIO、NIO、AIO有什么区别?
BIO:Block IO 同步阻塞式IO,就是我们平常使用的传统IO,特点是模式简单使用方便,并发能力低。
NIO:New IO 同步非阻塞IO,传统IO的升级,客户端和服务器端通过Channel(通道)通讯,实现多路复用。
AIO: Asynchronous IO ,NIO的升级,也叫NIO2,实现了异步非阻塞IO,异步IO的操作基于事件和回调机制。
13.继承与聚合的区别在哪?
继承:指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以 增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在Java中此类关系 通过关键字extends明确标识,在设计时一般没有争议性;
聚合:是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与 部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个 整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致 的,只能从语义级别来区分;