1、jdk与jre的区别?
- 面向的群体不同:jre(Java Runtime Environment)Java运行环境是用户使用Java程序必需的环境;jdk(Java Runtime Environment)Java开发工具包是提供给Java程序员开发Java程序的。
- 包括内容不同:jdk包括jre,Javac编译器,调试和分析工具以及Java文档,demo。jre主要包括Java虚拟机,Java基础类库。
tip:官方说明
2、==与equals的区别?
- String类型中,
==比较的是内存空间,引用的比较;equals比较的是字符串中的值。 - 广义比较,
==比较的是内存空间即引用;equals可以根据程序员的意图(程序员认为的相等)覆写。
3、两个对象的 hashCode() 相同, 那么 equals() 也一定为 true吗?
不一定。
- hascode是Object类(超类)中的一个方法,返回的是一个哈希值。
- equals也是Object类的一个方法,比较的是2个对象是否“相等”。
hashCode 的常规协定:
在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行 equals 比较时所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。
两个对象的equals()相等,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。
两个对象的equals()不相等,那么对这两个对象中的任一对象上调用 hashCode 方法不要求一定生成不同的整数结果。但是,为不相等的对象生成不同整数结果可以提高哈希表的性能。
4 、final 在 Java 中有什么作用?
Java关键字,顾名思义”最终“,用于修饰类、方法、属性、参数等。
- 修饰类,最终类,该类不能被继承,且该类中的所有方法和属性也默认是final型。
- 修饰方法,该方法不能被重写。
- 修饰属性(变量),该变量为常量不能改写。
- 修饰参数,参数只可读。
5、Java 中的 Math. round(-1. 5) 等于多少?
-1。四舍五入的原理是在参数上加0.5然后做向下取整。
6、String 属于基础的数据类型吗?
不是,是Java类。
- 字符类型:byte,char;
- 整型:short,int,long;
- 浮点型:float,double;
- 布尔型:boolean;
7、Java 中操作字符串都有哪些类?它们之间有什么区别?
String、StringBuffer、StringBuilder。
| String | StringBuffer | StringBuilder | |
|---|---|---|---|
| 不可变对象,操作产生新对象 | 原有对象上面操作,可变 | 原有对象上面操作,可变 | |
| 线程安全 | 非线程安全 | ||
| 性能低(推荐单线程环境使用) | 性能高(推荐多线程环境使用) |
8、String str=”i”与 String str=new String(“i”)一样吗?
不一样,内存分配方式不一样。
前者Java虚拟机会先检索常量池中是否存在该元素,存在就使用常量池中的地址,没有就创建一个,然后赋给变量;
后者直接分配到堆内存中,即创建一个新对象。
9、如何将字符串反转?
使用 StringBuilder 或者 stringBuffer 的 reverse() 方法。
// StringBuffer reverse
StringBuffer stringBuffer = new StringBuffer();
stringBuffer. append("abcdefg");
System. out. println(stringBuffer. reverse()); // gfedcba
// StringBuilder reverse
StringBuilder stringBuilder = new StringBuilder();
stringBuilder. append("abcdefg");
System. out. println(stringBuilder. reverse()); // gfedcba
10、String 类的常用方法都有那些?
indexOf():返回指定字符的索引。
charAt():返回指定索引处的字符。
replace():字符串替换。
trim():去除字符串两端空白。
split():分割字符串,返回一个分割后的字符串数组。
getBytes():返回字符串的 byte 类型数组。
length():返回字符串长度。
toLowerCase():将字符串转成小写字母。
toUpperCase():将字符串转成大写字符。
substring():截取字符串。
equals():字符串比较。
11、抽象类必须要有抽象方法吗
不需要,抽象类不一定非要有抽象方法。
12、普通类和抽象类有哪些区别?
- 普通类不能包含抽象方法,抽象类可以包含抽象方法。
- 抽象类不能直接实例化,普通类可以直接实例化。
13、抽象类能使用 final 修饰吗?
定义抽象类就是让其他类继承的,如果定义为 final 该类就不能被继承,这样彼此就会产生矛盾,所以 final 不能修饰抽象类。
14、接口和抽象类有什么区别?
| 接口 | 抽象类 | |
|---|---|---|
| 实现 | 必须使用implements来实现 | 只能被子类继承(extends) |
| 构造函数 | 不能有 | 可以有 |
| 实现数量 | 类可以实现多个接口 | 类只能继承一个抽象类 |
| 访问修饰符 | 默认public | 任意访问修饰符 |
15、 Java 中 IO 流分为几种?
按照流的流向分,可以分为输入流和输出流;
按照操作单元划分,可以划分为字节流和字符流;
按照流的角色划分为节点流和处理流。
Java Io流共涉及40多个类,这些类看上去很杂乱,但实际上很有规则,而且彼此之间存在非常紧密的联系, Java I0流的40多个类都是从如下4个抽象类基类中派生出来的。
InputStream/Reader: 所有的输入流的基类,前者是字节输入流,后者是字符输入流。OutputStream/Writer: 所有输出流的基类,前者是字节输出流,后者是字符输出流。
字节流和字符流的区别是:字节流按 8 位传输以字节为单位输入输出数据,字符流按 16 位传输以字符为单位输入输出数据。
16、BIO、NIO、AIO 有什么区别?
- BIO:Block IO 同步阻塞式 IO,就是我们平常使用的传统 IO,它的特点是模式简单使用方便,并发处理能力低。
- NIO:Non IO 同步非阻塞 IO,是传统 IO 的升级,客户端和服务器端通过 Channel(通道)通讯,实现了多路复用。
- AIO:Asynchronous IO 是 NIO 的升级,也叫 NIO2,实现了异步非堵塞 IO ,异步 IO 的操作基于事件和回调机制。
17、Files的常用方法都有哪些?
- Files. exists():检测文件路径是否存在。
- Files. createFile():创建文件。
- Files. createDirectory():创建文件夹。
- Files. delete():删除一个文件或目录。
- Files. copy():复制文件。
- Files. move():移动文件。
- Files. size():查看文件个数。
- Files. read():读取文件。
- Files. write():写入文件。
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!
