1.JDK和JRE有什么区别
JDK:Java Development Kit 的简称,Java开发工具包,提拱了Java开发环境和Java运行环境。
JRE:Java Runtime Environment 的简称,Java运行环境,为Java的运行提供了所需的环境。
具体来说JDK包含了JRE,同时还包含了编译Java源码的编译器javac,还包含了很多Java程序调试和分析的工具。简单的来说,如果想运行Java程序,只需要安装JRE就可以了,如果要编写Java程序就需要安装JDK。
2. 字符串比较== 和equals的区别是什么
对于基本类型和引用类型 ==的作用效果是不同的。
String x = "string";
String y = "string";
String z = new String("string");
System.out.println(x == y); //true
System.out.println(x == z); //false
System.out.println(x .equals(y)); //true
System.out.println(x .equals(z)); //true
因为X和Y指向的是同一个引用,所以== 是true。而new String()方法则从新开辟了内存空间,所以==为false。
而equals方法比较的是值,所以都为true。
equals本质上就是== ,只不过String和Integer等重写了equals方法,把他变成了值比较。
3.两个对象的hashCode()相同,则equals相等?
不对,两个对象的hashCode相等,值不一定相等。
4.final在Java中有什么作用
final修饰的类被称为最终类,该类不能被继承。
final修饰的方法不能被重写。
final修饰的变量为常量,常量必须初始化,初始化后不可以改变值。
5.java中的Math.round(-1.5)等于多少?
等于-1, Math.round()方法是取离整型最近的最大整数。遵循四舍五入。
6.String是基本数据类型吗?
不是,Java的基本数据类型:byte, short, int, long, double, boolean, char, float八种,而string是对象。
7.Java中的字符串有哪些?他们都有那些区别?
有三种,String,StringBufffer,StringBuilder
StringBuffer和StringBuilder都继承自抽象类AbstractStringBuilder。
String申明的是不可变的对象,每次操作都会生成新的String对象,然后将指针指向新的String对象。
StringBuffer和StringBuilder存储数据的字符数组没有被final修饰,说明值是可以改变的,抽象类abstraStringBuilder内部提供了一个自动扩容机制,当发现长度不够的时候会自动扩容(默认长度是16),扩展为原数组长度的两倍加2,创建一个新的数组,并将数组的数据复制到新数组,所以对于拼接字符串的效率要比String高。
StringBuffer的很多方法都被syschronized修饰了所以线程是安全的,但是当多线程访问的时候,加锁和释放锁的操作会很频繁,所以效率上要比StringBuilder低。StringBuilder的执行效率很高,但是线程不安全,推荐多线程下使用StringBuffer,单线程使用StringBuilder。
8.String str = "1"和 String str = new String("1")一样吗?
内存的分配方式不一样,String str = "1" , java虚拟机会将其分配到常量池中,如果常量池中有”1“,就返回”1“的址,如果没有就创建”1“,然后返回"1"的地址。而String str = new String("1"),则会被分配到堆内存中新开辟一块空间。
9.如何将字符串反转
使用StringBuffer或者StringBuilder的reverse()方法。
StringBuffer sb = new StringBuffer();
sb.append("abcdefg");
System.out.println(sb.reverse());
10.String的常用方法有哪些?
indexOf(); // 返回指定字符串的索引
chartAt(); //返回指定索引处的字符
replace(); // 字符串替换
trim(); //去掉字符串的前后两端空白
split(); //分割字符串,返回一个分割后的字符串数组
getBytes(); // 返回字符串的byte类型数组
length(); //返回字符串长度
toLowerCase(); //将字符串转换成小写
toUpperCase(); // 将字符串转换成大写
subString(); //截取字符串
equals(); //字符串比较
11.抽象类必须有抽象方法吗
抽象类不一定有抽象方法,有抽象方法的类一定是抽象类。
12.普通类和抽象类,有哪些区别
普通类不能包含抽象方法,
抽象类是不能实例化的,就是不能用new调出构造方法创建对象,普通类是可以实例化的。
如果一个类继承于抽象类,那么该类必须实现父类的抽象方法,如果该类没有实现父类的抽象方法,那么必须将该类定义为抽象类。
13.抽象类能使用final修饰符吗
不能 因为定义抽象类就是让其他类继承的,如果定义为final类就不能被其他类继承。
14.接口和抽象类有什么区别
抽象类的子类使用extends来继承,接口必须使用implement来实现接口。
抽象类可以有构造函数,接口不能有。
类可以实现很多接口,但只能继承一个抽象类。(Java只支持单继承)
接口中的方法默认使用public修饰,抽象类中的抽象方法可以使用public和protected修饰,如果抽象方法修饰符为private,则方法名报错。
15.Java中的IO流分几种
按功能来分:输入流(input)和输出流(output)
按类型来分:字节流和字符流。
字节流按8位传输以字节为单位输入输出数据,字符流按16位传输以字符为单位输入输出数据。
16.BIO,NIO,AIO有什么区别
BIO:Block IO 同步阻塞式IO,就是我们平常使用的IO。特点是简单方便,并发处理能力低。
NewIO 同步非阻塞IO,是传统的IO升级,客户端和服务端通过Channel(通道)通讯,实现了多路复用。
AsynchronpusIO 是NIO的升级,也叫NIO2,实现了异步非阻塞IO,异步的IO操作基于事件和回调机制。
17.Files的常用方法有哪些
Files.exists(); // 检测文件路径是否存在
Files.createDirectory(); // 创建文件夹
Files.createFile(); // 创建文件
Files.delete(); // 删除文件
Files.copy(); // 复制文件
Files.move(); // 移动文件
Files.size(); // 读取文件个数
Files.read(); // 读取文件
Files.write(); //写入文件
网友评论