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.mfbz.cn/a/757879.html

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

相关文章

6.优化算法之模拟

1.替换所有的问号 . - 力扣&#xff08;LeetCode&#xff09; class Solution {public String modifyString(String s) {char[] sss.toCharArray();int nss.length;for(int i0;i<n;i){if(ss[i]?){for(char cha;ch<z;ch){if((i0||ss[i-1]!ch)&&(in-1||ss[i1]!c…

湖南(市场调研)源点咨询 市场研究中定性调研的优势与局限性

定性调研指的是调研的结果不经量化或数量分析。 它通常用于分析态度、感觉和动机。定性调研特别是焦点小组访谈法还在继续普及&#xff0c;原因有以下三个&#xff1a; 第一&#xff0c;定性调研通常比定量调研成本低&#xff1b; 第二&#xff0c;定性调研在了解消费者内心…

滑动窗口2

1. 水果成篮&#xff08;904&#xff09; 题目描述&#xff1a; 算法原理&#xff1a; 根据题目意思&#xff0c;friuts表示第i棵树上的水果种类&#xff0c;然后我们有两个篮子去在这些树上去采水果&#xff0c;但是有限制就是一个篮子里就只能装一种水果&#xff0c;也就是…

【简单讲解下OneFlow深度学习框架】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

SM2258XT量产工具,SM2258XT开卡三星SSV4颗粒成功分享,SM2259XT量产参考教程,威刚ADATA SP580开卡记录

前两天拆了笔记本上的威刚ADATA SP580 240GB&#xff0c;准备做移动硬盘用&#xff0c;装入移动硬盘盒之后接入电脑&#xff0c;发现系统可认盘&#xff0c;SMART显示正常&#xff0c;Windows的磁盘管理能显示正确容量&#xff0c;但处于未初始化状态&#xff0c;且始终无法初始…

病理性不对称引导的渐进学习用于急性缺血性脑卒中梗死分割| 文献速递-先进深度学习疾病诊断

Title 题目 Pathological Asymmetry-Guided Progressive Learning for Acute Ischemic Stroke Infarct Segmentation 病理性不对称引导的渐进学习用于急性缺血性脑卒中梗死分割 01 文献速递介绍 中风已经成为第二大致命疾病&#xff0c;大约70%的中风是缺血性的。众所周知…

AI in Law 法律领域AI应用-基于DeepNLP AI App Store 评论评测和排名

来源: quora 社区: https://deepnlpaistore.quora.com/ github: https://github.com/rockingdingo/deepnlp/blob/master/store/law.md 法律领域哪些AI服务应用更能满足用户的需求&#xff0c;排名最高? 参考deepnlp.org网站根据用户真实评论打分和show case分享&#xff0c;分…

java基于ssm+jsp 二手手机回收平台系统

1前台首页功能模块 二手手机回收平台系统&#xff0c;在系统首页可以查看首页、手机商城、新闻资讯、我的、跳转到后台、购物车等内容&#xff0c;如图1所示。 图1前台首页功能界面图 用户注册&#xff0c;在用户注册页面可以填写账号、密码、姓名、手机、邮箱、照片、地址、…

论文工具使用---connected papers

如何使用connected papers 使用方法具体功能其他资源 官网地址&#xff1a;connected papers &#xff1a;一个旨在帮助科研工作者快速搜索文献的全新工具&#xff0c;可以清晰的查看文献的引文信息&#xff0c;了解文献的引用和被引用关联。 使用方法 输入论文标题后&#xf…

如何配置Redis + Rdis在IDEA中的使用

文章目录 Step1. 下载zipStep2. 修改环境变量Step3. 启动Redis服务端Step4. 启动Redis客户端Step5. IDEA中链接Redis Step1. 下载zip 下载 Redis-x64-xxx.zip压缩包&#xff0c;解压到 E 盘后&#xff0c;将文件夹重新命名为 redis 下载地址&#xff1a;Redis下载地址 Step2…

Java----面向对象----总复习

面向对象 面向对象的程序设计思想(Object Oriented Programming),简称OOP.是一种设计者思想.关注的焦点是类,参照现实中的事务,将事务的属性特征,行为抽象出来,用类来表示.代码结构:以类为组织单位,每种事务都有自己的属性和行为,功能, 思想:从宏观上 帮助我们把握,整体分析整…

C语言的数据结构:树与二叉树(哈夫曼树篇)

前言 上篇讲完了二叉树&#xff0c;二叉树的查找性能要比树好很多&#xff0c;如平衡二叉树保证左右两边节点层级相差不会大于1&#xff0c;其查找的时间复杂度仅为 l o g 2 n log_2n log2​n&#xff0c;在两边层级相同时&#xff0c;其查找速度接近于二分查找。1w条数据&am…

160相交链表

解法1&#xff1a; public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {// 定义两个指针。// 获得两个链表的长度&#xff0c;将较长的链表先用指针移动到和短链表一样的长度。// 再一个个比较ListNode l1 headA, l2 headB;int …

vs2017调试MFC源码与dll版本不匹配

如上图&#xff0c;使用VS2017调试MFC源码&#xff0c;提示源码与dll不匹配。 经过一番折腾终于找到了原因&#xff1a;同时安装了vs2017、vs2022&#xff0c;结果加载的mfc140ud.dll不是vs2017的&#xff0c;而是vs2022的&#xff0c;主版本号虽然都是14&#xff0c;但小版本…

Jmeter下载、安装及配置

1 Jmeter介绍 Jmeter是进行负载测试的工具&#xff0c;可以在任何支持Java虚拟机环境的平台上运行&#xff0c;比如Windows、Linux、Mac。 Jmeter模拟一组用户向目标服务器发送请求&#xff0c;并统计目标服务器的性能信息&#xff0c;比如CPU、memory usage。 2 Jmeter下载 …

BLACKBOX.AI:解锁编程学习新纪元,加速开发的AI得力助手

文章目录 &#x1f4af;BLACKBOX.AI 官网&#x1f341;1 BLACKBOX.AI 工具使用教程&#x1f341;2 BLACKBOX.AI工具使用界面介绍&#x1f341;3 Chat(聊天)功能&#x1f341;4 Explore (探索)功能&#x1f48e;4.1 Terminal(终端)功能&#x1f48e;4.2 Discover(发现)功能&…

【Verilog HDL-1】基本、向量、模块

HDL习题 1 阻塞型赋值‘’与非阻塞型赋值‘<’ 阻塞型赋值 b a ba ba&#xff1a;适用于纯组合电路 非阻塞型赋值 b < a b<a b<a&#xff1a;适用与时序逻辑电路 2 wire线型,assign连续赋值 wire a,b,c; assign b a; assign c a;与编程语言不同&#xff…

普通集群与镜像集群配置

一. 环境准备 关闭防火墙和selinux&#xff0c;进行时间同步 rabbitmq-1 Rocky_linux9.4 192.168.226.22rabbitmq-2Rocky_linux9.4192.168.226.23rabbitmq-3Rocky_linux9.4192.168.226.24 修改主机名#192.168.226.22 hostnamectl set-hostname rabbitmq-1#192.168.226.22 ho…

【操作系统期末速成】 EP03 | 学习笔记(基于五道口一只鸭)

文章目录 一、前言&#x1f680;&#x1f680;&#x1f680;二、正文&#xff1a;☀️☀️☀️2.1 考点五&#xff1a;进程的概念及特征2.1 考点六&#xff1a;进程的状态与切换 一、前言&#x1f680;&#x1f680;&#x1f680; ☀️ 回报不在行动之后&#xff0c;回报在行动…

HIVE每日一题

select * from sku_info order by sku_id ; 为什么结果没有顺序排序。什么原因导致的&#xff1f;