谈谈对java反射的理解

1. java反射机制的概念

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

2.反射的功能

  • 在运行时判断任意一个对象所属的类
  • 在运行时构造任意一个类的对象
  • 在运行时判断任意一个类所具有的成员变量和方法(通过反射甚至可以调用private方法)
  • 在运行时调用任意一个对象的方法
  • 生成动态代理

3.反射的基本运用(常用的API)

反射相关的类一般都在java.lang.reflect包中
(1)获得class对象(三种方式)

  1. 使用class类的forName静态方法
    例如:Class.forName(driver);
  2. 直接获取某一个对象的class
    例如:Class<?> classz = int.class;
    Class<?> classInt = Integer.TYPE;
  3. 调用某个对象的getClass()方法
    例如:StringBuilder str = new StringBuilder(“123”);
    Class<?> klass = str.getClass();

(2)判断是否为某个类的实例
一般使用isInstance关键字来判断是否为某个类的实例,同时也可以借助反射中的Class对象的isInstance()方法来判断是否为某个类的实例,它是一个native方法.
(3)创建实例(两种方式)

  1. 使用Class对象额newInstance()方法来创建Class对象对应的实例
Class<?> c = String.class;
Object str = c.newInstance();
  1. 先通过Class对象获取指定的Constructor对象,再调用Constructor对象的newInstance()方法来创建实例.
//获取string所对应的Class对象
Class<?> c = String.class;
//获取String类带一个String参数的构造器
Constructor constructor = c.getConreuctor(String.class);
//根据构造器创建实例
Object obj = contructor.newInstance("2222"); 

(4)获取方法

  • getDeclaredMethods() ----返回类或接口声明的所有方法,包括公共,保护,默认(包)访问和私有方法,但是不包括继承的方法.
  • getMethods()----返回某个类的所有公用方法,包括其继承类的公用方法. 它还可以获取父类的方法
  • getMethod() ----- 返回一个特定的方法

(5)获取构造器信息
(6)获取类的成员变量(字段)信息

  • getFiled() ------访问共有的成员变量
  • getDeclaredField() ----- 所有已声明的成员变量,但不能得到父类的成员变量

(7)调用方法—invoke()方法
(8)利用反射创建数组

4.反射的优缺点

优点
反射提高了程序的灵活性,降低耦合性,提高自适应能力,它允许程序创建和控制任何类的对象,无需提前硬编码目标类.
缺点
性能问题,反射会消耗一定的系统资源,若不需要动态创建对象,那就不需要反射,反射调用方法时可以忽略权限检查,因此可能破坏封装性而导致的安全问题

5.反射的使用场景

JDBC,动态代理,工厂模式,SSM框架,dubbo框架,其他的框架,获取第三方类(没有源码),封装框架等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我对Java理解是,它是一种面向对象的编程语言,它使用类和对象来组织代码,有助于创建大型、可扩展的应用程序。Java可以让开发人员高效地开发出可移植性强、运行速度快的程序,同时也拥有一个强大的库,可以满足不同类型应用程序的需求。 ### 回答2: Java是一种面向对象的高级编程语言,我对它的理解是它的跨平台性和广泛应用。 首先,Java的跨平台性是它最为出众的特点之一。它的编译器将源代码编译成称为字节码的平台中立的中间代码,然后由Java虚拟机(JVM)解释执行。这种设计使得Java程序可以在任何支持Java虚拟机的操作系统上运行,不需要针对不同平台进行重新编写或重新编译。这为开发者提供了极大的便利性,使得Java成为互联网和企业级应用开发的首选语言之一。 其次,Java的广泛应用也是我对它的理解Java已经成为了许多领域的事实标准,特别是在企业领域。无论是开发网站和Web应用,还是构建大规模的分布式系统和数据库,Java都能胜任,并且有许多优秀的框架和工具可供选择。此外,Java还被广泛应用于Android移动应用开发,使得它成为全球最流行的移动应用开发语言之一。 总的来,我认为Java是一门极具灵活性和可扩展性的编程语言,具有良好的跨平台性和广泛的应用领域。它不仅适用于不同规模的项目开发,而且还有一个庞大的开发者社区,提供了许多有价值的资源和支持。因此,我认为对于想要进入软件开发行业或者在企业级应用开发领域发展的人来,了解和掌握Java是非常有必要的。 ### 回答3: 对于我来Java是一种高级的、通用的面向对象的程序设计语言。它可以运行在各种平台上,因此具有很强的跨平台性。Java的语法简洁清晰,易于学习和理解,而且具有更高的可读性,使得开发者能够更加方便地编写和维护代码。 Java是一个极其强大的语言,拥有丰富的类库和工具,可以满足各种应用程序的开发需求。Java的标准库提供了大量的类和方法,涵盖了从基本的数据结构到网络编程、图形用户界面等各个方面。同时,Java还有许多第三方库和框架,可以帮助开发者更加高效地进行开发工作。 Java还具有良好的跨平台性,这意味着开发者可以编写一次代码,就可以在不同的操作系统和硬件平台上运行。这是因为Java源代码被编译成一种称为字节码的中间格式,然后在Java虚拟机(JVM)上运行。JVM充当了一个虚拟计算机的角色,它可以将字节码翻译成特定平台的机器码,从而实现跨平台的能力。 另外,Java还具有良好的安全性和稳定性。Java的设计目标之一是提供一种可以在开放网络环境下运行的安全语言,因此在Java中,有许多内置的安全机制来确保程序的运行安全。同时,Java也具有垃圾回收机制,可以自动管理内存,减少了内存管理的负担,提高了程序的稳定性和可靠性。 总之,我认为Java是一种非常优秀的编程语言,它不仅可以满足各种需求,而且具有良好的可读性、跨平台性、安全性和稳定性。对我来,学习和使用Java是非常有意义的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值