1.JDK 和 JRE 有什么区别?
JDK
是Java的开发工具,它不仅提供了Java程序运行所需的JRE,还提供了一系列的编译,运行等工具,如javac,java,javaw等。
JRE
只是Java程序的运行环境,它最核心的内容就是JVM(Java虚拟机)及核心类库。
2.== 和 equals 的区别是什么?
==
号比较的是内存地址
equals()
比较的是字符串的内容
3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
不一定。同时反过来equals为true,hashCode也不一定相同。
hashCode()返回该对象的哈希码值;equals()返回两个对象内容是否相等。
4.final 在 java 中有什么作用?
// final 修饰的类不能被继承,常用于修饰工具类,不允许第三方修改使用
final class tools {
String tool;
}
class A {
final boolean name = false;
// final 修饰的变量变成常量,只能被赋值一次(基本类型)
final int age;
{
// final 修饰的变量可在构造方法或构造代码块内初始化
age = 21;
}
// final 修饰的方法不能被重写,但可以重载
final void method() {
System.out.println("final method");
}
}
class B extends A {
String gender;
// 错误写法,重写父类中的方法
// public void method() {
//
// }
// 允许重载被final修饰的方法
public void method(String gender) {
this.gender = gender;
}
}
public class Demo1 {
public static void main(String[] args) {
// final 修饰引用类型,地址值仅赋值一次且不能改变,但对象属性值可以改变
final B b = new B();
// b = new B(); error
b.gender = "男";
System.out.println(b.gender);
}
}
5.java 中的 Math.round(-1.5) 等于多少?
原则:同时向正无穷方向取舍,取较大的值 -1
6.String 属于基础的数据类型吗?
- 基本数据类型如下
- 引用数据类型:数组、接口、对象
- String类
String类并不是基本数据类,而是一个类(class),是java等编程语言中的字符串。
String类是不可变的,对String类的任何改变,都是返回一个新的String类对象。
String 对象是 System.Char 对象的有序集合,用于表示字符串。
String 对象的值是该有序集合的内容,并且该值是不可变的。
7.java 中操作字符串都有哪些类?它们之间有什么区别?
String、StringBuffer、StringBuilder
String
: final修饰,String类的方法都是返回new String。即对String对象的任何改变都不影响到原对象,对字符串的修改操作都会生成新的对象。
StringBuffer
: 对字符串的操作的方法都加了synchronized,保证线程安全。
StringBuilder
: 不保证线程安全,在方法体内需要进行字符串的修改操作,可以new StringBuilder对象,调用StringBuilder对象的append、replace、delete等方法修改字符串。
8.String str="i"与 String str=new String(“i”)一样吗?
不一样。前者是一个常量,后者又重新new了一个对象,内存空间不一样
9.如何将字符串反转?
https://blog.csdn.net/cghu1201/article/details/78490934
10.String 类的常用方法都有那些?
https://blog.csdn.net/qq_25406669/article/details/79021911
11.抽象类必须要有抽象方法吗?
1.抽象类可以没有抽象方法,但是如果你的一个类已经声明成了抽象类,即使这个类中没有抽象方法,它也不能再实例化,即不能直接构造一个该类的对象。
2.如果一个类中有了一个抽象方法,那么这个类必须声明为抽象类,否则编译通不过。
12.普通类和抽象类有哪些区别?
1.抽象类不能被实例化。
2.抽象类可以有构造函数,被继承时子类必须继承父类一个构造方法,抽象方法不能被声明为静态。
3.抽象方法只需申明,而无需实现,抽象类中可以允许普通方法有主体
4.含有抽象方法的类必须申明为抽象类
5.抽象的子类必须实现抽象类中所有抽象方法,否则这个子类也是抽象类
6.抽象类是否可以有构造函数?
答案是可以有。抽象类的构造函数用来初始化抽象类的一些字段,而这一切都在抽象类的派生类实例化之前发生。不仅如此,抽线类的构造函数还有一种巧妙应用:就是在其内部实现子类必须执行的代码
13.抽象类能使用 final 修饰吗?
Java抽象类不可以被 final修饰,抽象类需要被继承才能使用,而被final修饰的类无法被继承,所以abstract和final是不能共存的。
14.接口和抽象类有什么区别?
(1) 抽象类可以有构造方法,接口中不能有构造方法。
(2) 抽象类中可以有普通成员变量,接口中没有普通成员变量
(3)抽象类中可以包含静态方法,接口中不能包含静态方法
(4) 一个类可以实现多个接口,但只能继承一个抽象类。
(5)接口可以被多重实现,抽象类只能被单一继承
(6)如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法
15.java 中 IO 流分为几种?
-
按流向分(站在程序角度考虑)
输入流
(input)
输出流
(output) -
按类型分:
字节流
(InputStream/OutputStream)
任何文件都可以通过字节流进行传输。字符流
(Reader/Writer)
非纯文本文件,不能用字符流,会导致文件格式破坏,不能正常执行。节点流
(低级流:直接跟输入输出源对接)
FileInputStream/FileOutputStream/FileReader/FileWriter/PrintStream/PrintWriter.处理流
(高级流:建立在低级流的基础上)
转换流
:InputStreamReader/OutputStreamWriter,字节流转字符流/字符流转字节流
缓冲流
:BufferedInputStream/BufferedOutputStream BufferedReader/BufferedReader可对节点流经行包装,使读写更快
16.BIO、NIO、AIO 有什么区别?
Java BIO
: 同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。
Java NIO
: 同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。
Java AIO(NIO.2)
: 异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理,
17.Files的常用方法都有哪些?
创建
createNewFile()
在指定位置创建一个空文件,成功就返回true,如果已存在就不创建,然后返回false。
mkdir()
在指定位置创建一个单级文件夹。
mkdirs()
在指定位置创建一个多级文件夹。
renameTo(File dest)
如果目标文件与源文件是在同一个路径下,那么renameTo的作用是重命名,如果目标文件与源文件不是在同一个路径下,那么renameTo的作用就是剪切,而且还不能操作文件夹。
删除:
delete()
删除文件或者一个空文件夹,不能删除非空文件夹,马上删除文件,返回一个布尔值。
deleteOnExit()jvm退出时删除文件或者文件夹,用于删除临时文件,无返回值。
判断:
exists()
文件或文件夹是否存在。
isFile()
是否是一个文件,如果不存在,则始终为false。
isDirectory()
是否是一个目录,如果不存在,则始终为false。
isHidden()
是否是一个隐藏的文件或是否是隐藏的目录。
isAbsolute()
测试此抽象路径名是否为绝对路径名。
获取:
getName()
获取文件或文件夹的名称,不包含上级路径。
getAbsolutePath()
获取文件的绝对路径,与文件是否存在没关系
length()
获取文件的大小(字节数),如果文件不存在则返回0L,如果是文件夹也返回0L。
getParent()
返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回null。
lastModified()
获取最后一次被修改的时间。
文件夹相关:
static File[] listRoots()
列出所有的根目录(Window中就是所有系统的盘符)
list()
返回目录下的文件或者目录名,包含隐藏文件。对于文件这样操作会返回null。
listFiles()
返回目录下的文件或者目录对象(File类实例),包含隐藏文件。对于文件这样操作会返回null。
list(FilenameFilter filter)
返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。
listFiles(FilenameFilter filter)
返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。
18.java 容器都有哪些?
19.Collection 和 Collections 有什么区别?
java.util.Collection
是一个集合接口(集合类的一个顶级接口)。
它提供了对集合对象进行基本操作的通用接口方法。
Collection接口在Java 类库中有很多具体的实现。
Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式
其直接继承接口有List与Set。
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
java.util.Collections
是一个包装类(工具类/帮助类)。
它包含有各种有关集合操作的静态多态方法。
此类不能实例化,就像一个工具类,用于对集合中元素进行排序、
搜索以及线程安全等各种操作,服务于Java的Collection框架。