A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

请根据自己的理解回答下面问题:
1.什么是反射?反射在程序中的应用场景,为什么反射会被称为框架设计的灵魂?
2.获取 Class对象有几种方式?他们的用途都在哪?
3.如何获取Class对象中被私有的成员变量对象和成员方法对象?

13 个回复

倒序浏览
请根据自己的理解回答下面问题:

1.什么是反射?反射在程序中的应用场景,为什么反射会被称为框架设计的灵魂?
反射就是将类的各个组成部分封装为数组;
应用于程序运行时动态创建对象;
由于反射的动态性,可以极大的增强程序的灵活性,程序不用在编译期就完成确定,在运行期仍然可以扩展,可以通过修改配置文件达到创建对象的目的,所以被称为框架设计的灵魂
2.获取 Class对象有几种方式?他们的用途都在哪?
三种方式获取Class对象
        1:使用类的class属性来获取该类对应的Class对象。举例:Student.class将会返回Student类对应的Class对象
        2:调用对象的getClass()方法,返回该对象所属类对应的Class对象
            该方法是Object类中的方法,所有的Java对象都可以调用该方法
        3:使用Class类中的静态方法forName(String className),该方法需要传入字符串参数,该字符串参数的值是某个类的全路径,也就是完整包名的路径

3.如何获取Class对象中被私有的成员变量对象和成员方法对象?

使用.getDeclaredMethod获取指定的私有方法对象
使用.getDeclaredField获取指定的私有变量对象
回复 使用道具 举报

1.什么是反射?反射在程序中的应用场景,为什么反射会被称为框架设计的灵魂?
答:反射就是将类的各个组成部分封装到其他对象中,这就是反射机制;
       应用场景:使用class类对象阶段
       反射会被称为框架设计的灵魂是因为:
                1.反射实现解耦,提高程序的可拓展性;
                2.反射可以在程序运行过程中,操作这些对象


2.获取 Class对象有几种方式?他们的用途都在哪?
答:1.Class.forName(全类名),将字节码文件加载到内存中,返回Class对象,这类方式多用在加载配置文件中;
       2.对象名.getClass(),getClass()是Object类中的方法,任何类都继承了此方法
       3.类名.class,通过类名的属性class获取,多用于参数的传递


3.如何获取Class对象中被私有的成员变量对象和成员方法对象?
答:使用getDeclareField()方法获取对象的私有成员变量;
       使用getDeclareMethod()方法获取对象的私有成员方法.
回复 使用道具 举报 1 0
请根据自己的理解回答下面问题:

1.什么是反射?反射在程序中的应用场景,为什么反射会被称为框架设计的灵魂?
反射就是将类的各个组成部分封装为数组;
应用于程序运行时动态创建对象;
由于反射的动态性,可以极大的增强程序的灵活性,程序不用在编译期就完成确定,在运行期仍然可以扩展,可以通过修改配置文件达到创建对象的目的,所以被称为框架设计的灵魂
2.获取 Class对象有几种方式?他们的用途都在哪?
三种方式获取Class对象
        1:使用类的class属性来获取该类对应的Class对象。举例:Student.class将会返回Student类对应的Class对象
        2:调用对象的getClass()方法,返回该对象所属类对应的Class对象
            该方法是Object类中的方法,所有的Java对象都可以调用该方法
        3:使用Class类中的静态方法forName(String className),该方法需要传入字符串参数,该字符串参数的值是某个类的全路径,也就是完整包名的路径

3.如何获取Class对象中被私有的成员变量对象和成员方法对象?

使用.getDeclaredMethod获取指定的私有方法对象
使用.getDeclaredField获取指定的私有变量对象
回复 使用道具 举报
请根据自己的理解回答下面问题:

1.什么是反射?反射在程序中的应用场景,为什么反射会被称为框架设计的灵魂?

反射就是讲类的各个组成部分封装成信息(字节码文件变成class对象)
因为反射可以做到不懂源代码的情况下,通过更改配置文件来达到实现其他类的要求






2.获取 Class对象有几种方式?他们的用途都在哪?

获取class对象一共有仨种方式分别是:- 类名.class属性
- 在知道对象名字的情况下可以使用类名.调用class        对象名.getClass()方法
- 创建对象的时候,调用对象的getClass方法               
        Class.forName(全类名)方法


:        用Class类中的静态方法forName()后面跟模块下的文件路径       



3.如何获取Class对象中被私有的成员变量对象和成员方法对象?

私有的成员方法获取方式:getDeclaredMethods()
          返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。
私有的成员变量获取方式:getDeclaringClass()
          如果此 Class 对象所表示的类或接口是另一个类的成员,则返回的 Class 对象表示该对象的声明类。

回复 使用道具 举报
请根据自己的理解回答下面问题:

1.什么是反射?反射在程序中的应用场景,为什么反射会被称为框架设计的灵魂?

反射就是讲类的各个组成部分封装成信息(字节码文件变成class对象)
因为反射可以做到不懂源代码的情况下,通过更改配置文件来达到实现其他类的要求






2.获取 Class对象有几种方式?他们的用途都在哪?

获取class对象一共有仨种方式分别是:- 类名.class属性
- 在知道对象名字的情况下可以使用类名.调用class        对象名.getClass()方法
- 创建对象的时候,调用对象的getClass方法               
        Class.forName(全类名)方法


:        用Class类中的静态方法forName()后面跟模块下的文件路径       



3.如何获取Class对象中被私有的成员变量对象和成员方法对象?

私有的成员方法获取方式:getDeclaredMethods()
          返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。
私有的成员变量获取方式:getDeclaringClass()
          如果此 Class 对象所表示的类或接口是另一个类的成员,则返回的 Class 对象表示该对象的声明类。

回复 使用道具 举报
请根据自己的理解回答下面问题:

1.什么是反射?反射在程序中的应用场景,为什么反射会被称为框架设计的灵魂?
反射:就是将类的各个组成部分封装为信息数组

应用场景:能在代码执行期间,动态的加载类,加载方法,加载变量。可以不在编写代码的时候确定对象,如果需要切换对象的话,不用改动源代码。例如:更换不同的数据库。

反射的好处:反射技术可以在程序的运行期间动态的创建对象和执行方法,解耦合,只需要修改配置文件就能达到切换对象的目的。
框架就是一些优秀的开发者开发的半成品软件,我们普通的程序员作为使用者,只需要学会框架配置文件的配置规则,就能通过框架的配置文件去执行框架不同的功能

2.获取 Class对象有几种方式?他们的用途都在哪?
三种方式获取Class对象
    1:使用类的class属性来获取该类对应的Class对象。举例:Student.class将会返回Student类对应的Class对象
    2:调用对象的getClass()方法,返回该对象所属类对应的Class对象
        该方法是Object类中的方法,所有的Java对象都可以调用该方法
    3:使用Class类中的静态方法forName(String className),该方法需要传入字符串参数,该字符串参数的值是某个类的全路径,也就是完整包名的路径

3.如何获取Class对象中被私有的成员变量对象和成员方法对象?
获取被对象私有的成员变量对象:
Field getDeclaredField(私有的成员变量名字符串) 返回单个私有成员变量对象
Method getDeclaredMethod(私有的成员变量名字符串, 私有的成员变量数据类型.class)
返回单个私有成员方法对象
回复 使用道具 举报
1.什么是反射?反射在程序中的应用场景,为什么反射会被称为框架设计的灵魂?
        反射:就是将类的各个组成部分封装为信息,反射是一个机制的统称
        反射包含:
                (1)类加载(反射中最重要的一部分)
                (2)获取类对象
                (3)获取成员变量
                (4)获取构造方法
                (5)获取成员方法
                (6)根据构造方法创建对象
                (7)根据成员方法,执行方法
                (8)根据成员变量访问变量

        应用场景:能在代码执行期间,动态的加载类,加载方法,加载变量,可以不再编写代码的时候确定对象,如果需要切换对象的话,不用改动源代码
        框架:能使用配置文件修改自己所需要的东西,而不用去修改代码,用户只要会修改配置文件就行

2.获取 Class对象有几种方式?他们的用途都在哪?
        获取Class对象的方式有三种
        用途:
                1:使用类的class属性来获取该类对应的Class对象。
                class,可以在没有对象的情况下,获取到Class对象,将Class对象加载进内存
             也可以在已经存在对象的时候,使用这种方式获取
                2:调用对象的getClass()方法,返回该对象所属类对应的Class对象
                对象.getClass(),是在已经有对象的情况下,反推拿到该对象的Class类对象
                3:使用Class类中的静态方法forName(String className),该方法需要传入字符串参数,该字符串参数的值是某个类的全路径,也就是完整包名的路径
                Class.forName将类的全路径配置到方法中,可以根据类的全路径将类加载进内存,生成Class类对象
       

3.如何获取Class对象中被私有的成员变量对象和成员方法对象?
        获取私有成员变量的方法:使用getDeclaredField()或getDeclaredFields()
        获取私有成员方法的方法:使用getDeclaredMehtod()或getDeclaredMethods()

回复 使用道具 举报
1.什么是反射?反射在程序中的应用场景,为什么反射会被称为框架设计的灵魂?
(1)反射是是一种机制,包括类加载 获取类对象 获取成员变量 获取构造方法 获取成员方法 根据构造方法创建对象 根据成员方法执行方法 根据成员变量访问变量
(2)应用场景:在运行时期想要不动源代码的情况下切换对象,就需要用到反射
(3)通过反射编写代码,暴露给用户的只是一个配置文件,用户只需要会修改配置文件就能使用不同功能,而框架是优秀开发者开发的半成品软件,普通程序员作为使用者,只需要学会框架配置文件的配置规则,就能通过框架的配置文件去执行框架的不同功能,是一个道理

2.获取 Class对象有几种方式?他们的用途都在哪?
三种方式获取Class对象
(1)类名.class属性,常用于没有对象的情况下,获取到Class对象,将Class对象加载进内存,也可以在已经存在对象的时候,使用这种方式获取
(2)对象名.getClass()方法
,在已经有对象的情况下,反推拿到该对象的Class类对象
(3)Class.forName(全类名)方法,将类的全路径配置到方法中,可以根据类的全路径将类加载进内存,生成Class类对象  


3.如何获取Class对象中被私有的成员变量对象和成员方法对象?
(1)获取成员变量
首先根据Class.forName(包路径)方法创建Class对象
-> 通过对象调用getDeclareField,获取成员变量对象
-> 通过Class.getDecalaredConstructor()方法创建单个的私有构造方法
-> 通过构造方法对象newInstance创建对象

(2)获取成员方法
首先根据Class.forName(包路径)方法创建Class对象
-> 通过Class.getDecalaredConstructor()方法创建单个的私有构造方法
-> 通过构造方法对象newInstance创建对象
-> 通过对象调用getDeclareMethod,获取成员方法对象

回复 使用道具 举报
1.什么是反射?反射在程序中的应用场景,为什么反射会被称为框架设计的灵魂?

- 反射就是将类的各个组成部分封装为信息,类加载进内存时产生Class类对象
- 用反射只需要通过配件文件就能够达到切换不同功能目的,框架就是运用反射这一动态性。

2.获取 Class对象有几种方式?他们的用途都在哪?

- 使用类的Class属性去获取该类对应的class对象
- 调用对象的getClass()方法(Object方法),返回该对象所属类对应的Class对象
- 使用Class类中的今天方法forName(String className),该方法需要传入字符串参数,该字符串参数的值是某个类的全路径,也是完整包名的路径

3.如何获取Class对象中被私有的成员变量对象和成员方法对象?

- 用setAccessible(boolean flag)方法里面为true就可以暴力反射,这样就能获得被私有的成员变量对象和成员方法对象
回复 使用道具 举报
1.什么是反射?反射在程序中的应用场景,为什么反射会被称为框架设计的灵魂?
反射是一个机制的统称,类加载,调用类对象的成员变量或者方法,new对象 对象初始化父类资源,等等都可以称作反射
反射可以在代码运行期间动态的创建对象,而不是在代码编写过程就指定好了对象,可以根据配置文件来创建对象,而不用修改
源代码,因为它的灵活性才被称为框架的设计灵魂


2.获取 Class对象有几种方式?他们的用途都在哪?
有三种,1. 类名.class  可以在没有对象和有对象的时候获取Class类对象
        2. 对象.getClass 这种只能是在有对象的时候获取
        3. Class.forName()括号内传入要创键的类的包路径,这种方式可以用在没对象和有对象的时候,也可以把路径不写死这样更加的灵活


3.如何获取Class对象中被私有的成员变量对象和成员方法对象?
需要用Class类对象调用getDeclaredMethod()括号内传入指定对象的名字,参数就可以获取改方法对象
成员变量如上 只要调用getDeclaredField() 括号内指定变量的名称
回复 使用道具 举报
请根据自己的理解回答下面问题:

1.什么是反射?反射在程序中的应用场景,为什么反射会被称为框架设计的灵魂?
        答:类的class文件加载进内存会使用类加载器创建一个Class类的对象,这个对象保存着类中的信息,通过这个对象来获取类的成员就是反射。通过反射编写代码,使代码更具灵活性,因为类的对象和成员的获取可以通过配置文件来得到,只需要修改配置文件,就可以运用各个类的成员。这种通过反射编写的代码复用性强,框架就是这样设计的。

2.获取 Class对象有几种方式?他们的用途都在哪?
        答:三种方式。
        第一种:通过 类名.class 来获取class对象,需要在已知类名的情况下使用。
        第二种:通过 对象.getClass() 方法获取,需要一个类的对象。
        第三种:通过Class.forName(全类名)方法,需要路径。
        三种方式都是用来获取Class对象,第三种只需要路径,这个路径可以放在配置文件中,可以修改配置文件就可以获得各个类的class对象,通过反射编写代码就是使用这种方式。

3.如何获取Class对象中被私有的成员变量对象和成员方法对象?
        答:使用getDeclaredFields()和getDeclaredField(String name)方法可以获取私有的成员变量,通过getDeclaredFields()和getDeclaredField(String name)可以获取私有成员方法,使用的成员不能在其它类中被访问,需要先使用setAccessible(boolean flag)跳过权限检查。

回复 使用道具 举报
请根据自己的理解回答下面问题:

1.什么是反射?反射在程序中的应用场景,为什么反射会被称为框架设计的灵魂?
反射:就是将类的各个组成部分封装为数组,然后通过获取到变量和方法的信息来创建对象,调用方法的一种机制。
         由于这种动态性,可以极大的增强程序的灵活性,程序不用在编译期就完成确定,在运行期仍然可以扩展
好处:反射技术可以在程序的运行期间动态的创建对象和执行方法,解耦合,只需要修改配置文件就能达到切换对象的目的

2.获取 Class对象有几种方式?他们的用途都在哪?
(1)类名.class
(2)对象名.getClass()
(3)Class.forName("类的全路径名");



3.如何获取Class对象中被私有的成员变量对象和成员方法对象?

反射获取构造方法:
(1)Constructor<?>[] getConstructors()----------------------------------------返回所有公共构造方法对象的数组
(2)Constructor<?>[] getDeclaredConstructors()------------------------------返回所有构造方法对象的数组
(3)Constructor getConstructor(Class<?>... parameterTypes)-----------------返回单个公共构造方法对象
(4)Constructor getDeclaredConstructor(Class<?>...parameterTypes)--------返回单个构造方法对象

创建对象的方法: newInstance(Object...initargs)

反射获取成员变量:
(1)Field[] getFields()-------- ---------------------返回所有公共成员变量对象的数组
(2)Field[] getDeclaredFields() -------------------返回所有成员变量对象的数组
(3)Field getField(String name) ------------------返回单个公共成员变量对象
(4)Field getDeclaredField(String name)-------- 返回单个成员变量对象

反射获取成员方法:
(1)Method[] getMethods()-----------------------------------------------------------返回所有公共成员方法对象的数组,包扩继承的
(2)Method[] getDeclaredMethods()-------------------------------------------------返回所有成员方法对象的数组,不包括继承的
(3)Method getMethod(String name, Class<?>...parameterTypes)------------------返回单个公共成员方法对象
(4)Method getDeclaredMethod(String name, Class<?>...parameterTypes)--------返回单个成员方法对象
       
执行方法的方法:    Object invoke(Object obj,Object... args)---------有返回值时,需用变量去接收。
回复 使用道具 举报
1.什么是反射?反射在程序中的应用场景,为什么反射会被称为框架设计的灵魂?
答:反射是运行时通过获取类的变量和方法信息,然后通过获取到的信息创建对象,调用方法。
因为反射能够使得在不更改源代码的情况下通过修改配置文件从而达到调用框架中封装好的功能,所以反射是框架设计的灵魂。

2.获取 Class对象有几种方式?他们的用途都在哪?
答:有三种方式:1.类名.class 2.对象名.getClass 3.Class.forName
第一种适用在只知道类名的情况下适用,第二种是在已经获得了对象的时候使用,第三种最为常用,是通过包名和类名的方式创建对象。


3.如何获取Class对象中被私有的成员变量对象和成员方法对象?
答:Field和Method类下的setAccessible方法在参数中填true即可暴力反射,达到获取私有成员变量及方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马