Java的反射机制
发表于|更新于
|总字数:284|阅读时长:1分钟|浏览量:
什么是反射机制
简单来说,反射机制就是程序在运行时能获取到自身的信息。在Java中,只要给定类的名字,那么就能通过反射机制来获得类的所有信息
Java反射机制的作用
- 在运行时判断任意一个对象所属的类
- 在运行时判断任意一个类所具有的成员变量和方法
- 在运行时任意调用一个对象的方法
- 在运行时构造任意一个类的对象
反射机制的优缺点
优点:
- 静态编译:在编译时即确定类型,绑定对象,即通过
- 动态编译:运行时确定类型,绑定对象。动态编译最大限度的发挥了Java的灵活性,体现了多态的应用,有利于降低类之间的耦合性
缺点:
对性能有一定影响,使用反射基本上是一种解释操作,我们可以告诉JVM,我们希望做什么并且它满足我们的要求。这类操作总是慢于直接执行相同的操作。
文章作者: 丨小小丶
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Hexo!
相关推荐
2021-03-17
Java中的锁
1.锁的 7 大分类 偏向锁/轻量级锁/重量级锁 可重入锁/非可重入锁 共享锁/独占锁 公平锁/非公平锁 悲观锁/乐观锁 自旋锁/非自旋锁 可中断锁/不可中断锁 2.偏向锁/轻量级锁/重量级锁 偏向锁如果自始至终,对于这把锁都不存在竞争,那么其实就没必要上锁,只需要打个标记就行了,这就是偏向锁的思想。一个对象被初始化后,还没有任何线程来获取它的锁时,那么它就是可偏向的,当有第一个线程来访问它并尝试获取锁的时候,它就将这个线程记录下来,以后如果尝试获取锁的线程正是偏向锁的拥有者,就可以直接获得锁,开销很小,性能最好。 轻量级锁JVM 开发者发现在很多情况下,synchronized 中的代码是被多个线程交替执行的,而不是同时执行的,也就是说并不存在实际的竞争,或者是只有短时间的锁竞争,用 CAS 就可以解决,这种情况下,用完全互斥的重量级锁是没必要的。轻量级锁是指当锁原来是偏向锁的时候,被另一个线程访问,说明存在竞争,那么偏向锁就会升级为轻量级锁,线程会通过自旋的形式尝试获取锁,而不会陷入阻塞。 重量级锁重量级锁是互斥锁,它是利用操作系统的同步机制实现的,所以开销相对比较...
2021-03-24
Java基础:接口和抽象类的区别
1、基本语法区别Java中接口和抽象类的定义语法分别为interface和abstract关键字 抽象类:在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称为抽象方法,抽象方法只有方法的声明,没有方法体。抽象类的特点有: 抽象类不能被实例化,只能被继承 包含抽象方法的一定是抽象类,但是抽象类不一定含有抽象方法 抽象类中的抽象方法的修饰符只能为public或者protected,默认为public 一个子类继承一个抽象类,则子类必须实现父类抽象方法,否则子类也必须定义为抽象类 抽象类可以包含属性、方法、构造方法,但是构造方法不能用于实例化,主要作用是被子类调用 接口:Java中接口使用interface关键字修饰,特点为: 接口可以包含变量、方法,变量被隐式指定为public static final,方法被隐式指定为public abstract 接口支持多继承,即一个接口可以extends多个接口,间接的解决了Java中类的单继承为题 一个类可以实现多个接口 JDK1.8中对接口增加了新的特性: 默认方法:JDK1.8允...
2021-03-13
面向对象和面向过程
什么是面向对象?什么又是面向过程 面向对象:——行为化面向对象就是把整个需求按照特点、功能划分,将这些存在共性的部分封装成类,创建了对象不是为了完成某一步骤,而是描述某个事物在解决问题的步骤中的行为 面向对象的三个基本特征——封装、多态、继承 封装封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行隐藏。 继承继承是指一种能力:它可以使用现有的类的所有功能,并且在无需重新编写原来类的情况下对这些功能进行扩展。通过继承创建的新类称为“子类”或者是“派生类”,被继承的类称为“基类”、“父类”或者“超类”。 多态性多态性是允许你将父对象设置成为和一个或者更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给他的子对象的特性以及不同的方式运作。 一句话理解:允许将子类类型的指针赋值给父类类型的指针。 实现多态有两种方式:覆盖和重载,两种方式的区别在于:覆盖在运行时决定,重载是在编译时决定,而且覆盖和重载的机制不同。例如在Java中,重载方法的签名必须不同于原来方法的,但是对于覆盖签名必须相同。 面向过程——步骤化...
2021-03-26
Java-static关键字
static是静态修饰符,可以用来修饰成员变量和成员方法,也可以形成静态static代码块。 static变量static修饰的变量被称为静态变量,没有用static修饰的变量被称为实例变量,两者之间的区别是: 静态变量是随着类加载时被完成初始化的,它在内存中仅有一个,且JVM也只会为其分配一次内存,同时类的所有实例都共享静态变量,可以直接通过类名来访问它。 而实例变量是伴随着实例的,每创建一个实例就会产生一个实例变量,并随着实例的消失而消失。 什么时候会使用static修饰变量 当分析对象中所具备的成员变量的值都是相同的,那么这个成员就可以被static修饰。 只要数据在对象中都是不同的,就是对象的特有数据,必须储存在对象中,是非静态的。 如果是相同的数据,对象不需要做修改,只需要使用即可,不需要储存在对象中,是静态的。 static方法 静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能使用this或super ...
2021-03-26
Java的四大基本特性
Java的四个基本特性:抽象、封装、继承、多态 抽象指将一类对象的共同特征总结出来构造类的过程,主要包括数据抽象和行为抽象两个方面,分别对应于类的属性和方法,抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。 封装封装就是将类的某些属性隐藏起来,然后通过接口对外开放,但是在外部不能直接进行查找属性。 封装有以下几个优点: 便于使用者正确、方便的使用系统,防止使用者错误修改系统属性 有助于建立各个系统间的松耦合关系 提高了软件的可重用性 降低了大型系统的风险,即使整个系统不成功,个别独立的子系统可能还有价值 继承子类继承父类的非private属性和方法 子类除了拥有从父类继承过来的属性和方法外,子类还可以有自己的属性和方法 java中只支持单一继承,也就是一个子类只能有一个父类,但是一个父类可以有多个子类 继承的作用提高吗的重用性。一个源文件中可以包含多个类,但是只能有一个类带public,而且带public访问修饰符的类的类名要和源文件的文件名相同,main方法也要写在带public的类中。 当创建子类对象时,一定会先执行父类的构造方法创建父类对象,然后在调用...
2021-03-16
高频考点:ArrayList和LinkedList
ArrayList和LinkedList的主要区别 1.LinkedList和ArrayList的差别主要来源于其二者的数据结构不同。ArrayList是基于动态数组实现的,LinkedList是基于双链表实现的。另外LinkedList类可以根据索引来随机访问集合中的元素,还实现了Deque接口,Deque接口是Queue接口的子接口,代表了一个双向队列,因此LinkedList可以作为双向队列、栈和List集合使用 2.因为Array是基于索引的数据结构,它使用索引在数组中搜索和读取数据时很快的,可以直接返回数组中index位置的元素,因此在随机访问集合元素上有较好的性能。Array获取数据的时间复杂度是O(1),但是要插入、删除数据时开销会很大,因为需要移动数组中插入/删除位置之后的所有元素。 3.相对于ArrayList,LinkedList的随机访问集合元素时性能较差,因为需要在双向链表中找到index的位置再返回;但在进行插入、删除操作时比前者要快,因为LinkedList不像ArrayList,不需要改变数组的大小,也不需要在数组装满的时候要将所有的数据重新装入一...
