Java面试题(二)

一:构造方法、成员变量初始化以及静态成员变量三者初始化顺序

先后顺序:静态成员变量、成员变量、构造方法

详细的先后顺序:父类静态变量、父类静态代码块、子类静态变量、子类静态代码块、父类非静态变量、父类非静态代码块、父类构造函数、子类非静态变量、子类非静态代码块、子类构造函数

详细解释:

1.静态成员变量(类变量):

  • 静态成员变量在类被加载到JVM时进行初始化。这通常发生在第一次使用该类时(例如,创建类的实例或访问类的静态成员时)。
  • 如果在声明静态成员变量时为其指定了初始值,那么它将在类加载时直接使用这个初始值。
  • 如果在静态初始化块中进行了初始化,那么静态初始化块中的代码将在类加载时执行,以设置静态成员变量的值。
  • 静态成员变量在所有实例被创建之前就已经被初始化了。

2.成员变量(实例变量):

  • 成员变量在创建类的实例(即对象)时进行初始化。
  • 如果在声明成员变量时为其指定了初始值,那么它将在创建对象时直接使用这个初始值。
  • 如果没有为成员变量指定初始值,并且该变量是类的基本类型,那么它将自动初始化为该类型的默认值(例如,int为0,boolean为false等)。
  • 如果在实例初始化块(非静态初始化块)中进行了初始化,那么这些代码将在创建对象时执行,以设置成员变量的值。
  • 实例初始化块在构造方法之前执行。

3.构造方法:

  • 构造方法是在创建对象时调用的,用于初始化对象的状态。
  • 在构造方法中,可以访问和修改对象的成员变量。
  • 如果存在多个构造方法,则可以根据需要选择性地调用它们来创建对象。
  • 构造方法在实例初始化块之后执行。

例如:

public class InitializationOrder {// 静态成员变量static int staticVar = 0;static {staticVar = 1; // 静态初始化块System.out.println("Static block: " + staticVar);}// 成员变量int instanceVar = 0;{instanceVar = 2; // 实例初始化块System.out.println("Instance block: " + instanceVar);}// 构造方法public InitializationOrder() {instanceVar = 3;System.out.println("Constructor: " + instanceVar);}public static void main(String[] args) {new InitializationOrder(); // 首次使用类,触发类加载和静态初始化块new InitializationOrder(); // 创建第二个对象,只触发实例初始化和构造方法}}

二:接口和抽象类的相同点和区别

相同点:

  1. 都可以被用来定义抽象方法,需要子类来实现这些方法。
  2. 都不能直接实例化,而是需要通过子类来实现并实例化。

区别:

  1. 接口可以定义方法但不能包含实现,而抽象类可以包含具体的方法实现。
  2. 类可以实现多个接口,但只能继承一个抽象类。
  3. 接口中的方法默认是public的,而抽象类中的方法可以有不同的访问修饰符。
  4. 接口中不能包含成员变量,而抽象类可以包含成员变量。
  5. 接口用于描述行为,而抽象类更多用于描述对象的特性

三:为什么Java不支持多重继承

1.复杂性管理:

         多重继承会引入复杂性,特别是在解决方法名冲突(diamond problem)和继承路径不明确的情况下。这可能导致代码理解和维护的困难。

2.歧义性:

         当一个类继承自多个父类时,如果这些父类中有相同的方法或字段,编译器无法确定应该使用哪个版本,造成歧义。

3.设计哲学:

         Java语言的设计哲学是简洁和易于理解。限制类只能单一继承可以帮助开发人员更容易地理解和推断类的行为。

4.接口的替代:

         Java提供接口来实现多态性和多继承类似的功能,使得类可以实现多个接口,从而避免了多继承带来的复杂性和潜在问题。

四:final、finally、和finalize的区别是什么

1. final用于声明属性、方法和类,分别表示属性不可变、方法不可覆盖、类不可继承。

2. finally作为异常处理的一部分,只能在try/catch语句中使用,finally附带一个语句块用来表示这个语句最终一定被执行,经常被用在需要释放资源的情况下。

3. finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的finalize()方法。当垃圾回收器准备好释放对象占用空间时,首先会调用finalize()方法,并在下一次垃圾回收动作发生时真正回收对象占用的内存。

五:String和StringBuffer有什么区别

String用于字符串操作,属于不可变类。String对象一旦被创建,其值将不能被改变。

StringBuffer是可变类,当对象创建后,仍然可以对其值进行修改。

六:为什么要把String设计为不可变变量?

1. 节省空间:字符串常量存储在JVM的字符串池中可以被用户共享。

2. 提高效率: String会被不同线程共享,是线程安全的。在涉及多线程操作中不需要同步操作。

3. 安全:String常被用于用户名、密码、文件名等使用,由于其不可变,可避免黑客行为对其恶意修改。

七:序列化是什么

        序列化是一种将对象转换成字节序列的过程,用于解决在对对象流进行读写操作时所引发的问题。序列化可以将对象的状态写在流里进行网络传输,或者保存到文件、数据库等系统里,并在需要的时候把该流读取出来重新构造成一个相同的对象。

八:Java的反射机制是什么

        Java反射机制是指在程序的运行过程中可以构造任意一个类的对象、获取任意一个类的成员变量和成员方法、获取任意一个对象所属的类信息、调用任意一个对象的属性和方法。反射机制使得Java具有动态获取程序信息和动态调用对象方法的能力。

可以通过以下类调用反射API:

        Class类:可获得类属性方法

        Field类:获得类的成员变量

        Method类:获取类的方法信息

        Construct类:获取类的构造方法等信息

九:自动拆箱和自动装箱

        对于Java基本数据类型,均对应一个包装类。装箱就是自动将基本数据类型转换为包装器类型,如int->Integer。

        拆箱就是自动将包装器类型转换为基本数据类型,如Integer->int。

十:简述内部类及其作用

成员内部类:作为成员对象的内部类。可以访问private及以上外部类的属性和方法。外部类想要访问内部类属性或方法时,必须要创建一个内部类对象,然后通过该对象访问内部类的属性或方法。外部类也可访问private修饰的内部类属性。局部内部类:存在于方法中的内部类。访问权限类似局部变量,只能访问外部类的final变量。匿名内部类:只能使用一次,没有类名,只能访问外部类的final变量。静态内部类:类似类的静态成员变量。

十一:简述Java的HashMap

        JDK8 之前底层实现是数组 + 链表,JDK8 改为数组 + 链表/红黑树。主要成员变量包括存储数据的table 数组、元素数量 size、加载因子 loadFactor。

        HashMap 中数据以键值对的形式存在,键对应的 hash 值用来计算数组下标,如果两个元素 key 的hash 值一样,就会发生哈希冲突,被放到同一个链表上。

        table 数组记录 HashMap 的数据,每个下标对应一条链表,所有哈希冲突的数据都会被存放到同一条链表,Node/Entry 节点包含四个成员变量:key、value、next 指针和 hash 值。在JDK8后链表超过8会转化为红黑树。

        若当前数据/总数据容量>负载因子,Hashmap将执行扩容操作。默认初始化容量为 16,扩容容量必须是 2 的幂次方、最大容量为 1

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙开发Ability Kit(程序框架服务):【选择申请权限的方式】

选择申请权限的方式 应用在访问数据或者执行操作时,需要评估该行为是否需要应用具备相关的权限。如果确认需要目标权限,则需要在应用安装包中申请目标权限。 每一个权限的权限等级、授权方式不同,申请权限的方式也不同,开发者在…

java spring 拦截器和过滤器+过滤器处理数据

java spring 拦截器和过滤器过滤器处理数据 介绍Spring拦截器(Interceptor)导入依赖完整代码 Java过滤器(Filter)完整代码分为 2 个文件,请看下面BodyReaderHttpServletRequestWrapper.javaMyFilter.java Spring过滤器…

51单片机第1步_putchar()和_getkey()应用

没有开发板,没有烧录器,没有学习场所,如何学习写51单片机的程序?除了采用软件模拟仿真,没有更好的方法,因此,使用串口是学习的第一步。 1、_getkey ()函数 在C:\Keil\C51\LIB中有一个叫GETKEY…

DataWhale-吃瓜教程学习笔记 (五)

学习视频:第4章-决策树_哔哩哔哩_bilibili 西瓜书对应章节: 第四章 4.1;4.2 文章目录 决策树算法原理- 逻辑角度- 几何角度 ID3 决策树- 自信息- 信息熵 (自信息的期望)- 条件熵 ( Y 的信息熵关于概率分布 …

python selenium 打开网页

selenium工具类 - 文件名 seleniumkit.py 代码如下 # -*- coding:utf-8 _*-from selenium import webdriverimport os import timefrom selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from seleniu…

Ascend基于自定义算子工程的算子开发

环境准备 见https://gitee.com/zaj1414904389/ascend-tutorial.git 工程创建 CANN软件包中提供了工程创建工具msopgen,开发者可以输入算子原型定义文件生成Ascend C算子开发工程 [{"op": "AddCustom","input_desc": [{"name…

CVPR2024 轨迹预测系列(一)

CVPR2024 轨迹预测系列(一) 文章目录 CVPR2024 轨迹预测系列(一)一、Adapting to Length Shift: FlexiLength Network for Trajectory Prediction.1、Abstract2、FlexiLength Network3、Datasets4、Experiments5、Implementation …

分类预测 | PSO-PNN基于粒子群算法优化概率神经网络的数据分类预测(Matlab)

分类预测 | ZOA-PCNN-AT-SVM斑马优化并行卷积-支持向量机融合注意力机制的故障识别 目录 分类预测 | ZOA-PCNN-AT-SVM斑马优化并行卷积-支持向量机融合注意力机制的故障识别分类效果基本描述程序设计参考资料 分类效果 基本描述 1.PSO-PNN基于粒子群算法优化概率神经网络的数据…

长鑫存储母公司斥资24亿美元发展国产HBM

国产DRAM厂商长鑫存储母公司睿力集成计划投资24亿美元在上海建一座高端封装工厂。据报道,该工厂将专注于高带宽存储器(HBM)芯片的封装,预计到2026年中开始投入生产。长鑫存储将利用来自多方投资者的资金进行建设,其中包…

鼠尾草(洋苏草)

鼠尾草(Salvia japonica Thunb.),又名洋苏草、普通鼠尾草、庭院鼠尾草,属于唇形科鼠尾草属多年生草本植物。鼠尾草以其独特的蓝紫色花序和长而细密的叶片为特点,常用于花坛、庭院和药用植物栽培。 鼠尾草的名字源自于…

江科大笔记—读写内部闪存FLASH读取芯片ID

读写内部闪存FLASH 右下角是OLED,然后左上角在PB1和PB11两个引脚,插上两个按键用于控制。下一个代码读取芯片ID,这个也是接上一个OLED,能显示测试数据就可以了。 STM32-STLINK Utility 本节的代码调试,使用辅助软件…

Langchain-实战篇-搭建本地问答机器人-01

项目背景 在这个快节奏的职场世界里,我们每个人都可能在某个时刻,化身为一头辛勤的牛或一匹奔腾的马,面对入职签合同时的迷茫,或是离职时的纠纷,心中难免会涌现出各种疑问。比如: "这份合同里的条款…

Python在Excel中设置数字格式和获取应用数字格式后的值

目录 安装Python Excel库 Python在Excel中设置数字格式 Python获取Excel中应用数字格式的单元格的显示值 总结 Excel 数字格式是用于控制单元格中数字显示方式的一组规则或代码。通过设置不同的数字格式,可以定义数字的显示方式,如小数位数、货币符号…

如何使用PHP和Selenium快速构建自己的网络爬虫系统

近年来,随着互联网的普及,网络爬虫逐渐成为了信息采集的主要手段之一,然而,常规的爬虫技术不稳定、难以维护,市面上的纯web网页爬虫也只能在静态页面上进行操作。而php结合selenium可达到动态爬虫的效果,具…

Java对应C++ STL的用法

sort: 1:java.util.Arrays中的静态方法Arrays.sort()方法,针对基本数据类型和引用对象类型的数组元素排序 2:java.util.Collections中的静态方法的Collections.sort()方法,针对集合框架中的动态数组,链表&…

iOS17系统适配

iOS17 新功能 文章目录 iOS17 新功能iOS17支持哪几款机型Xcode15新特性iOS17-开发适配指南 横屏待机 在iOS 17中,还带来了横屏待机功能,苹果将这个新功能命名为“Standby”模式,为 iPhone 带来了全新的玩法。iPhone启用之后,默认情…

1-Pandas是什么

Pandas是什么 Pandas 是一个开源的第三方 Python 库,从 Numpy 和 Matplotlib 的基础上构建而来,享有数据分析“三剑客之一”的盛名(NumPy、Matplotlib、Pandas)。Pandas 已经成为 Python 数据分析的必备高级工具,它的…

PyTorch Tensor进阶操作指南(二):深度学习中的关键技巧

本文主要讲tensor的裁剪、索引、降维和增维 Tensor与numpy互转、Tensor运算等,请看这篇文章 目录 9.1、首先看torch.squeeze()函数: 示例9.1:(基本的使用) 小技巧1:如何看维数 示例9.2:&a…

Header Location重定向机制解析与应用

Header Location重定向机制解析与应用 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨HTTP中的Header Location重定向机制,以及在…

安全架构概述_1.信息安全面临的威胁

在当今以计算机、网络和软件为载体的数字化服务几乎成为人类赖以生存的手段。与之而来的计算机犯罪呈现指数上升趋势,因此,信息的可用性、完整性、机密性、可控性和不可抵赖性等安全保障显得尤为重要,而满足这些诉求,离不开好的安…