文档章节

java反射

江湖三弟
 江湖三弟
发布于 2014/02/23 16:43
字数 367
阅读 539
收藏 16

java反射

反射的应用一般是要用到某些特殊类的属性和方法,无论是一般方法还是私有方法都可以通过反射机制获取到。

下面将介绍其中的6种属性的获取:一般构造函数,私有有参构造函数,一般变量,私有变量,一般方法,私有有参方法

B.java


package com.swastika.test;

public class B{


	public B() {
		// TODO Auto-generated constructor stub
		System.out.println("B无参数公有构造函数");
	}
	
	private B(int n,String name){
		System.out.println("B有参数的私有构造函数"+"名字: "+name+"编号: "+n);
	}
	
	public String n = "B公有变量";
	private String m = "B私有变量";
	
	
	public void say() {
		// TODO Auto-generated method stub
		System.out.println("B公有一般方法");
	}

	private void tell(String name) {
		// TODO Auto-generated method stub
         System.out.println("B私有一般方法"+name);
	}

}




People.java

package com.swastika.test;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;


public class People{


	
	public static void main(String[] args) {
		try {
			Class classB = Class.forName("com.swastika.test.B");  //反射出类class
			
			B b1 = (B) classB.newInstance();  //B的无参数公有构造函数
			
			Constructor constructor = classB.getDeclaredConstructor(new Class[]{int.class,String.class});  //定义构造函数
			constructor.setAccessible(true);      //设置查看私有方法的权限
			B b2= (B) constructor.newInstance(1,"张三");  //B的有参数私有构造函数
			
			System.out.println(classB.getField("n").get(b1));   //B的公有变量
			
			Field field = classB.getDeclaredField("m");    //定义m变量
			field.setAccessible(true);
			System.out.println(field.get(b1));
			
			Method method_say = classB.getMethod("say");    //先查询定位到say方法
			method_say.invoke(b1);                          //执行say方法
			
			Method method = classB.getDeclaredMethod("tell",new Class[]{String.class});  //定义方法属性
			method.setAccessible(true);
			method.invoke(b1, "张三");
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}




© 著作权归作者所有

江湖三弟
粉丝 31
博文 67
码字总数 30962
作品 0
苏州
高级程序员
私信 提问
【免费】全网独家:详解Java反射机制

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/silencezwm/article/details/85115991 【免费】全网独家:这是一份非常值得珍藏的Android知识体系!!! 本文...

silencezwm
2018/12/20
0
0
最最最常见的Java面试题总结——第二周

String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的? String和StringBuffer、StringBuilder的区别 可变性   String类中使用字符数组:保存字符串,所以String对象是...

Amsour丶
2018/08/13
0
0
老司机带你深入浅出Java反射

反射,它就像是一种魔法,引入运行时自省能力,赋予了 Java 语言令人意外的活力,通过运行时操作元数据或对象,Java 可以灵活地操作运行时才能确定的信息 这里笔者就深入浅出总结下Java反射,...

小刀爱编程
2018/11/07
0
0
云妹总结了一些最最最常见的Java面试题供大家参考

云妹导读:String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的? String和StringBuffer、StringBuilder的区别 可变性 String类中使用字符数组:private final cha...

阿里云科技快讯
2018/08/17
0
0
Gson通过反射将Json转化为java对象

Gson是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可以将一个Json字符转成一个Java对象,或者将一个Java转化为Json字符串。 然后我们先写一个demo来用Gson将一个json转化...

woshixin
04/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

利用mybatis generator生成实体类、Mapper接口以及对应的XML文件

项目中通常会遇到数据的持久化,如果是采用mybatis的orm,就会涉及到生成xml的问题,刚好mybatis官网提供了这么个插件MyBatis Generator,效果简直是棒呆。 1. 首先需要在build.gradle文件中...

啊哈关关
今天
2
0
SpringSocial相关的知识点

使用SprigSocial开发第三方登录 核心类 ServiceProvider(AbstractOauth2ServiceProvider):主要负责实现server提供商(例如QQ,微信等共有的东西),默认实现类是AbstractOauth2ServiceProvider...

chendom
今天
3
0
Java并发之AQS详解

一、概述   谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)!   类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源...

群星纪元
昨天
4
0
Fabric-sdk-java最新教程

Fabric Java SDK是Fabric区块链官方提供的用于Java应用开发的SDK,全称为Fabric-sdk-java,网上可用资料不多,本文列出了精心整理的针对Fabric Java SDK的最新精选教程。 如果希望快速掌握F...

汇智网教程
昨天
3
0
react 子组件监听props 变化

componentWillReceiveProps //已经被废弃 getDerivedStateFromProps// 推荐使用//如果条件不存在必须要返回null static getDerivedStateFromProps(props, current_stat...

一箭落旄头
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部