【面试题】Java基础 2

news/2024/5/19 12:04:43/文章来源:https://blog.csdn.net/liuwanqing233333/article/details/127229239

若你困于无风之地,我将为你奏响高空之歌

文章目录

    • 一、int 和 Integer 对象
      • 1. int 和 Integer 对象的区别
      • 2. 变量比较问题:
    • 二、反射
      • 1. 反射机制定义
      • 2. 反射的使用步骤
      • 3. 一个小栗子
      • 4. 反射的应用

一、int 和 Integer 对象

1. int 和 Integer 对象的区别

  • Integer是int的包装类,int是基本数据类型;
  • Integer变量必须实例化后才能使用;int变量不需要;
  • Integer实际是对象的引用,指向此new的Integer对象,int是直接存储数据值 ;
  • Integer的默认值是null;int的默认值是0。

2. 变量比较问题:

  1. 两个 new 出的 Integer 变量永远不相等,因为其存放的是对一个 Integer 变量的引用(内存地址不同)
        Integer num1 = new Integer(1000);Integer num2 = new Integer(1000);System.out.println("num1 == num2 " + (num1 == num2) );

在这里插入图片描述

  1. Integer 变量与 int 变量进行比较时,若两个变量值相等,则返回true (包装类自动拆包为int,然后进行比较)
        Integer num3 = new Integer(520);int num4 = 520;System.out.println("num3 == num4 " + (num3 == num4) );

在这里插入图片描述

  1. 非 new 生成的 Integer 变量和 new 生成的变量比较,结果为 false。(非 new 生成的 Integer 对象指向 java 常量池中的对象,new 生成的变量指向堆中新建的对象,两者在内存中的地址不同)
        Integer num5 = new Integer(1314);Integer num6 = 1314;System.out.println("num5 == num6 " + (num5 == num6));

在这里插入图片描述

  1. 两个非 new 生成的 Integer 变量,若变量值在 -128~127 之间,则比较结果为 true,否则比较结果为 false (值在 -128 ~127 之间时,Java 会进行自动装箱,然后对值进行缓存,下次再有相同的值,会之间在缓存中取出使用。)
        Integer num7 = -127;Integer num8 = -127;System.out.println("num7 == num8 " + (num7 == num8));Integer num9 = 128;Integer num10 = 128;System.out.println("num9 == num10 " + (num9 == num10));

在这里插入图片描述

自动装箱源码:

缓存是通过Integer的内部类IntegerCache来完成的,当值超出 -128 ~ 127 这个范围,会在堆中new出一个对象来存储。

public static Integer valueOf(String s, int radix) throws NumberFormatException {return Integer.valueOf(parseInt(s,radix));}/*** (1)在-128~127之内:静态常量池中cache数组是static final类型,cache数组对象会被存储于静态常量池中。* cache数组里面的元素却不是static final类型,而是cache[k] = new Integer(j++),* 那么这些元素是存储于堆中,只是cache数组对象存储的是指向了堆中的Integer对象(引用地址)* * (2)在-128~127 之外:新建一个 Integer对象,并返回。*/
public static Integer valueOf(int i) {assert IntegerCache.high >= 127;if (i >= IntegerCache.low && i <= IntegerCache.high) {return IntegerCache.cache[i + (-IntegerCache.low)];}return new Integer(i);}

二、反射

1. 反射机制定义

反射是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为 Java 语言的反射机制。

通过反射机制,可以在运行时动态地获取类的实例,提高灵活性。但是反射需要解析字节码,使用反射会降低性能。

提高反射效率的方法:

  • 通过setAccessible(true)关闭JDK的安全检查来提升反射速度;
  • 多次创建一个类的实例时,有缓存会快很多;
  • ReflflectASM工具类,通过字节码生成的方式加快反射速度。

2. 反射的使用步骤

  • 获取类的 Class 对象实例
  • 根据 Class 对象实例获取 Constructor 对象
  • 使用 Constructor 对象的 newInstance 方法获取反射类对象
  • 获取方法的 Method 对象
  • 利用 invoke 方法调用方法

反射 API:

Class 类: 反射的核心类,可以获取类的属性,方法等信息。
Field 类: Java.lang.reflec 包中的类,表示类的成员变量,可以用来获取和设置类之中的属性值。
Method 类: Java.lang.reflec 包中的类,表示类的方法,它可以用来获取类中的方法信息或者执行方法。
Constructor 类: Java.lang.reflec 包中的类,表示类的构造方法。

3. 一个小栗子

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;public class Reflect {private int num;public Reflect(int num) {this.num = num;}public Reflect() {}public int getNum() {return num;}public void setNum(int num) {this.num = num;}public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {Class clz = Class.forName("Reflect");Method setNumMethod = clz.getMethod("setNum",int.class );Constructor reflectConstructor = clz.getConstructor();Object reflectObj = reflectConstructor.newInstance();setNumMethod.invoke(reflectObj, 520);Method getReflectNum = clz.getMethod("getNum");System.out.println("Num = " + getReflectNum.invoke(reflectObj));}
}

在这里插入图片描述

4. 反射的应用

  1. JDBC 的数据库的连接
  2. Spring框架中的 xml 的配置模式

Spring 通过 XML 配置模式装载 Bean 的过程:

  • 将程序内所有 XML 或 Properties 配置文件加载入内存中;
  • Java类里面解析xml或properties里面的内容,得到对应实体类的字节码字符串以及相关的属性信息;
  • 使用反射机制,根据这个字符串获得某个类的Class实例;
  • 动态配置实例的属性。

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

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

相关文章

css 特效实现方法

背景渐隐 通过 before 线性渐变遮盖掉一部分图片 视察滚动实现方式&#xff1a; 监听浏览器滚动事件改变各个层的top值 环形进度条 svg circlestroke-dasharray 环绕边框动画 四个单向运动的动画父框overflow: hidden;设置延迟可表现循环 一些旋转曲线的图形 inset背景扩…

一维无界的自由波动问题-达朗贝尔行波解

回顾 第一个例子 表示热能的扩散&#xff0c;在空间有不同的取值&#xff0c;随空间和时间而变化&#xff0c;左端是跟一个恒温为0的热源接触&#xff0c;我们表示为&#xff0c;这个叫恒温条件。右端我们跟一个绝热的材料接触&#xff0c;傅里叶发现了热传导规律,K叫做热传导…

Java学习笔记 --- 面向对象之多态

一、基本介绍 方法或对象具有多种形态&#xff0c;是面向对象的三大特征&#xff0c;多态是建立在封装和继承之上的 二、多态的具体体现 1、方法的多态&#xff1a; 重写和重载就体现多态 案例演示&#xff1a; package com.javase.poly_;public class PloyMethod {publi…

最新案例 | 昇思MindSpore携手信大网御推出中原AI反诈骗创新解决方案,为全民反诈筑牢防火墙

近日&#xff0c;河南信大网御科技有限公司的中原人工智能反诈骗创新解决方案与华为Atlas 800训练服务器和全场景AI框架昇思MindSpore完成兼容性测试。该方案基于昇腾AI基础软硬件平台&#xff0c;能够在短时间内对涉诈网址/APP进行识别&#xff0c;识别准确率高达99%。 据2021…

嵌入式开发为什么用C语言

有了解过嵌入式开发的人都会想要多去了解一些嵌入式方面的信息&#xff0c;那么既然是嵌入式开发肯定是要你会代码的&#xff0c;至于这些可能你还不是很了解&#xff0c;下面可以一起来了解下嵌入式开发为什么用C语言吧。 点击获取1V1嵌入式学习规划&#xff0c;现在还送100G精…

牛客网刷题-两个队列实现栈

✅作者简介&#xff1a;嵌入式入坑者&#xff0c;与大家一起加油&#xff0c;希望文章能够帮助各位&#xff01;&#xff01;&#xff01;&#xff01; &#x1f4c3;个人主页&#xff1a;rivencode的个人主页 &#x1f525;系列专栏&#xff1a;《牛客网刷题》 &#x1f4ac;推…

字节跳动测试岗面试挂在2面,我复盘总结了失败原因,决定再战一次

先说下我基本情况&#xff0c;本科不是计算机专业&#xff0c;现在是学通信&#xff0c;然后做图像处理&#xff0c;可能面试官看我不是科班出身没有问太多计算机相关的问题&#xff0c;因为第一次找工作&#xff0c;字节的游戏专场又是最早开始的&#xff0c;就投递了&#xf…

Chain of Responsibility(责任链模式)

责任链模式一、概述二、结构三、适用场景四、优缺点五、实例一、概述 描述&#xff1a;如组长不能处理的金额&#xff0c;需要向经理请求&#xff0c;经理不能请求的需要向老板请求&#xff0c;这样就现成了一条链&#xff0c;每个级别都能处理这金额。而不是直接组长向老板请…

LeetCode括号的分数(三种解法)

LeetCode括号的分数题目描述方法一&#xff1a;栈方法稍微优化方法二&#xff1a;递归方法三&#xff1a;计算每一部分的贡献率分析原因结语题目描述 这道题的题意还是比较好理解的&#xff0c;一个 &#xff08;&#xff09; 就是一分&#xff0c;外层再套有括号则分数翻倍。 …

【genius_platform软件平台开发】第七十四讲:IAP在线升级OTA原理

1. BootLoader知识 1.1 概述及其作用 BootLoader可以理解成是引导程序, 它的作用是启动正式的App应用程序.。换言之,BootLoader是一个程序, App也是一个程序, BootLoader程序是用于启动App程序的. 2. IAP知识 2.1 概述 IAP&#xff08;In-Application Programming&#xf…

python与Electron联合编程记录之六(Electron调试)

Pycharm调试Electron 程序的编写过程离不开调试&#xff0c;在刚开始编写Electron程序的时候我不懂怎么调试主进程&#xff0c;只会通过Chrome的Devtools调试渲染进程&#xff0c;所以程序编写过程非常苦恼。后来决定研究下怎么调试主进程&#xff0c;我使用的是Pycharm&#x…

WebDAV之葫芦儿·派盘 + Evermusic

Evermusic-iPhone或iPad的音乐播放器和下载器。音频均衡器,低音增强器,ID3标签编辑器,播放列表管理器。 支持最流行的音频格式:MP3,AAC,M4A,WAV,AIFF,M4R。有了这个程序,您可以创建自己的音乐流媒体服务。只需将您的音乐库移至云服务,然后直接从那里收听音乐。您现…

(附源码)计算机毕业设计SSM在线考试系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

正则量词 属性方法 使用技巧

n {1,正无穷} \w 0-9A-z_ var reg /\w/g;var str abcdefg;正则匹配的两个原则 1.不会回头 匹配成功的就不会在匹配 2.贪婪模式 能匹配多就不会匹配少 n* {0,正无穷} \w 0-9A-z_ var reg /\w*/g;var str abcdefg;\d 0-9 var reg /\d*/g;var str abcdefg;## n&#xff1…

gorm中的关联操作详解

一对一 belong to 属于:可以理解为舔狗认为自己属于女神,而女神都不知道舔狗的存在 type Girl struct { Id int Name string } type Dog struct { Id int Name string GirlId int Girl Girl } 迁移 schema db.AutoMigrate(&Dog{}) //此时会将…

Linux从入门到入土②(系统管理)

文章目录系统管理Linux 中的进程和服务Service服务管理&#xff08;CentOS 6 版本-了解&#xff09;基本语法使用systemctl服务管理&#xff08;CentOS 7 版本-重点掌握&#xff09;基本语法使用chkconfig 设置后台服务的自启配置&#xff08;CentOS 6 版本&#xff09;基本语法…

mysql 关联查询连接条件

一、内连接 关键字&#xff1a;inner join on 语句&#xff1a;select * from a_table a inner join b_table b on a.a_id b.b_id; 说明&#xff1a;组合两个表中的记录&#xff0c;返回关联字段相符的记录&#xff0c;也就是返回两个表的交集&#xff08;阴影&#xff09;…

【数据结构】交换排序—冒泡排序、快速排序

目录 一、什么是交换排序&#xff1f; 二、冒泡排序 三、快速排序 &#x1f49f; 创作不易&#xff0c;不妨点赞&#x1f49a;评论❤️收藏&#x1f499;一下 一、什么是交换排序&#xff1f; 1.交换排序的基本思想是两两比较待排序记录的关键字&#xff0c;若两个记录的次…

python文件操作

今日内容概要文件操作 利用python代码的编写来读写文件1.文件的概念 2.文件的操作方式 3.文件读写模式 4.文件操作模式 5.文件诸多方法 6.文件内容修改 7.文件光标移动 文件操作 1.文件的概念就是操作系统暴露给用户操作硬盘的快捷方式eg:双击一个文件,其实是从硬盘将数据加载…

Argestes 和序列问题

一 问题描述 Argestes 有很多爱好,特别喜欢解决查询问题。有一天&#xff0c;Argestes 想出了这样的问题。给出一个由 N 个非负整数组成的序列&#xff0c;a [1]&#xff0c;a [2]&#xff0c;a[3] ... a [n]。然后对序列进行 M 个操作。操作可以是以下之一。 S X Y&#xff…