J2ee 反射

1.什么是反射?
反射是java语言的一种机制,利用反射机制动态的实例化对象(构造函数)、读写属性、调用方法。

反射就是把java类中的各种成分映射成一个个的Java对象
例如:有:方法、构造方法、包等等信息,利用反射技术可以对一个类进行解剖,把个个组成部分映射成一个个对象。(其实:一个类中这些成员方法、构造方法、在加入类中都有一个类来描述)

2. 类类
   所有狗      狗类 Dog                 狗对象  二哈 

   所有猫      猫类 Cat                 猫对象  肥波
  
   所有类      类类 java.lang.Class     类对象 特定类

3.如何得到类对象
   一切反射相关的代码都从获得类对象开始
   3种获取方式:
     2.1 类名.class;
     2.2 对象名.getClass();
     2.3 Class.forName(全限定名/全路径名)(最常用)

//Class.forName(全限定名)(重要)
		Class clazz = Class.forName("com.zking.reflection.Student");
		
		Student stu = (Student)clazz.newInstance();
		

 注1:ClassNotFoundException(类名错|少jar包)
  注2:同一类的、类对象只会创建一个

4.根据类得到类名(全限定名/全路径名)
    1)cName.getName();            -->获取全限定名
    2)cName.getSimpleName();         -->获取类名
    3)cName.getPackage();             -->获取包名

代码如下


		System.out.println(Modifier.STATIC);
		
		System.out.println(Modifier.FINAL);
		
		System.out.println(Modifier.PRIVATE);
		

5.根据类得到类的属性
    Field field=cla.getField(“属性名”);

    field.getName();            -->获取属性名            
    filed.getType();            -->获取属性类型        
    field.getModifiers();            -->获取属性访问修饰符    
    field.set(Object,Object);         -->设置属性值,参数1:要设置属性所在对象;参数2:要设置的值;    
    field.get(Object);            -->获取属性值,参数:要获取属性值的对象                
    clazz.getDeclaredField(“属性名”);    -->获取单个属性(私有、公有、受保护、默认、静态)    
    clazz.getDeclaredFields();        -->获取所有属性(私有、公有、受保护、默认、静态)

6.根据类得到类的方法
    //无参无返回、无参有返回、有参无返回、有参有返回
    cla.getMethod();            -->获取单个公有方法
    cla.getDeclaredMethod();        -->获取当个方法(包括私有、受保护、默认、公有)
    cla.getMethods();            -->获取所有公有方法
    cla.getDeclaredMethods();        -->获取所有的方法(包括私有、受保护、默认、公有)

7.根据类得到类的构造方法
    cla.getConstrutor();            -->获取单个公有构造方法
    cla.getDeclaredConstrutor();        -->获取单个构造方法(包括私有、受保护、默认、公有)
    cla.getConstrutors();            -->获取所有的公有构造方法
    cla.getDeclaredConstrutors();        -->获取所有的构造方法(包括私有、受保护、默认、公有)

//Class.forName(全限定名)(重要)
		Class clazz = Class.forName("com.zking.reflection.Student");
		
		Student stu = (Student)clazz.newInstance();
		stu.setSname("dog思琪");
		//调用方法
		
		//1.获取方法对象
		Method method = clazz.getDeclaredMethod("add",Integer.class,Integer.class);
		
		//2.打开方法访问限制
		method.setAccessible(true);
		
		//3.调用方法
		Object invoke = method.invoke(stu,88,99);
		System.out.println(invoke);

8.根据类得到类的实现接口列表
    Class[] interface=cla.getInterfaces();    -->获取类对象中所有实现接口列表
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值