我已经通过度娘知道答案了。可以获取
感觉没有错,你看错误提示是什么
解决了,去获取class type的时候需要使用泛型
如:
Class<?> b = a.getClass();
试了下,不传参数编译不通过,可以传类对象,也可以传一个null
假设程序员A在写一个类A,程序员B在写一个类B,现在程序员要用到A写的类,但是A还没写完,因此肯定是编译不了的(可以假设A类实现了一个接口,但是程序员A还没有将所有方法全部实现),但是B又需要用到A完成了的某个方法,此时通过反射,就可以在非编译的情况下动态调用某个方法。
是新知识就行,学无止境
没ctrl+s?
toUpperCase()是将字母全部变大写,toLowerCase()是将字母变小写
反射类
是什么意思?
反射不是以一种操作吗?
反射的思想就是用Field对象来代理e这个对象来操作,也就是e对象只是Field对象的一个传进来的参数
所以用f.get(e); 如果 直接e.get(v)那就是直接操作e对象,就不是反射了
可以啊,new + 构造方法()在哪里都可以执行
在同一个类中,不允许方法名和参数列表都相同的两个方法存在。
只知道类的名字 类名.class;
知道该类的对象 对象名.getclass();
没问题了,我看错了,前面还是会先用方法名获取Method对象
实例对象咯
动态执行方法,比如很多框架级的设计
main方法是静态方法,静态方法不能直接调用动态方法,class A需要是静态的.
老师的是两个不同的类,你这个A是MethodDemo1的内部类.
这样想一下,就明白了,如果你不把对象a1传入,那么到底是哪个对象来操作方法呢!
像 a1 这样的对象可以new 出很多,比如a2,a3................: 他们在堆内存中是不同的对象!
当然来区分对象!,可以就可以明确那个对象 是 a1 还是其他对象来操作方法了
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。
这个方法如果没有返回值返回的是null 而null是一个固定的不确定类型的内存,即可以看做是什么类型也不是,也没有继承Object,当然没有toString()方法,所以这句代码不会默认调用str的toString()方法,所以会报错
首先,如果一个方法没有返回值的话那么该方法返回的类型应该是void’
然后,你需要理解一下类和对象的区别。如果构造方法中对name属性赋值了,那么该getName()方法就不会为空,反之则为null
建议题主学一下设计模式,比如设计模式——工厂模式,这样就知道使用反射到底有多方便了
反射提高程序的灵活性和扩展性,低耦合。常用于系统架构和框架搭建。