Java面试题库——Java基础

1.面向对象的特征有哪些方面?

- 抽象:是将一类对象的共同特征总结出来构造类的过程。
- 封装:是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。封装就是隐藏一切可以隐藏的东西,只对外提供最简单的接口。
- 继承:是从已有类得到继承信息创建新类的过程。
- 多态:一种事物的多种表现形态就是多态。允许不同子类型对同一消息作出不同的响应。用同样的对象调用同样的方法做了不同的事。

2.Java的基本数据类型有哪些?

Java有8个基本数据类型:
整型:byte、int、short、long
字符型:char
浮点型:float、double
布尔型:boolean

3.Java的访问修饰符有哪些?

public:公开,所有类都可以访问
protected:受保护的,同一个包或者有父子关系的类可以访问
default:默认的,同一个包中的其它类可以访问
private:私有的,只有当前类可以访问

4.JDK和JRE有什么区别?

jdk:是面向开发人员的,是开发工具包,包括开发人员需要用到的一些类。
jre:是java运行时环境,包括java虚拟机等,是提供给使用Java的人用的

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

== :是一个运算符,可以判断基本类型也可以判断引用类型。判断基本类型时,就是判断两者的值是否相等;判断引用类型时,就是判断两者的地址是否相等,也就是说判断实际对象是不是同一个。
equals :是 Object 中的方法,只能判断引用类型,也是通过判断两者地址是否相等。一般情况下,子类会重写这个 equals 方法,以添加判断内容是否相等的功能。

6.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?

不对,hashCode 只是Java 用来标识对象的,不等同于地址,hashCode也是可以重写的,所以不一定。
但如果equals()相同,那么hashCode是一定相等的。

7.final 在 java 中有什么作用?

修饰类不可被继承
修饰方法不能被重写
修饰变量不能被修改

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

结果为:-1
向上取整Math.ceil();
向下取整Math.floor();
四舍五入Math.round(x);算法为 Math.floor(x+0.5),即将原来的数字加上 0.5 后再向下取整

9.String 属于基本数据类型吗?

不属于,String 是final修饰的Java类,是属于引用数据类型

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

String、StringBuffer、StringBuilder
String是只读字符串,引用的字符串中的内容是不可更改的。
StringBuilder是Java5引入的,StringBuffer和StringBuilder的方法完全相同,都可以对同一个对象做更新,区别是StringBuilder是在单线程环境下使用,是线程不安全的,而StringBuffer是线程安全的。

11.内存中栈(stack)、堆(heap)和静态区的用法

栈:是由系统自动分配的,通常定义一个基本数据类型的变量,一个对象的引用,还有函数调用的现场保存都使用内存中的栈空间。
堆:是人为申请开辟的,通过new关键字和构造器创建的对象放在堆空间中。
静态区:程序中的字面量和常量存放在静态区中。

String str = new String("hello");
上面的语句中变量 str 放在栈上,用 new 创建出来的字符串对象放在堆上,而"hello"这个字面量放在静态区

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

不一样,它们不是同一个对象
前者如果定义多个变量都为相同值的话,会公用同一个地址,创建的对象应该放在了常量池中;
后者是创建了一个新的对象,放在堆内存中。

13.请写出以下代码的运行结果

public class Test {
	public static void main(String[] args) {
		Integer num1 = 100,num3 = 150;
		Integer num2 = 100;num4 = 150;
 
		System.out.println(num1 == num2);
        System.out.println(num3 == num4);
	}
}
运行结果:
    true false

解释:在Java中,Integer类会对在-128到127范围内的整数值进行缓存。Java的Integer缓存机制仅适用于通过自动装箱或使用Integer.valueOf(int)方法创建的Integer对象。在这种情况下,Java会返回缓存的对象实例。
所以说,如果我们使用在 -128 到 127 范围内的值创建 Integer 对象时,这时引用变量指向的都是同一个对象,所以我们使用 == 会返回 true。

14.如何将字符串反转?

使用StringBuffer 或 StringBuilder 的 reverse 成员方法。

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

equals():判断是否相等
contains():是否包含某字符
indexOf():某字符第一次出现的索引
charAt():返回在指定索引处的字符
replace():将字符串中的某字符都替换成指定字符
subString():截取子字符串
length():获取字符串长度
split():根据给定正则表达式的匹配拆分此字符串
concat():将指定字符串连接到此字符串的结尾
isEmpty():是否为空
valueOf():返回给定类型参数的字符串表示形式

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

不是。抽象类可以没有抽象方法,但是如果你的一个类已经声明成了抽象类,即使这个类中没有抽象方法,它也不能再实例化,即不能直接构造一个该类的对象。如果一个类中有了一个抽象方法,那么这个类必须声明为抽象类,否则编译通不过。

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

不能。

18.接口和抽象类有什么异同?

同:都不能被实例化,即不能直接构造一个该类的对象,但可以定义抽象类和接口类型的引用。方法都不包含主体,一个类如果继承了某个抽象类或者实现了某个接口都要对其中的抽象方法全部进行实现。

异:接口用interface修饰,抽象类使用abstract修饰。一个类只能继承一个抽象类,但是可以实现多个接口。接口比抽象类更抽象,不能定义构造器且全是抽象方法,成员全是public,定义的成员变量实际都是常量。

19.重载和重写的区别

重载:发生在同一个类中。重载要求必须有不同的参数列表;可以有不同的访问修饰符;也可以抛出不同的异常;对返回类型没有特殊要求。

重写:发生在父类和子类之间。重写要求参数列表必须与被重写的相同;返回的类型必须保持一致;修饰符和抛出的异常不能在被重写的方法之外。

20.java 中 IO 流分为几种?

字节流:InputStream、OutputStream
字符流:Reader、Writer

字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串;
字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。

21.BIO、NIO、AIO 有什么区别?

BIO:Block IO 同步阻塞式 IO;BIO是一个连接一个线程。JDK4之前的唯一选择
NIO:Non IO 同步非阻塞 IO;NIO是一个请求一个线程。JDK4之后开始支持,常见聊天服务器
AIO:Asynchronous IO  异步非阻塞IO;AIO是一个有效请求一个线程。JDK7之后开始支持,常见相册服务器

22.静态变量和实例变量的区别

静态变量属于类,不管一个类创建多少个对象,静态变量在一个区中有且仅有一个拷贝;可以实现多个对象共享内存。
实例变量必须依存于某一实例,要先创建对象然后才能通过对象访问它。

23.JDK8新特性

接口默认方法:Java8允许接口中添加非抽象的方法的实现,只需要default关键字进行修饰。
Lambda表达式:是一种匿名内部类的简洁表达方式,可以将功能视为方法的参数进行传递。
函数式接口:是一种只有一个抽象方法的接口,通常与Lambda表达式一起用。
Stream API:新增的一个用于处理集合的强大工具。
Optional类:可以为null的容器对象,避免空指针异常。
日期时间API的改进;并发增强;可重复注解;类型推断的改进以及安全性等方面的增强。

24.JVM加载class文件的原理机制

JVM中类的装载是由类加载器和它的子类来实现的,类加载器包括:根加载器(BootStrap)、扩展加载器(Extension)、系统加载器(System)和用户自定义类加载器(java.lang.ClassLoader 的子类)。
JVM把描述类数据的字节码.Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是虚拟机的类加载机制。

25.int 和 Integer 有什么区别?

答:Java 是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java 为每一个基本数据类型都引入了对应的包装类型(wrapper class),int 的包装类就是 Integer,从 Java 5 开始引入了自动装箱/拆箱机制,使得二者可以相互转换。
Java 为每个原始类型提供了包装类型:
- 原始类型: boolean,char,byte,short,int,long,float,double
- 包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double

26.&和&&的区别?

&运算符有两种用法:(1)按位与;(2)逻辑与。&&运算符是短路与运算。逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是 true 整个表达式的值才是 true。&&之所以称为短路运算是因为,如果&&左边的表达式的值是 false,右边的表达式会被直接短路掉,不会进行运算。很多时候我们可能都需要用&&而不是&,例如在验证用户登录时判定用户名不是 null 而且不是空字符串,应当写为:username != null &&!username.equals(""),二者的顺序不能交换,更不能用&运算符,因为第一个条件如果不成立,根本不能进行字符串的 equals 比较,否则会产生 NullPointerException 异常。注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。

27.用最有效率的方法计算 2 乘以 8

2 << 3(左移 3 位相当于乘以 2 的 3 次方,右移 3 位相当于除以 2 的 3 次方)。

28.数组有没有 length()方法?String 有没有 length()方法?

数组没有 length()方法,有 length 的属性。String 有 length()方法。JavaScript 中,获得字符串的长度是通过 length 属性得到的,这一点容易和 Java 混淆。

29.构造器(constructor)是否可被重写(override)?

构造器不能被继承,因此不能被重写,但可以被重载。

30.两个对象值相同(x.equals(y) == true),但却可有不同的 hash code,这句话对不对?

不对,如果两个对象 x 和 y 满足 x.equals(y) == true,它们的哈希码(hash code)应当相同。Java 对于 eqauls 方法和 hashCode 方法是这样规定的:(1)如果两个对象相同(equals方法返回 true),那么它们的 hashCode 值一定要相同;(2)如果两个对象的 hashCode 相同,它们并不一定相同。

31.Java 中会存在内存泄漏吗,请简单描述。

理论上 Java 因为有垃圾回收机制(GC)不会存在内存泄露问题(这也是 Java 被广泛使用于服务器端编程的一个重要原因);然而在实际开发中,可能会存在无用但可达的对象,这些对象不能被 GC 回收,因此也会导致内存泄露的发生。例如 Hibernate 的 Session(一级缓存)中的对象属于持久态,垃圾回收器是不会回收这些对象的,然而这些对象中可能存在无用的垃圾对象,如果不及时关闭(close)或清空(flush)一级缓存就可能导致内存泄露。

32.如何实现对象克隆?

有两种方式:
(1). 实现 Cloneable 接口并重写 Object 类中的 clone()方法;
(2). 实现 Serializable 接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆

33.什么时候用断言(assert)?

断言在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。一般来
说,断言用于保证程序最基本、关键的正确性。断言检查通常在开发和测试时开启。为了
保证程序的执行效率,在软件发布后断言检查通常是关闭的。断言是一个包含布尔表达式
的语句,在执行这个语句时假定该表达式为true;如果表达式的值为false,那么系统会报告
一个AssertionError。

34.Error和Exception有什么区别?

Error表示系统级的错误和程序不必处理的异常,是恢复不是不可能但很困难的情况下的一种严重问题;比如内存溢出,不可能指望程序能处理这样的情况;
Exception表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现问题;也就是说,它表示如果程序运行正常,从不会发生的情况。

35.列出一些你常见的运行时异常

- ArithmeticException(算术异常)
- ClassCastException (类转换异常)
- IllegalArgumentException (非法参数异常)
- IndexOutOfBoundsException (下标越界异常)
- NullPointerException (空指针异常)
- SecurityException (安全异常)

36.Java语言如何进行异常处理,

一般情况下是用try来执行一段程序,如果系统会抛出(throw)一个异常对象,可以通过它的类型来捕获(catch)它,或通过总是执行代码块(finally)来处理;try用来指定一块预防所有异常的程序;catch子句紧跟在try块后面,用来指定你想要捕获的异常的类型;throw语句用来明确地抛出一个异常;throws用来声明一个方法可能抛出的各种异常(当然声明异常时允许无病呻吟);finally为确保一段代码不管发生什么异常状况都要被执行。

37.阐述final、finally、finalize的区别。

- final:修饰符(关键字)有三种用法:如果一个类被声明为final,意味着它不能再派生出新的子类,即不能被继承,因此它和abstract是反义词。将变量声明为final,可以保证它们在使用中不被改变,被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取不可修改。被声明为final的方法也同样只能使用,不能在子类中被重写。
- finally:通常放在try…catch…的后面构造总是执行代码块,这就意味着程序无论正常执行还是发生异常,这里的代码只要JVM不关闭都能执行,可以将释放外部资源的代码写在finally块中。
- finalize:Object类中定义的方法,Java中允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在销毁对象时调用的,通过重写finalize()方法可以整理系统资源或者执行其他清理工作。

38.如何将 GB2312 编码的字符串转换为 ISO-8859-1 编码的字符串呢?

String str1 = new String(str.getBytes("GB2312"),"ISO-8859-1");

39.说说 Java 中多态的实现原理是什么?

Java多态机制包括静态多态 ( 编译时多态 )和动态多态 ( 运行时多态 ),静态多态比如说重载, 动态多态比如说重写,一般指在运行时才能确定调用哪个方法。通常说的多态是指动态多态。
多态的实现原理主要依赖于以下两个核心概念
继承:子类可以继承父类的属性和方法。当一个类继承另一个类时,子类将拥有父类的所有公共属性和方法,包括方法的签名(方法名称、参数列表和返回类型)。这使得子类可以覆盖(重写)父类的方法,并给出自己的实现。
方法重写:子类可以在继承的基础上对父类的方法进行重写。方法重写是指子类提供了与父类方法签名相同的方法,并且可以在子类中重新实现该方法。重写的方法可以提供新的实现,覆盖父类中的方法。在运行时,通过基类或接口类型引用子类对象时,将根据实际对象的类型来调用方法,而不是根据引用类型

40.Java中是值传递还是引用传递?

Java中的参数传递是值传递的,无论是基本数据类型还是对象类型,实际参数的值都会被复制一份传递给方法中的形式参数。对于基本数据类型,传递的是值本身;对于对象类型,传递的是对象的引用(地址)。这种值传递的方式使得方法中对参数的修改不会影响到原始值(对于基本数据类型)或原始对象的引用(对于对象类型)。

41.break 和 continue 有什么区别?

break:可以使流程跳出 switch 语句体,也可以在循环结构终止本层循环体,从而提前结束本层循环。
continue:的作用是跳过本次循环体中余下尚未执行的语句,立即进行下一次的循环条件判定,可以理解为仅结束本次循环。

42.switch支持的数据类型有哪些?

byte、short、char 、int、String(String 需要Java 7 及更高版本)

43.Comparator和Comparable有什么不同?

Comparable接口是在对象自身类中实现的,用于定义对象的自然排序规则,适用于对象自身的比较。Comparator接口是独立的比较器,用于定义不同的比较规则,适用于对不同对象的比较和排序。使用Comparable接口可以使对象具备自然排序的能力,而使用Comparator接口可以根据不同的比较规则灵活地进行对象排序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/898628.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Unity 实用工具篇】 | UGUI 循环列表 SuperScrollView,快速上手使用

前言 【Unity 实用工具篇】 | UGUI 循环列表 SuperScrollView&#xff0c;快速上手使用一、UGUI ScrollRect拓展插件&#xff1a;SuperScrollView1.1 介绍1.2 效果展示1.3 使用说明及下载 二、SuperScrollView 快速上手使用2.1 LoopListView22.2 LoopGridView2.3 LoopStaggered…

【Python爬虫】获取汽车之家车型配置附代码(2024.10)

参考大哥&#xff0c;感谢大哥&#xff1a;https://blog.csdn.net/weixin_43498642/article/details/136896338 【任务目标】 工作需要想更方便地下载汽车之家某车系配置清单&#xff1b;&#xff08;垃圾汽车之家不给下载导出表格&#xff0c;配置页叉掉了车系要出来还要重新…

提问: 监督学习, 无监督学习, 机器学习, 深度学习的关系? (通义千问2.5的回答)

前言: 以下内容由AI大模型通义千问大模型2.5生成 监督学习, 无监督学习, 机器学习, 深度学习的关系? 监督学习、无监督学习、机器学习和深度学习是人工智能领域的几个重要概念&#xff0c;它们之间存在一定的关系和区别。下面我将详细解释这些概念及其相互之间的关系&#xf…

Unity中使用UnityEvent遇到Bug

UnityEvent绑定过程中&#xff0c;放在Start&#xff08;&#xff09;中绑定会报错&#xff08;通过脚本添加UnityEvent事件脚本&#xff0c;绑定&#xff09; 绑定事件放在OnEnable&#xff08;&#xff09;中不会报错&#xff0c;但是依然不可以立刻添加UnityEvent事件脚本紧…

GeoWebCache1.26调用ArcGIS切片

GeoServer GeoWebCache (osgeo.org) 一、版本需要适配&#xff1a;Geoserver与GeoWebCache、jdk等的版本适配对照 ​ 查看来源 二、准备工作 1、数据&#xff1a;Arcgis标准的切片&#xff0c;通过ArcGIS Server发布的切片文件&#xff0c;注意切片的存储格式为exploded&…

rust入门基础总结

文章目录 前言1、输出格式规范一、占位符相关&#xff08;一&#xff09;{}与{:?} 二、参数替换方式&#xff08;一&#xff09;位置参数&#xff08;二&#xff09;具名参数 三、格式化参数&#xff08;一&#xff09;宽度&#xff08;二&#xff09;对齐&#xff08;三&…

电脑异常情况总结

文章目录 笔记本无症状息屏黑屏 笔记本无症状息屏黑屏 &#x1f34e; 问题描述&#xff1a; 息屏导致黑屏&#xff1b;依次操作计算机--》右键--》管理--》事件查看器--》Windows日志--》系统&#xff1b;从息屏到异常黑屏之间出现了很多错误&#xff0c;如下&#xff1a;事件…

如何区别医疗器械唯一标识(UDI)、医用耗材统一标识码(HCBS)和医保医用耗材编码

医疗器械唯一标识&#xff08;UDI&#xff09;、医用耗材统一标识码&#xff08;HCBS&#xff09;和医保医用耗材编码三种重要标识&#xff0c;在医疗领域发挥着举足轻重的作用。 医疗器械唯一标识UDI码是被比喻成医疗器械产品的“身份证”&#xff08;每个人都有&#xff09;…

「AIGC」n8n AI Agent开源的工作流自动化工具

n8n AI Agent 是一个利用大型语言模型(LLMs)来设计和构建智能体(agents)的工具,这些智能体能够执行一系列复杂的任务,如理解指令、模仿类人推理,以及从用户命令中理解隐含意图。n8n AI Agent 的核心在于构建一系列提示(prompts),使 LLM 能够模拟自主行为。 传送门→ …

鸿蒙软件开发中常见的如何快速自动生成二维码?QRCode组件

QRCode 用于显示单个二维码的组件。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 二维码组件的像素点数量与内容有关&#xff0c;当组件尺寸过小时&#xff0c;可能出现无法展示内容的情况&…

电脑输入账号密码后,屏幕黑屏只有鼠标解决办法

最近办公电脑出现了两次输入密码后,屏幕黑屏之后鼠标能动的问题,只能有手机查一些资料尝试自己解决,具体什么原因导致的暂时还不清楚。解决这个问题大概有两个方案吧&#xff0c;第一次黑屏用的第一个方案&#xff0c;第二次发现第一个方案不好用了就用的第二个方案。 方案一 …

【Python-AI篇】人工智能机器学习

1. 机器学习简介 1.1 机器学习流程 获取数据 SKLEARN数据集查看数据分布数据集分类 数据基本处理 缺省值处理缩小数据范围异常数据处理数据分割类别不平衡数据处理方式 特征工程机器学习(算法) K-近邻算法线性回归线性回归的改进-岭回归逻辑回归(分类)决策树朴素贝叶斯SVMEM算…

创建型模式-----(单例模式)

目录 基本概念 饿汉式&#xff1a; 懒汉式&#xff1a; 上锁双判空版本 std::call_once版本&#xff1a; C11标准后局部静态变量版本&#xff1a; 项目中单例模板的应用 基本概念 单例模式&#xff1a;在程序运行期间只有一份&#xff0c;与程序生存周期一样&#xff0c;…

记一行代码顺序引起的事故

01 前情回顾 在这里跟同学们分享一个前几天在线上遇见的 bug… bug描述&#xff1a;客户端轮询服务端接口获取数据做打字机效果展示&#xff0c;会偶现输出到一半就停止不动了&#xff0c;但是数据还没输出完&#xff08;如下图&#xff0c;到红色部分就卡住了&#xff09;。…

【Axure高保真原型】移动案例

今天和大家分享多个常用的移动案例的原型模板&#xff0c;包括轮盘滑动控制元件移动、页面按钮控制元件移动、鼠标单击控制元件移动、元件跟随鼠标移动、鼠标拖动控制元件移动、键盘方向键控制元件移动&#xff0c;具体效果可以点击下方视频观看或打开下方预览地址查看哦 【原…

虚拟装配解决方案:在虚拟现实中实现移动零件与三维模型碰撞检测

装配过程占产品开发时间和成本的很大一部分。在投入生产前对产品装配进行碰撞检测能够有效的降低因设计疏忽所导致的重复试错所导致的成本增加&#xff0c;并进一步降低设计审核整体流程所需时间。 选择、移动和操作3D模型的各个部分 TechViz多通道软件具有通用零件识别引擎&am…

Core webapi<1>特性 Route、Bind、HttpGet、Consumes、Produces

微软资料 Consumes Produces 让 API 返回 text/json 类型的数据。因为默认情况下&#xff0c;API 返回数据使用 application/json 格式&#xff0c;所以&#xff0c;咱们要改为 text/json&#xff0c;就得用 Produces 特性。

Java最全面试题->Java基础面试题->JavaEE面试题->Web应用服务器面试题

文章目录 Web应用服务器面试题Tomcat是什么?Tomcat缺省端口是多少&#xff0c;如何修改&#xff1f;Tomcat 有那几种Connector 运行模式&#xff1f;什么是Servlet&#xff1f;Servlet请求过程&#xff1f;Tomcat执行流程&#xff1f;Tomcat部署方式?什么是JBoss ?在JBoss 7…

UG NX12.0建模入门笔记:1.1 UG界面编辑

文章目录 一、用户默认设置&#xff1a;修改新建零件时的默认存储路径。二、用户默认设置&#xff1a;修改默认图纸的尺寸单位。三、如何移除不需要的工具栏&#xff1f;四、如何将角色设置成高级&#xff0c;以使用更多的功能&#xff1f;五、如何修改软件背景颜色&#xff1f…

w~自动驾驶合集9

我自己的原文哦~ https://blog.51cto.com/whaosoft/12320882 #自动驾驶数据集全面调研 自动驾驶技术在硬件和深度学习方法的最新进展中迅速发展&#xff0c;并展现出令人期待的性能。高质量的数据集对于开发可靠的自动驾驶算法至关重要。先前的数据集调研试图回顾这些数据集&…