https://blog.csdn.net/qq_43148017/article/details/85121579
https://www.cnblogs.com/cocoxu1992/p/10460251.html
一 JAVA基础 [ 1 - 17 ]
1 JRE 和 JDK 的区别是什么
- JRE: Java Runtime Environment
- JDK:Java Development Kit
- JRE顾名思义是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。
- JDK顾名思义是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具:jconsole,jvisualvm等工具软件,还包含了java程序编写所需的文档和demo例子程序。如果你需要运行java程序,只需安装JRE就可以了。如果你需要编写java程序,需要安装JDK。
JRE根据不同操作系统(如:windows,linux等)和不同JRE提供商(IBM,ORACLE等)有很多版本,最常用的是Oracle公司收购SUN公司的JRE版本
1)基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(==),比较 的是他们的值
2)复合数据类型(类)
当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。 JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地 址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。
对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号(==)进行比较的,所以比较后的结果跟双等号(==)的结果相同。
3. 两个对象的 hashCode()相同,则 equals()也一定为 true?
因为:Hash,一般翻译做“散列”,也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。
1) 对象相等则hashCode一定相等;
2) hashCode相等对象未必相等。(不同对象的hashcode是否一定不一样?是错误的,hashcode本身就是个函数,是可以重载的,你完全可以写个函数总是返回固定值。但hashcode函数从设计要求上来说,要尽量保证:不同对象的hashcode不同。)
4. final 在 java 中有什么作用?
- 1. final修饰变量,那么该变量相当于一个常量值,在初始化之后保持不变。
- 2. final修饰方法,那么该方法不能被重写,继承时不能被子类覆盖。
- 3. final修饰类,该类不能够被继承。
- 4. final用于对象引用时,使对象引用恒定不变,而该对象本身可以改变。
- 5. final与private的关系。 详细代码
5. java 中的 Math.round(-1.5) 等于多少? -1 (向上进一位)
6 String是基本的数据类型吗?
String不是基本数据类型,而是一个类(class),是Java编程语言中的字符串。String对象是char的有序集合,并且该值是不可变的。因为java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类。
7. java 中操作字符串都有哪些类?它们之间有什么区别?
操作字符串的类有:String、StringBuffer、StringBuilder。
String:字符串常量。也就是说String是不可变的对象,因此每次对String类型的对象进行更改操作时,实际上是生成了新的String对象,然后修改指针指向新的String对象。因此可以发现,如果经常要改变字符串内容,用String就会造成内存中大量无引用的对象,当内存不足时GC工作就会引起性能下降
StringBuffer:字符串变量、线程安全。首先是字符串变量,所以每次对StringBuffer对象操作时就是对StringBuffer对象本身操作,而不会生成新的对象,StringBuffer相对于String类其速度较快。其次StringBuffer的字符缓冲区可以安全地用于多个线程,其操作方法主要有append和insert方法(append将字符添加到缓冲区的末端,insert将字符添加到指定位置)
StringBuilder:字符串变量、非线程安全。同StringBuffer是一个可变的字符序列,区别是不保证同步,所以单线程时可以优先采用StringBuilder,速度相比StringBuffer要快,二者方法基本相同
8. String str="i"与 String str=new String(“i”)一样吗?
不一样,因为内存的分配方式不一样。
String str="i"的方式,java 虚拟机会将其分配到常量池中;而 String str=new String("i") 则会被分到堆内存中。
9 如何将字符串反转?
- 使用 StringBuilder 或者 stringBuffer 的 reverse() 方法
- 把字符串转换为字符数组,for循环输出
10.String 类的常用方法都有那些?
- indexOf():返回指定字符的索引。
- charAt():返回指定索引处的字符。
- replace():字符串替换。
- trim():去除字符串两端空白。
- split():分割字符串,返回一个分割后的字符串数组。
- getBytes():返回字符串的 byte 类型数组。
- length():返回字符串长度。
- toLowerCase():将字符串转成小写字母。
- toUpperCase():将字符串转成大写字符。
- substring():截取字符串。
equals():字符串比较。
11 抽象类必须有抽象方法吗
12 普通类和抽象类的区别
13 抽象类可以用final修饰吗
抽象类不一定有抽象方法,但有抽象方法的类一定是抽象类
14 接口和抽象类的区别
抽象类可以有构造方法,接口中不能有构造方法。
抽象类中可以有普通成员变量,接口中没有普通成员变量
抽象类中可以包含静态方法,接口中不能包含静态方法
一个类可以实现多个接口,但只能继承一个抽象类。
接口可以被多重实现,抽象类只能被单一继承
如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法
派生类必须实现未实现的方法
15 JAVA 中IO流分为几种
https://www.cnblogs.com/QQ846300233/p/6046388.html
16 BIO NIO AIO有什么区别
https://blog.csdn.net/u010310183/article/details/81700405
17 FILE常用方法有哪些
https://www.cnblogs.com/cocoxu1992/p/10460994.html
二 容器
18.java 容器都有哪些?
1)Collection:一个独立元素的序列,这些元素都服从一条或者多条规则。 List必须按照插入的顺序保存元素,而set不能有重复的元素。Queue按照排队规则来确定对象产生的顺序(通常与它们被插入的顺序相同)。
2)Map:一组成对的“键值对”对象,允许你使用键来查找值。
|Collection
| ├List
| │-├LinkedList
| │-├ArrayList
| │-└Vector
| │ └Stack
| ├Set
| │├HashSet
| │├TreeSet
| │└LinkedSet
|
|Map
├Hashtable
├HashMap
└WeakHashMap
19.Collection 和 Collections 有什么区别?
Collection是集合类的上级接口,继承与他有关的接口主要有List和Set
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全等操作
20.List、Set、Map 之间的区别是什么?