java面试题基础17题

面试题

一、Java基础

1.JDK和JRE有什么区别?
JDK:Java Development Kit,Java开发工具包,提供了Java的开发环境和运行环境。
包含了编译Java源文件的编译器Javac,还有调试和分析的工具。
JRE:Java Runtime Environment,Java运行环境,包含Java虚拟机及一些基础类库JVM:Java Virtual Machine,Java虚拟机,
提供执行字节码文件的能力所以,如果只是运行Java程序,只需要安装JRE即可。
另外注意,JVM是实现Java跨平台的核心,但JVM本身并不是跨平台的,不同的平台需要安装不同的JVM

2.==和equals的区别是什么?

1)对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;
    如果作用于引用类型的变量,则比较的是所指向的对象的地址
  2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量
    如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;
    诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。

3.两个对象的hashCode()相同,则equals()也一定为true,对吗?
首先,答案肯定是不一定。同时反过来equals为true,hashCode也不一定相同。
类的hashCode方法和equals方法都可以重写,返回的值完全在于自己定义。
hashCode()返回该对象的哈希码值;equals()返回两个对象是否相等。
关于hashCode和equal是方法是有一些 常规协定 :
1、两个对象用equals()比较返回true,那么两个对象的hashCode()方法必须返回相同的结果。
2、两个对象用equals()比较返回false,不要求hashCode()方法也一定返回不同的值,但是最好返回不同值,以提搞哈希表性能。
3、 重写equals()方法,必须重写hashCode()方法,以保证equals方法相等时两个对象hashcode返回相同的值。

4.final在java中有什么作用?
final作为Java中的关键字可以用于三个地方。用于修饰类、类属性和类方法。
特征:凡是引用final关键字的地方皆不可修改!
(1)修饰类:表示该类不能被继承;
(2)修饰方法:表示方法不能被重写;
(3)修饰变量:表示变量只能一次赋值以后值不能被修改(常量)。

5.java中的Math.round(-1.5)等于多少?
-1.5+0.5=-1.0,然后-1.0向下取整结果为-1,最后的结果就是-1
问题的点就是计算规则中的+0.5,如果将-1.5换成+1.5的话结果就是
1.5+0.5=2.0,然后2.0向下取整结果为2

6.String 属于基础的数据类型吗?
不属于。
Java8种基础的数据类型:byte、short、char、int、long、float、double、boolean。

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”)一样吗?
不一样
因为内存的分配方式不一样。String str="i"的方式,Java 虚拟机会将其分配到常量池中;而 String str=new String(“i”)方式,则会被分到堆内存中。

9.如何将字符串反转?

//将字符串反转有几种方法!
public class StringReversal {
	/*
	 * 方法三:调用String对象的charAt()方法,将字符串从后往前依次取出来,
	 * 然后添加到StringBuffer当中去,在转换成String对象
	 */
	public static String reverse1(String str){
		StringBuffer sb = new StringBuffer();
		for (int x = str.length() -1; x >= 0; x--) {
			sb.append(str.charAt(x));
		}
		return sb.toString();
	}
 
	/*
	 * 方法二:将String对象转换成Stringbuffer对象后,
	 * 调用StringBuffer的reverse()方法实现反转,然后在转换成String对象
	 */
	public static String reverse(String str){
		StringBuffer sb = new StringBuffer(str);
		StringBuffer res = sb.reverse();
	    return res.toString();
	}
 
	/*
	 * 方法一:将String字符串转换成字符数组,反转字符数组后,在将数组转化为String对象
	 */
	public static String reversal(String str) {
		char[] array = str.toCharArray();
		for (int x = 0, y = array.length - 1; x < y; x++, y--) {
			char temp = array[x];
			array[x] = array[y];
			array[y] = temp;
		}
		return new String(array);
	}
	public static void main(String[] args) {
		String str = "飞利浦剃须刀";
		String st = reversal(str);
		System.out.println(st);
		
		String string = reverse(str);
		System.out.println(string);
		
		String str2 = reverse1(str);
		System.out.println(str2);
	}
}

10.String类的常用方法都有那些?
(1).indexOf():返回指定字符的索引。
(2).charAt():返回指定索引处的字符。
(3).replace():字符串替换。
(4).trim():去除字符串两端空白。
(5).split():分割字符串,返回一个分割后的字符串数组。
(6).getBytes():返回字符串的 byte 类型数组。
(7).length():返回字符串长度。
(8).toLowerCase():将字符串转成小写字母。
(9).toUpperCase():将字符串转成大写字符。
(10).substring():截取字符串。
(11).equals():字符串比较。

11.抽象类必须要有抽象方法吗?
答:不需要,
抽象类不一定有抽象方法;但是包含一个抽象方法的类一定是抽象类。(有抽象方法就是抽象类,是抽象类可以没有抽象方法)

12.普通类和抽象类有哪些区别?
1.抽象类不能被实例化
2.抽象类可以有抽象方法,抽象方法只需申明,无需实现
3.含有抽象方法的类必须申明为抽象类
4.如果没有实现抽象基类中所有的抽象方法,则子类成为一个抽象子类;如果实现抽象类中所有抽象方法,他就是非抽象子类;
5.抽象方法不能被声明为静态static
6.抽象方法不能用private修饰
7.抽象方法不能用final修饰

13.抽象类能使用final修饰吗?
不能,抽象类是被用于继承的,而用final修饰的类,无法被继承。

14.接口和抽象类有什么区别?
1.抽象类要被子类继承,接口要被类实现。
2.接口只能做方法声明,抽象类中可以作方法声明,也可以做方法实现。
3.接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
4.接口是设计的结果,抽象类是重构的结果。
5.抽象类和接口都是用来抽象具体对象的,但是接口的抽象级别最高。
6.抽象类可以有具体的方法和属性,接口只能有抽象方法和不可变常量。
7.抽象类主要用来抽象类别,接口主要用来抽象功能。

15.java中IO流分为几种?
IO流的分类:
(1)按照数据的流向:
输入流、输出流
(2)按照流数据的格式:
字符流、字节流
(3)按照流数据的包装过程:
节点流(低级流)、处理流(高级流)
常用的:
字节输入流(InputStream)
字节输出流(OutputStream)
字符输入流(Reader)
字符输出流(Writer)
16.BIO、NIO、AIO有什么区别?
Java共支持3种网络编程模型/IO模式:BIO、NIO、AIO。
Java BIO :同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销。
Java NIO :同步非阻塞,服务器实现模式为一个线程处理多个请求(连接),即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求就进行处理 。
Java AIO(NIO.2) :异步非阻塞,AIO 引入异步通道的概念,采用了 Reactor 模式,简化了程序编写,有效的请求才启动线程,它的特点是先由操作系统完成后才通知服务端程序启动线程去处理,一般适用于连接数较多且连接时间较长的应用。

17.Files的常用方法都有哪些?
Files. exists():检测文件路径是否存在。
Files. createFile():创建文件。
Files. createDirectory():创建文件夹。
Files. delete():删除一个文件或目录。
Files. copy():复制文件。
Files. move():移动文件。
Files. size():查看文件个数。
Files. read():读取文件。
Files. write():写入文件。
更多方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值