首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Java入门提高篇】Day13 Java中的反射机制

最近看到各种知识付费的推出,感觉是好事,也是坏事,好事是对知识沉淀的认可与推动,坏事是感觉很多人忙于把自己的知识变现,相对的在沉淀上做的实际还不够,我对此暂时还没有什么想法,总觉得,慢慢来,会更快一点,...当然,反射的功能不仅仅是获取类的信息,还可以在运行时动态创建对象,回想一下,我们正常的对象使用,都是需要在代码中先声明,然后才能使用它,但是使用反射后,就能在运行期间动态创建对象并调用其中的方法,甚至还能直接查看类的私有成员变量...在开发中,经常会遇到两个不同类对象之间的复制,把一个类中的字段信息get取出来,然后set到另一个类中,大部分情况下,两个类对应的字段是一样,每次这样使用是很麻烦的,那么利用反射就可以实现一个封装,只需要调用一个方法即可实现简单的类字段复制...虚拟机在加载每一个类的时候,会自动生成一个对应的Class类来保存该类的信息,可以理解为Class类是那个类的代理类,是连接实际类与类加载器的桥梁,可以通过它来获取虚拟机的类加载器引用,从而实现更多的骚操作...Class有很多方法来获取更多关于类的信息,这里使用getDeclaredField方法来获取指定字段信息,返回的是Field类型对象,这个对象里存储着关于字段的一些信息,如字段名称,字段类型,字段修饰符

74090

【错误记录】Android 编译报错 ( Attempt to invoke virtual method ‘void xx.ActionBar.setTitle()‘ on a null obj )

androidx.appcompat.app.ActionBar 的 void setTitle() 方法 , 但是 androidx.appcompat.app.ActionBar 对象是空的 ,...和 ActionBar 关联起来 ; 此处没有获取到 ActionBar 对象 , ActionBar 是页面顶部的 标题栏 ; 在 Android Studio 中生成的代码 , 一般都是标准代码..., 不会出错 , 这里出现问题大概率是自己在项目中的其它设置导致的 ; 检查 AndroidManifest.xml 中的 Theme 主题设置 , 在 application 标签中 , 设置了 Theme.AppCompat.Light.NoActionBar..., 因此这里尝试调用 androidx.appcompat.app.ActionBar 的 setTitle() 方法直接报空指针异常 ; 三、解决方案 1、配置有标题的主题 - Theme.AppCompat.Light.DarkActionBar...NavigationUI.setupActionBarWithNavController 函数 , 关联了 Navigation 与 ActionBar , 这里可以调用其他的关联方法 , 调用 NavigationUI.setupWithNavController

68310
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    js的数据类型有哪些?

    对象是保存在堆内存中的,每创建一个新对象,就会在堆内存中开辟出一个新空间,而变量保存的是对象的内存地址(对象的引用),如果两个变量保存的是同一个对象引用,当其中一个通过变量修改属性时,另一个也会受到影响...使用typeof检查时值时返回undifined Null空对象: Null(空值)类型的值只有一个,null,用来表示一个为空的对象,使用typeof检查时值时返回object,因为null表示空对象...()方法,调用会报错。...Number和Boolean实际上就是调用toString()方法; -对于null和underfined,就不会调用toString()方法,它会将null直接转换为“null”,将underfined...number (int+ float) 引用类型:存储在栈内存 object ( array {}) array function 函数类型 特殊类型: null (计算机的一块虚拟内存) 隐式转换

    4.3K30

    《JavaScript 模式》读书笔记(3)— 字面量和构造函数1

    ,函数内部会发生以下情况:     1、创建一个空对象并且this变量引用了该对象,同时还继承了该函数的原型。     ...2、属性和方法对加入到this引用的对象中。     3、新创建的对象由this所引用,并且最后隐式的返回this(如果没有显示的返回其它对象)。   ...这种方法的效率显然非常低下,因为多个实例之间的say()方法实际上并没有改变,更好的选择是将方法添加到Person类的原型中。...要注意: // var this = {};   这段代码并不是真相的全部。因为“空”对象实际上并不空,它已经从Person的原型的原型中继承了许多成员。...试图返回并非对象的值,这虽然不会造成错误,但是函数却会简单的忽略该值,相反,构造函数将会返回this所引用的对象。   好了,我们今天的内容就先到这里。后面再继续,以防一篇的文章内容过长。

    60920

    Java中常见的异常类型

    当一个应用试图访问、修改某个类的域(Field)或者调用其方法,但是又违反域或方法的可见性声明,则抛出该异常。...当应用试图调用某类的某个方法,而该类的定义中没有该方法的定义时抛出该错误。 java.lang.OutOfMemoryError 内存不足错误。...当应用试图通过反射方式创建某个类的实例、访问该类属性、调用该类方法,而当时又无法访问类的、属性的、方法的或构造方法的定义时抛出该异常。...java.lang.NullPointerException 空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。...譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null等等。 java.lang.NumberFormatException 数字格式异常。

    2.3K40

    针对高级前端的8个级JavaScript面试问题

    构造函数用于在 JavaScript 中创建对象。当您定义一个构造函数时,还可以将属性和方法附加到其 prototype 属性上。这些属性和方法然后变得可以被该构造函数创建的所有对象实例访问。...每个这样的对象都有一个原型,该原型作为对另一个对象的引用。__proto__ 属性简单地是对这个原型对象的引用。 当你试图访问对象上的一个属性或方法时,JavaScript 会进行查找过程来找到它。...在valueOf方法不存在或不返回适当的基本值的情况下,JavaScript会退回到toString方法。这个方法负责提供对象的字符串表示形式。...这个算法会考虑比较值的类型并进行必要的转换。 在我们的情况中,让我们把 x 记作 [],y 记作 ![]。我们检查了 x 和 y 的类型,并发现 x 是对象,y 是布尔值。...将 toString 方法应用于空数组会得到一个空字符串,这是一个有效的原始值: [] == 0 [].toString() == 0 "" == 0 将空数组转换为字符串给了我们一个空字符串 "",现在我们面对的比较是

    18710

    针对高级前端的8个级JavaScript面试问题

    构造函数用于在 JavaScript 中创建对象。当您定义一个构造函数时,还可以将属性和方法附加到其 prototype 属性上。这些属性和方法然后变得可以被该构造函数创建的所有对象实例访问。...每个这样的对象都有一个原型,该原型作为对另一个对象的引用。__proto__ 属性简单地是对这个原型对象的引用。 当你试图访问对象上的一个属性或方法时,JavaScript 会进行查找过程来找到它。...在valueOf方法不存在或不返回适当的基本值的情况下,JavaScript会退回到toString方法。这个方法负责提供对象的字符串表示形式。...这个算法会考虑比较值的类型并进行必要的转换。 在我们的情况中,让我们把 x 记作 [],y 记作 ![]。我们检查了 x 和 y 的类型,并发现 x 是对象,y 是布尔值。...将 toString 方法应用于空数组会得到一个空字符串,这是一个有效的原始值: [] == 0 [].toString() == 0 "" == 0 将空数组转换为字符串给了我们一个空字符串 "",现在我们面对的比较是

    21830

    《JavaScript 模式》读书笔记(3)— 字面量和构造函数1

    ,函数内部会发生以下情况:     1、创建一个空对象并且this变量引用了该对象,同时还继承了该函数的原型。     ...2、属性和方法对加入到this引用的对象中。     3、新创建的对象由this所引用,并且最后隐式的返回this(如果没有显示的返回其它对象)。   ...这种方法的效率显然非常低下,因为多个实例之间的say()方法实际上并没有改变,更好的选择是将方法添加到Person类的原型中。...要注意: // var this = {};   这段代码并不是真相的全部。因为“空”对象实际上并不空,它已经从Person的原型的原型中继承了许多成员。...试图返回并非对象的值,这虽然不会造成错误,但是函数却会简单的忽略该值,相反,构造函数将会返回this所引用的对象。   好了,我们今天的内容就先到这里。后面再继续,以防一篇的文章内容过长。

    26730

    NullPointerException : Attempt to invoke a method on a null object reference 完美解决方法

    今天的主题是大家在Java开发中经常遇到的经典错误:NullPointerException(简称NPE)。这个错误通常发生在尝试对null对象调用方法时,它不仅困扰新手,也会让经验丰富的开发者头疼。...这个错误通常会出现在我们试图调用一个尚未初始化或被赋值为null的对象的方法时。本文将通过深入探讨导致这个错误的原因,并结合代码示例,帮助大家更好地理解如何避免和处理NPE。⚙️ 正文内容 1....{ // 类定义 } 当你尝试在null对象上调用方法或访问其字段时,Java虚拟机(JVM)将会抛出这个异常。...导致NullPointerException的常见原因 2.1 对未初始化的对象调用方法 在对象尚未被初始化或赋值之前,试图调用其方法是导致NPE的最常见原因。...表格总结 错误原因 解决方案 调用未初始化的对象方法 在调用前检查是否为null 遍历空数组或集合 在循环前确认集合不为空 操作返回null的函数结果 使用Optional类包装可能为null的返回值

    17810

    java中的异常总结

    需要注意积累了 常见的几种如下: NullPointerException - 空指针引用异常 ClassCastException - 类型强制转换异常。...当一个应用试图访问、修改某个类的域(Field)或者调用其方法,但是又违反域或方法的可见性声明,则抛出该异常。...当应用试图通过反射方式创建某个类的实例、访问该类属性、调用该类方法,而当时又无法访问类的、属性的、方法的或构造方法的定义时抛出该异常。...java.lang.NullPointerException 空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。...譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null等等。 java.lang.NumberFormatException 数字格式异常。

    1.4K30

    你只会用 StringBuilder?试试 StringJoiner,真香!

    成员变量: prefix:拼接后的字符串前缀 delimiter:拼接时的字符串分隔符 suffix:拼接后的字符串后缀 value:拼接后的值 emptyValue:空值的情况,value为 null...公开方法: setEmptyValue:设置空值 toString:转换成 String add:添加字符串 merge:从另一个 StringJoiner 合并 length:长度(包括前缀后缀) 流式...空值处理 没有拼接任何字符串的几个空值处理场景。...extends java.lang.CharSequence>) 源码如下: ? 看源码,这两个方法只能进行简单的拼接操作,不能添加前后缀、空值设置处理等。...在使用拼间多个相同的分隔符时,使用 StringJoiner,简单处理使用 String.join() 也能完成。

    63410

    让你的iOS应用程序支持运行JavaScript脚本:JavaScriptCore框架详解

    对象作为了当前视图控制器的属性,这样做的目的仅仅是为了方便调试,不过不对此context对象进行引用,当viewDidLoad函数执行完成后,JS运行环境也将被销毁,我们就无法在Safari中直观的看到...三、在JavaScript中调用Native方法     有来无往非君子,同样也可以在原生中编写方法让JS来调用,示例如下: - (void)viewDidLoad { [super viewDidLoad...创建JSContext对象有如下两种方式: //创建一个新的JS运行环境 - (instancetype)init; //创建一个新的JS运行环境 并关联到某个虚拟机对象上 - (instancetype...当JS调用OC方法时,在OC方法中可以用此方法获取到JS运行环境 + (JSContext *)currentContext; //获取当前执行的JS函数,当JS调用OC方法时,在OC方法中可以用此方法获取到执行的函数...在Objective-C中调用JS脚本或者JS调用OC方法都可以使用JSValue来传输数据。

    5.2K30

    常见的几种RuntimeException

    须要注意积累了 常见的几种例如以下: NullPointerException – 空指针引用异常 ClassCastException – 类型强制转换异常。...当一个应用试图訪问、改动某个类的域(Field)或者调用其方法,可是又违反域或方法的可见性声明,则抛出该异常。...当应用试图通过反射方式创建某个类的实例、訪问该类属性、调用该类方法,而当时又无法訪问类的、属性的、方法的或构造方法的定义时抛出该异常。...java.lang.NullPointerException 空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。...譬如:调用null对象的实例方法、訪问null对象的属性、计算null对象的长度、使用throw语句抛出null等等。

    93310

    细微之处见真章之StringUtils的isBlank函数细节解读

    如果 final 类型的变量持有一个对象的引用,对象的状态可以由对象提供的函数修改,但是变量总是引用相同的对象。...这个原则同样适用于数组,因为数组包含多个对象;如果一个 final 变量持有数组对象,数组的元素可以修改,但这个变量引用同一个数组对象。...No, 上面讲到如果final 变量持有对象的引用,如果不允许修改对象的属性怎么办? 可以使用不可变对象。如 String。 那么不可变对象是如何实现的呢?...存储字符数组的 value 成员变量用 final 修饰,赋值后引用不能改变。 所有修改对象的属性或状态的方法返回的都是新的字符串对象。 因此我们编写不可变对象时可以参考这种思路。...那么如果引用不可变也不允许改变对象的属性怎么办? 此时可以 final + 不可变对象一起起作用。

    73420

    笔记——Android零碎知识摘录(一)

    2、Java中的简单类型从概念上分为四种:实数、整数、字符、布尔值。...Integer是int的封装类,里面有很多进行处理的静态方法 Integer是对象而int不是,内存的分配位置也不一样 Integer的属性和其他类一样的,在方法里都是引用传递;而基本类型int是值传递...3、java反射:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为...即:java在运行状态中反射知道一个类里面的所有方法和属性;通过反射获得对象后,能够调用对象的任意属性和方法。...运用的地方有点不同,?是定义在引用变量上,T是类上或方法上;如果有泛型方法和非泛型方法,都满足条件,会执行非泛型方法。 带不同泛型的ArrayList在编译后生成的Class是相同的!

    40420

    JDK源码解析之 java.lang.Exception

    Java中常见异常 NullPointerException - 空指针引用异常 ClassCastException - 类型强制转换异常。...当一个应用试图访问、修改某个类的域(Field)或者调用其方法,但是又违反域或方法的可见性声明,则抛出该异常。...当应用试图通过反射方式创建某个类的实例、访问该类属性、调用该类方法,而当时又无法访问类的、属性的、方法的或构造方法的定义时抛出该异常。...java.lang.NullPointerException 空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。...譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null等等。 java.lang.NumberFormatException 数字格式异常。

    87710

    37个JavaScript基本面试问题和解答(建议收藏)

    删除操作符(用于从对象中删除属性)不能用于对象的不可配置属性。当试图删除一个不可配置的属性时,非严格代码将自动失败,而在这种情况下,严格模式会引发错误。 6、考虑下面的两个函数。...这是因为,在调用onclick方法(对于任何按钮)时,for循环已经完成,并且变量i已经具有值5....reverse()方法返回对数组本身的引用(即,在这种情况下为arr1)。因此,arr2仅仅是对arr1的引用(而不是副本)。...因此,当对arr2做任何事情时(即,当我们调用arr2.push(arr3);)时,arr1也会受到影响,因为arr1和arr2只是对同一个对象的引用。...像Python一样,JavaScript在调用像slice()这样的数组方法时,会承认负面下标,以此作为在数组末尾引用元素的方式;例如,下标-1表示数组中的最后一个元素,依此类推。

    3K10

    【C++】基础:Effective C++高效编程建议

    用 pass-by-reference-to-const(传引用给 const)取代 pass-by-value(传值) 21. 当你必须返回一个对象时不要试图返回一个引用 22....拷贝一个对象的所有组成部分 拷贝函数应该保证拷贝一个对象的所有数据成员以及所有的基类部分。 不要试图依据一个拷贝函数实现另一个。作为代替,将通用功能放入第三个供双方调用的函数。 13....使接口易于正确使用,而难以错误使用 好的接口易于正确使用,而难以错误使用。你应该在你的所有接口中为这个特性努力。 使易于正确使用的方法包括在接口和行为兼容性上与内建类型保持一致。...当你必须返回一个对象时不要试图返回一个引用 绝不要返回一个局部栈对象的指针或引用,绝不要返回一个被分配的堆对象的引用,如果存在需要一个以上这样的对象的可能性时,绝不要返回一个局部 static 对象的指针或引用...避免返回对象内部构件的“句柄” 避免返回对象内部构件的句柄(引用,指针,或迭代器)。这样会提高封装性,帮助 const 成员函数产生 const 效果,并将空悬句柄产生的可能性降到最低。 29.

    22110

    聊到JVM(还怕面试官问JVM吗?)

    百度的解释云里雾里,对于我们Java程序员,说白了就是: JVM本质上是一个程序,它能识别.class 字节码文件(里面存放的是我们对.java编译后产生的二进制代码),并且能够解析它的指令,最终调用操作系统上的函数...8大基本类型 对象引用 实例的方法 2、栈运行原理 栈表示Java方法执行的内存模型 每调用一个方法就会为每个方法生成一个栈帧(Stack Frame),每个方法被调用和完成的过程,都对应一个栈帧从虚拟机栈上入栈和出栈的过程...,则每当存满时就会触发一次轻GC(Minor GC) 轻GC清理后,有的对象可能还存在引用,就活下来了,活下来的对象就进入幸存区;有的对象没用了,就被GC清理掉了;每次轻GC都会使得伊甸园区为空...在VM options中可以指定jvm试图使用的最大内存和jvm初始化内存大小 -Xms1024m -Xmx1024m -Xlog:gc* -Xmx用来设置jvm试图使用的最大内存,默认为1/4 -Xms...+老年代) 2、GC算法 1、引用计数算法(很少使用) 每个对象在创建的时候,就给这个对象绑定一个计数器。

    1.2K30
    领券