java面试题总结 -- java基础篇

java 2019面试题总结

题目来自:https://blog.csdn.net/sufu1065/article/details/88051083

JDK和JRE的区别?

jdk是java开发工具,其中包括jre和其他工具,其中还有编译java源码的javac,jre是java的运行环境,

== 和 equals 的区别?

== 是比较内存地址,equals是比较内容,Object中equals还是使用 ==比较,如果想要使用对象的内容比较,要重写equals方法

两个对象的hashCode()相同,则equals一定相同吗?

不一定,hashCode是为了更快速的比较对象是否相同,Set中要求不能添加相同的元素,如果都使用比较,当元素多时要比较的次数就非常多了,效率非常低,使用hashCode()计算出该元素存放的位置,再使用equals比较,当两者都相同时才说明对象是相同的

final 在 java 中有什么作用?

final修饰的类不可被继承,final修饰的方法不可以被重写,final修饰的变量不可被修改,
final修饰的变量是引用不可以被改变,但是对象中的值可以改变
final修饰的成员变量,必须在对象被创建之前赋值,否则编译失败
final成员变量的赋值,1:使用构造赋值,2:定义时直接赋值

java 中的 Math.round(-1.5) 等于多少?

Math类中提供了三个与取整有关的方法,ceil、floor、round,
ceil:向上取整
floor:向下取整
round表示四舍五入,为数值加0.5再向下取整

String 属于基础的数据类型吗?

不属于,java中基本数据类型有:byte,short,int,long,float,double,char,boolean
String 为final修饰,不可继承也不可修改

java 中操作字符串都有哪些类?它们之间有什么区别?

String,StringBuffer,StringBuilder
String:final 修饰的类,每次改变都会创建一个新的对象,效率较低
StringBuffer:StringBuffer是线程安全的,改变不会创建新的对象,效率较高
StringBuilder:StringBuilder不是线程安全的,不可以用于多线程中,同样改变不会创建新的对象,效率更高

效率:StringBuilder>StringBuffer>String

String str="i"与 String str=new String(“i”)一样吗?

不一样
String str = “i”:会把"i"这个字符串放到字符串常量池中,如果下次再有变量使用张三时会从字符串
常量池中检索,
String str = new String(“i”):会在堆内存中创建一个"i"对象,就算下次再次执行new String(“i”)会再次创建新的对象,

`String a = "i";
String b = "i";
String c = new String("i");
String d = new String("i");
System.out.println(a == b); // true
System.out.println(a == c); // false	
System.out.println(c == d); // false	
`

如何将字符串反转?

使用reverse()
如果需要自己写一个字符串反转,可以将字符串转换成数组,或者使用递归依次反转字符串

String s = new String(“xyz”);创建了几个String Object?二者之间有什么区别?

两个或一个,"xyz"对应一个对象,如果字符串常量池中已经存在"xyz"则只创建new String()这个String对象

String 类的常用方法都有那些?

split(),reverse(),length(),indexOf(),equals()

抽象类必须要有抽象方法吗?

不是必须的,但是如果一个类中有抽象方法,这个类必须是抽象类
抽象方法不能是static的,也不能被final修饰

普通类和抽象类有哪些区别?

1.普通类可以通过new创建实例,抽象类则不能
2.普通类中不能存在抽象方法
3.抽象类的子类如果不是抽象类则必须实现父类中的所有抽象方法
4.抽象类中可以有main函数
5.抽象类中可以有构造函数,被继承时子类必须继承父类的一个构造函数

接口和抽象类有什么区别?

接口之中的方法默认为public abstract,接口中的变量默认为public static final
1.接口中不能有构造方法,抽象类中可以有构造方法,被继承时子类必须继承父类中的一个构造函数
2.抽象类中可以有普通的成员变量,接口中没有普通成员变量,默认为public static final
3.抽象类中可以包括非抽象方法,接口中方法必须都为抽象的
4.抽象类中的抽象方法可以是public,protected,接口中抽象方法只能是public的
5.抽象类中可以包括静态方法,但不能是抽象静态方法,接口中不能包括静态方法
6.两者都可以包含静态成员变量,抽象类中静态成员变量的访问类型可以是任意的,接口中的静态成员变量只能是public的
7.接口可以多继承,抽象类只能单继承

java 中 IO 流分为几种?

字符流,字节流
字节流:继承与InputStream,OutputStream
字符流:继承与InputStreamReader,OutputStreamWriter
在java.io中还有许多其他流,是为了提高性能和使用方便

字节流与字符流的区别

简单点:
字节->解码->字符。
复杂点:
若干字节->选择某种解码方式->解码->索引字符集->映射到一个字符。
字节流是读一个字节就输出一个字节,不使用缓存,字符流使用缓存并转换成指定字符集的字符
在这里插入图片描述

switch语句能否作用在byte上,能否作用在long上,能否作用在String上?

在switch中的值只能是整数表达式或者枚举常量,其中byte,char,short都可以隐式转换成int,所以这些类型以及这些类型的包装类都可以,long不可以,String在JDK1.7之后才可以

BIO、NIO、AIO 有什么区别?

NIO:同步非阻塞IO,
BIO:同步阻塞IO
AIO:异步非阻塞IO

Files 都有哪些常用方法?

Files.exists() : 是否存在。
Files.mkdir() : 创建文件夹 。
Files.getName() : 获得文件名字或文件夹名字
Files.size() : 查看文件个数

getClass()的使用

import java.util.Date;
public class Test extends Date{
	public static void main(String[] args) {
		new Test().test();
		}
	public void test(){
		System.out.println(super.getClass().getName());
	}
}

getClass()在Object中定义为final子类不能重写,在test中使用getClass().getName()相当于使用super.getClass().getName(),返回Test,如果想要返回父类,应该使用getClass().getSuperClass().getName();

abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

抽象方法不能使静态的,抽象方法是要让子类去实现的,而static与子类没啥关系,static关联在类上,native是表示使用其他语言实现,也与子类无关,而synchronized是要作用在具体方法上,而且synchronized同步所使用的同步锁是要使用this对象的,而抽象方法的this不知道具体指向

修饰符的作用域

作用域当前类同包子孙类其他包
public
protected×
default××
private×××
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值