一、Java 基础

 

  1. 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运行的标准环境。
  1. == 和 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;
    }
  1. 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
(1)两个对象相同,它们的hash值一定相同。
(2)两个hash值相同,但是它们所指向的对象不一定相同。
因为在产出hash值的时候,极其小的概率发生hash碰撞,生成两个相同的hash值。
  1. final 在 java 中有什么作用?
(1)final修饰类,不能被继承。
(2)final修饰的方法,不能被重写和重载。
(3)final修饰的变量,值不能被改变。
  1. java 中的 Math.round(-1.5) 等于多少?
Math.round(-1.5) = -1;
Math.round(1.5) = 2;
  1. String 属于基础的数据类型吗?
String不是基本的数据类型,是final修饰的java类,java中的基本类型一共有8个,它们分别为:

1 字符类型:byte,char

2 基本整型:short,int,long

3 浮点型:float,double

4 布尔类型:boolean
  1. java 中操作字符串都有哪些类?它们之间有什么区别?
String,StringBuffer,StringBuilder

(1)用String操控字符串,每次会产生一个新的对象,不适合用它来操作字符串。

(2)StringBuffer是一个线程安全的操作字符串的类,因为它在方法中加上了synchronized 关键字,所以在多线程的环境下可以保证线程安全。由于增加锁机制,所以会占用一些资源消耗。

(3)StringBuilder是最快的一个字符操作类,它没有增加锁机制,所以不会保证线程安全,只能在单机的模式下使用。
  1. String str="i"与 String str=new String("i")一样吗?
(1)String str = "i"; 创建的i是存储在字符串常量池中。
(2)String str = new String("i"); 创建的i是存储在 java堆中,str 指向的对象的存储地址。
  1. 如何将字符串反转?
可以使用 StringBuffer类中的 reverse()方法 进行反转。
  1. String 类的常用方法都有那些?
(1)equals();
(2)compareTo();
(3)concat();
(4)indexOf();
(5)substring();
(6)replace();
(7)trim();
(8)valueOf();
  1. 抽象类必须要有抽象方法吗?
(1)抽象类中可以没有抽象方法,但是有抽象方法的类一定是抽象类。
  1. 普通类和抽象类有哪些区别?
(1)抽象类与普通类相比,抽象类不可以被实例化。
  1. 抽象类能使用 final 修饰吗?
抽象类不可以用final关键字进行修饰。
  1. 接口和抽象类有什么区别?
(1)抽象类中的方法可以被实现,可以有构造方法。可以private 、protected、default、public进行修饰。

(2)接口中方法不可以被实现、不能有构造方法、只能使用default、public 修饰。
  1. java 中 IO 流分为几种?
Java中的流分为两种,一种是字节流,另一种是字符流,
分别由四个抽象类来表示(每种流包括输入和输出两种所以一共四个):
InputStream,OutputStream,Reader,Writer。Java中其他多种多样变化的流均是由它们派生出来的.
  1. BIO、NIO、AIO 有什么区别?
(1)IO (同步阻塞IO)
(2)NIO(同步非阻塞IO)
(3)AIO(异步非阻塞IO)
  1. 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。