一、Java 基础
- JDK 和 JRE 有什么区别?
(1)JDK 全称Java development kit Java语言开发工具。
把Java程序设计语言、Java虚拟机、JavaAPI库这三部分统称为JDK,
用于支持Java开发的最小开发环境。
(2)JRE 全称 Java runtime environment Java运行环境。
把JavaAPI类库中的JavaSE API子集和Java虚拟机这两部分统称为JRE,是支持java运行的标准环境。
- == 和 equals 的区别是什么?
(1)== 是比较对象的引用地址。
(2)equals() 比较的是两者的值是否相等,看过String类中equals()方法的实现后,你就会发现,它是把字符串拆成字符逐个比较。
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
- 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
(1)两个对象相同,它们的hash值一定相同。
(2)两个hash值相同,但是它们所指向的对象不一定相同。
因为在产出hash值的时候,极其小的概率发生hash碰撞,生成两个相同的hash值。
- final 在 java 中有什么作用?
(1)final修饰类,不能被继承。
(2)final修饰的方法,不能被重写和重载。
(3)final修饰的变量,值不能被改变。
- java 中的 Math.round(-1.5) 等于多少?
Math.round(-1.5) = -1;
Math.round(1.5) = 2;
- String 属于基础的数据类型吗?
String不是基本的数据类型,是final修饰的java类,java中的基本类型一共有8个,它们分别为:
1 字符类型:byte,char
2 基本整型:short,int,long
3 浮点型:float,double
4 布尔类型:boolean
- java 中操作字符串都有哪些类?它们之间有什么区别?
String,StringBuffer,StringBuilder
(1)用String操控字符串,每次会产生一个新的对象,不适合用它来操作字符串。
(2)StringBuffer是一个线程安全的操作字符串的类,因为它在方法中加上了synchronized 关键字,所以在多线程的环境下可以保证线程安全。由于增加锁机制,所以会占用一些资源消耗。
(3)StringBuilder是最快的一个字符操作类,它没有增加锁机制,所以不会保证线程安全,只能在单机的模式下使用。
- String str="i"与 String str=new String("i")一样吗?
(1)String str = "i"; 创建的i是存储在字符串常量池中。
(2)String str = new String("i"); 创建的i是存储在 java堆中,str 指向的对象的存储地址。
- 如何将字符串反转?
可以使用 StringBuffer类中的 reverse()方法 进行反转。
- String 类的常用方法都有那些?
(1)equals();
(2)compareTo();
(3)concat();
(4)indexOf();
(5)substring();
(6)replace();
(7)trim();
(8)valueOf();
- 抽象类必须要有抽象方法吗?
(1)抽象类中可以没有抽象方法,但是有抽象方法的类一定是抽象类。
- 普通类和抽象类有哪些区别?
(1)抽象类与普通类相比,抽象类不可以被实例化。
- 抽象类能使用 final 修饰吗?
抽象类不可以用final关键字进行修饰。
- 接口和抽象类有什么区别?
(1)抽象类中的方法可以被实现,可以有构造方法。可以private 、protected、default、public进行修饰。
(2)接口中方法不可以被实现、不能有构造方法、只能使用default、public 修饰。
- java 中 IO 流分为几种?
Java中的流分为两种,一种是字节流,另一种是字符流,
分别由四个抽象类来表示(每种流包括输入和输出两种所以一共四个):
InputStream,OutputStream,Reader,Writer。Java中其他多种多样变化的流均是由它们派生出来的.
- BIO、NIO、AIO 有什么区别?
(1)IO (同步阻塞IO)
(2)NIO(同步非阻塞IO)
(3)AIO(异步非阻塞IO)
- Files的常用方法都有哪些?
(1)创建:
createNewFile()在指定位置创建一个空文件,成功就返回true,如果已存在就不创建,然后返回false。
mkdir() 在指定位置创建一个单级文件夹。
mkdirs() 在指定位置创建一个多级文件夹。
renameTo(File dest)如果目标文件与源文件是在同一个路径下,那么renameTo的作用是重命名,
如果目标文件与源文件不是在同一个路径下,那么renameTo的作用就是剪切,而且还不能操作文件夹。
(2)删除:
delete() 删除文件或者一个空文件夹,不能删除非空文件夹,马上删除文件,返回一个布尔值。
deleteOnExit()jvm退出时删除文件或者文件夹,用于删除临时文件,无返回值。
(3)判断:
exists() 文件或文件夹是否存在。
isFile() 是否是一个文件,如果不存在,则始终为false。
isDirectory() 是否是一个目录,如果不存在,则始终为false。
isHidden() 是否是一个隐藏的文件或是否是隐藏的目录。
isAbsolute() 测试此抽象路径名是否为绝对路径名。
(4)获取:
getName() 获取文件或文件夹的名称,不包含上级路径。
getAbsolutePath()获取文件的绝对路径,与文件是否存在没关系
length() 获取文件的大小(字节数),如果文件不存在则返回0L,如果是文件夹也返回0L。
getParent() 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回null。
lastModified()获取最后一次被修改的时间。
(5)文件夹相关:
static File[] listRoots()列出所有的根目录(Window中就是所有系统的盘符)
list() 返回目录下的文件或者目录名,包含隐藏文件。对于文件这样操作会返回null。
listFiles() 返回目录下的文件或者目录对象(File类实例),包含隐藏文件。对于文件这样操作会返回null。
list(FilenameFilter filter)返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。
listFiles(FilenameFilter filter)返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。