java面试题

原文链接:

https://blog.csdn.net/meism5/article/details/89021536

1.JDK 和 JRE 有什么区别?

JRE:Java Runtime Environment(java运行时环境)。即java程序的运行时环境,包含了java虚拟机,java基础类库。

JDK:Java Development Kit(java开发工具包)。即java语言编写的程序所需的开发工具包。

JDK包含了JRE,同时还包括java源码的编译器javac、监控工具jconsole、分析工具jvisualvm等。


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

== 的作用:

基本类型:比较值是否相等

引用类型:比较内存地址值是否相等

equals 的作用:

引用类型:默认情况下,比较内存地址值是否相等。可以按照需求逻辑,重写对象的equals方法。


3.基本类型的包装类对象使用 == 和 equals进行比较的结果


4.什么是装箱?什么是拆箱?装箱和拆箱的执行过程?常见问题?

装箱:基本类型转变为包装器类型的过程。通过调用包装器类的 valueOf 方法实现的;

拆箱:包装器类型转变为基本类型的过程。通过调用包装器类的 xxxValue 方法实现的,xxx代表对应的基本数据类型。

如int装箱的时候自动调用Integer的valueOf(int)方法;Integer拆箱的时候自动调用Integer的intValue方法。

常见问题:

整型的包装类 valueOf 方法返回对象时,在常用的取值范围内,会返回缓存对象。

浮点型的包装类 valueOf 方法返回新的对象。

布尔型的包装类 valueOf 方法 Boolean类的静态常量 TRUE | FALSE。


5.两个对象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返回相同的值。


6.final 在 java 中的作用是什么?

final 语义是不可改变的。

被 final 修饰的类,不能够被继承。

被 final 修饰的成员变量必须要初始化,赋初值后不能再重新赋值(可以调用本对象方法修改属性值)。对基本类型来说是其值不可变;对引用变量来说其引用不可变,即不能再指向其他的对象。

被 final 修饰的方法代表不能重写。

7.final finally finalize()区别

final 表示最终的、不可改变的。用于修饰类、方法和变量。

finally 异常处理的一部分,它只能用在try/catch语句中,表示希望finally语句块中的代码最后一定被执行(但是不一定会被执行)

finalize()是在java.lang.Object里定义的,Object的finalize方法什么都不做,对象被回收时finalized方法会被调用。

    特殊情况下,可重写finalize方法,当对象被回收的时候释放一些资源。但注意,要调用super.finalize()。


8.finally语句块一定执行吗?

答案是不一定。

直接返回未执行到finally语句块

抛出异常未执行到finally语句块

系统退出未执行到finally语句块


9.final 与 static 的区别

都可以修饰类、方法、成员变量。

static可以修饰类的代码块,final不可以。

static不可以修饰方法内的局部变量,final可以。

static修饰表示静态或全局,被修饰的属性和方法属于类,可以用类名.静态属性 / 方法名 访问

static修饰的代码块表示静态代码块,当Java虚拟机(JVM)加载类时,就会执行该代码块,只会被执行一次

static修饰的属性,也就是类变量,是在类加载时被创建并进行初始化,只会被创建一次

static修饰的变量可以重新赋值

static方法中不能用this和super关键字

static方法必须被实现,而不能是抽象的abstract

static方法只能被static方法覆盖

final修饰表示常量、一旦创建不可改变

final标记的成员变量必须在声明的同时赋值,或在该类的构造方法中赋值,不可以重新赋值

final方法不能被子类重写

final类不能被继承,没有子类,final类中的方法默认是final的

final不能用于修饰构造方法

private类型的方法默认是final类型的



10.return 与 finally 的执行顺序对返回值的影响

对于 try 和 finally 至少一个语句块包含 return 语句的情况:

finally 语句块会执行

finally 没有 return,finally 对 return 变量的重新赋值修改无效

try 和 finally 都包含return,return 值会以 finally 语句块 return 值为准



11.String对象中的replace和replaceAll的区别?

replace方法:支持字符和字符串的替换。

replaceAll方法:基于正则表达式的字符串替换。



12.Math.round(-1.5) 等于多少

-1。

扩展JDK中的java.lang.Math类

round:返回四舍五入,负.5小数返回较大整数,如-1.5返回-1。

ceil:返回小数所在两整数间的较大值,如-1.5返回-1。

tail:返回小数所在两整数间的较小值,如-1.5返回-2。


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

不属于。

Java8种基础的数据类型:byte、short、char、int、long、float、double、boolean。


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

String、StringBuffer、StringBuilder

String : final修饰,String类的方法都是返回new String。即对String对象的任何改变都不影响到原对象,对字符串的修改操作都会生成新的对象。

StringBuffer : 对字符串的操作的方法都加了synchronized,保证线程安全。

StringBuilder : 不保证线程安全,在方法体内需要进行字符串的修改操作,可以new StringBuilder对象,调用StringBuilder对象的append、replace、delete等方法修改字符串。


15.如何将字符串反转?

1、使用StringBuilder的reverse方法

2、不考虑字符串中的字符是否是Unicode编码,自己实现。


16.String 类的常用方法

equals 字符串是否相同

equalsIgnoreCase 忽略大小写后字符串是否相同

compareTo 根据字符串中每个字符的Unicode编码进行比较

compareToIgnoreCase 根据字符串中每个字符的Unicode编码进行忽略大小写比较

indexOf 目标字符或字符串在源字符串中位置下标

lastIndexOf 目标字符或字符串在源字符串中最后一次出现的位置下标

valueOf 其他类型转字符串

charAt 获取指定下标位置的字符

codePointAt 指定下标的字符的Unicode编码

concat 追加字符串到当前字符串

isEmpty 字符串长度是否为0

contains 是否包含目标字符串

startsWith 是否以目标字符串开头

endsWith 是否以目标字符串结束

format 格式化字符串

getBytes 获取字符串的字节数组

getChars 获取字符串的指定长度字符数组

toCharArray 获取字符串的字符数组

join 以某字符串,连接某字符串数组

length 字符串字符数

matches 字符串是否匹配正则表达式

replace 字符串替换

replaceAll 带正则字符串替换

replaceFirst 替换第一个出现的目标字符串

split 以某正则表达式分割字符串

substring 截取字符串

toLowerCase 字符串转小写

toUpperCase 字符串转大写

trim 去字符串首尾空格



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

抽象类不能被实例化

抽象类可以有抽象方法,抽象方法只需申明,无需实现

含有抽象方法的类必须申明为抽象类

抽象的子类必须实现抽象类中所有抽象方法,否则这个子类也是抽象类

抽象方法不能被声明为静态

抽象方法不能用private修饰

抽象方法不能用final修饰



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

不一定


19.抽象类能使用 final 修饰吗?

不能,抽象类是被用于继承的,final修饰代表不可修改、不可继承的。


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

抽象类可以有构造方法;接口中不能有构造方法。

抽象类中可以有普通成员变量;接口中没有普通成员变量。

抽象类中可以包含非抽象普通方法;接口中的所有方法必须都是抽象的。

抽象类中的抽象方法的访问权限可以是 public、protected 和 default;接口中的抽象方法只能是 public 类型的,并且默认即为 public abstract 类型。

抽象类中可以包含静态方法;JDK1.8 前接口中不能包含静态方法,JDK1.8 及以后可以包含已实现的静态方法。

抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量可以是任意访问权限;接口中变量默认且只能是 public static final 类型。

一个类可以实现多个接口,用逗号隔开,但只能继承一个抽象类。

接口不可以实现接口,但可以继承接口,并且可以继承多个接口,用逗号隔开。


21.Java4种访问修饰符权限的区别?

Java语言中有四种权限访问控制符,能够控制类中成员变量和方法的可见性。

public

    被public修饰的成员变量和方法可以在任何类中都能被访问到。

    被public修饰的类,在一个java源文件中只能有一个类被声明为public,而且一旦有一个类为public,那这个java源文件的文件名就必须要和这个被public所修饰的类的类名相同,否则编译不能通过。

protected

    被protected修饰的成员会被位于同一package中的所有类访问到,也能被该类的所有子类继承下来。

friendly

    默认,缺省的。在成员的前面不写访问修饰符的时候,默认就是友好的。

    同一package中的所有类都能访问。

    被friendly所修饰的成员只能被该类所在同一个package中的子类所继承下来。


private

    私有的。只能在当前类中被访问到。




22.Java中的 <<  >>  >>> 什么意思?

<<  表示左移,不分正负数,低位补0

>>  表示右移,如果该数为正,则高位补0,若为负数,则高位补1

>>> 表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0

<< 1  相当于乘以2

>> 1  相当于除以2

>>> 不考虑高位的正负号,正数的 >>> 等同于 >>


23.javap 指令

javap是 Java class文件分解器,可以反编译,也可以查看java编译器生成的字节码等。


24.throw 和 throws 的区别?

throw:

表示方法内抛出某种异常对象

如果异常对象是非 RuntimeException 则需要在方法申明时加上该异常的抛出 即需要加上 throws 语句 或者 在方法体内 try catch 处理该异常,否则编译报错

执行到 throw 语句则后面的语句块不再执行

throws:

方法的定义上使用 throws 表示这个方法可能抛出某种异常

需要由方法的调用者进行异常处理


25.try-catch-finally 中哪个部分可以省略?

catch 和 finally 语句块可以省略其中一个。


26.常见的异常类有哪些?

异常非常多,Throwable 是异常的根类。

Throwable 包含子类 错误-Error 和 异常-Exception 。

Exception 又分为 一般异常和运行时异常 RuntimeException。

运行时异常不需要代码显式捕获处理。

下图是常见异常类及其父子关系:

Throwable

|  ├ Error  

|  │ ├ IOError

|  │ ├ LinkageError

|  │ ├ ReflectionError

|  │ ├ ThreadDeath

|  │ └ VirtualMachineError

|  │ 

|  ├ Exception  

|  │ ├ CloneNotSupportedException

|  │ ├ DataFormatException

|  │ ├ InterruptedException

|  │ ├ IOException

|  │ ├ ReflectiveOperationException

|  │ ├ RuntimeException 

|  │    ├ ArithmeticException

|  │    ├ ClassCastException

|  │    ├ ConcurrentModificationException

|  │    ├ IllegalArgumentException

|  │    ├ IndexOutOfBoundsException

|  │    ├ NoSuchElementException

|  │    ├ NullPointerException

|  │ └ SecurityException

|  │ └  SQLException



27.java 中 IO 流有哪些?

按数据流向:输入流和输出流

    输入和输出都是从程序的角度来说的。输入流:数据流向程序;输出流:数据从程序流出。

按处理单位:字节流和字符流

    字节流:一次读入或读出是8位二进制;字符流:一次读入或读出是16位二进制。

    JDK中后缀是Stream是字节流;后缀是Reader,Writer是字符流。

按功能功能:节点流和处理流

    节点流:直接与数据源相连,读入或写出;处理流:与节点流一块使用,在节点流的基础上,再套接一层。



28.Collection 和 Collections 有什么区别?

Collection是JDK中集合层次结构中的最根本的接口。定义了集合类的基本方法。

Collections是一个包装类。它包含有各种有关集合操作的静态多态方法,不能实例化,像一个Collection集合框架中的工具类。


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容