--------------TestBean
package lh.demo.bean;
public class TestBean {
 private String userName;
 private String password;
 private String age;
 public TestBean (){
 }
 public TestBean (String _userName,String _password,String _age){
  this.userName = _userName;
  this.password = _password;
  this.age = _age;
 }
 public String getUserName() {
  return userName;
 }
 public void setUserName(String userName) {
  this.userName = userName;
 }
 public String getPassword() {
  return password;
 }
 public void setPassword(String password) {
  this.password = password;
 }
 public String getAge() {
  return age;
 }
 public void setAge(String age) {
  this.age = age;
 }
 public void print(String str){
  System.out.println("不是static : "+str);
 }
 private void privateprint(String str){
  System.out.println("private : "+str);
 }
 
 public static void staticprint(String str){
  System.out.println("static : "+str);
 }
 public String toString(){
  System.out.println(this.userName+","+this.password+","+this.age);
  return this.userName+","+this.password+","+this.age;
 } } 
--------------------------------

package lh.demo.test;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import lh.demo.bean.TestBean;

public class Reflect {
// 1怎样得到各个字节码相应的实例对象?

// 1)Class.forName("类的全路径") 推荐
// Class<?

> bean = Class.forName("lh.demo.bean.TestBean");

// 2)对象.getClass()
// Class<?> bean = new TestBean().getClass();
// 3)类名.class
// Class<?> bean = lh.demo.bean.TestBean.class;
 

// 2创建实例对象:
// 通常方式: TestBean bean = new TestBean("lisi","111","22");
// 反射方式:
// 1)已知类名
// TestBean testBean = (TestBean)bean.newInstance();
// 2)未知类名
// Object object = bean.newInstance();
 
// 3.Constructor类(java.lang.reflect)
// 代表类中的构造方法
//
// 1)得到某个类的构造方法:
// Class类的实例.getConstructors()
// Class<?> bean = Class.forName("lh.demo.bean.TestBean");
// Constructor[] con = bean.getConstructors();
// Object o1 = con[0].newInstance();
// Method method1 = bean.getMethod("toString",null);
// method1.invoke(o1, null);
// Object o2 = con[1].newInstance("lisi","111","22");
// Method method2 = bean.getMethod("toString",null);
// method2.invoke(o2, null);
 
// Class类的实例.getConstructor(Class... parmTypes)
// Class<?> bean = Class.forName("lh.demo.bean.TestBean");
// Constructor con = bean.getConstructor(String.class,String.class,String.class);
// Object b = con.newInstance("aaa","111","22");
 
// Class类的实例.getDeclaredConstructor(Class... parmTypes)
// 私有
 
// 4.Field类(java.lang.reflect)
// 代表类中的成员变量
// 1)得到某个类的成员变量:
// Class类的实例.getDeclaredFields()
// Class<?

> bean = Class.forName("lh.demo.bean.TestBean");

// Object o = bean.newInstance();
// Field[] fields = bean.getDeclaredFields();
// for(Field f:fields){
// System.out.println(f.getName());
// }
// Class类的实例.getFields()
// Class类的实例.getDeclaredField(变量名)
// Class<?> bean = Class.forName("lh.demo.bean.TestBean");
// Object o = bean.newInstance();
// Field age = bean.getDeclaredField("age");
// age.setAccessible(true);
// age.set(o,"23");
// System.out.println(age.get(o));
// Class类的实例.getField(变量名)
 
// 5.Method类
// 代表类中的成员方法
// 1)得到某个类的成员方法:
// Class类的实例.getDeclaredMethods()
// 得到本类的全部方法(public,protected,private)继承的,不包含子类的
// Class类的实例.getMethods()
// 得到全部的方法包含子类的,父类的(public)
// Class类的实例.getDeclaredMethod(方法名,Class... 參数类型)
// Method method = bean.getDeclaredMethod("privateprint", String.class);
// method.setAccessible(true); //私有方法
 
// Class类的实例.getMethod(方法名,Class... 參数类型)
// Method method = bean.getMethod("print", String.class);
// 差别:
// public Method[] getMethods()返回某个类的全部公用(public)方法包含其继承类的公用方法,当然也包含它所实现接口的方法。

// public Method[] getDeclaredMethods()对象表示的类或接口声明的全部方法。包含公共、保护、默认(包)訪问和私有方法,但不包含继承的方法。当然也包含它所实现接口的方法。


// 2)方法调用:
// 反射的方式:method.invoke(对象,Object... 參数值);
// //非静态调用方法
// Object o3 = method.invoke(null,"aaa");
// //静态
// Object o2 = method.invoke(obj,"aaa");
 

 public static void main(String[] args) {
  try {
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

java reflect反思总结的更多相关文章

  1. java reflect 初始学习 动态加载类

    首先要理解Class类: 在java 的反射中,Class.forName("com.lilin.Office") 使用类的全名,这样获取,不仅仅表示了类的类类型,同时还代表着类的 ...

  2. Java反射学习(java reflect)(二)

    ok之前说了Java的反射和反射分析类,那这些东西有神马作用呢,下面就来说应用: 三.运行时使用反射分析对象 简单写一个Employee类,然后利用JAVA反射去取name域,getDeclareFi ...

  3. Java反射学习(java reflect)(一)

    具有能够分析类能力的程序被称为反射,使用反射库可以编写能够动态操纵Java代码的程序. 一.开始 背景:Java运行时系统始终对所有对象维护一个被称为Runtime的类型标识,然后这货save着每个对 ...

  4. java reflect反射调用方法invoke

    类定义 package Reflect; public class MyTest { public int a; public static int b; public static final in ...

  5. java reflect反射获取方法变量参数

    类的成员包含变量(Field),方法(Method),构造器(Constructor) 类定义 package Reflect; public class MyTest { public int a; ...

  6. Java reflect 反射学习笔记

    1. class 类的使用 万事万物皆对象 (基本数据类型, 静态成员不是面向对象), 所以我们创建的每一个类都是对象, 即类本身是java.lang.Class类的实例对象, 但是这些对象不需要 n ...

  7. Java Reflect

    Method method=demo.getMethod("sayChina");             method.invoke(demo.newInstance());   ...

  8. java reflect反射---Java高级开发必须懂的

    理解反射对学习Java框架有很大的帮助,如Spring框架的核心就是使用Java反射实现的,而且对做一些Java底层的操作会很有帮助.  一.Class类的使用         1.万事万物皆对象,( ...

  9. Java —— Reflect反射机制

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

随机推荐

  1. 爱在watir(1)----一切从搭讪开始

    Tom和Coco是有名的加班狂人.Tom加班改bug,Coco加班回归bug. 两人经常加班到很晚,Tom是男孩子,很自然的担负起护送Coco的任务.他打车先送Coco回去,然后自己回家.不过Tom和 ...

  2. Swift - 将表格UITableView滚动条移动到底部

    有时我们需要通过代码自动将表格UITableView滚动条移动到尾部,只需要使用scrollToRowAtIndexPath方法即可,代码如下: 1 2 3 4 5 var secon = 1 //最 ...

  3. HTML中Id和Name的区别

    源地址:http://www.cnblogs.com/laodai/articles/2244215.html 在html中:name指的是用户名称,ID指的是用户注册是系统自动分配给用户的一个序列号 ...

  4. spring开发基础

    Spring是一个开源框架,它由Rod Johnson创建.它是为了解决企业应用开发的复杂性而创建的.Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Spring的用途 ...

  5. c#Lamdba表达式与托付

    介绍: "Lambda表达式"(lambda expression)是一个匿名函数,在C#3.0中引入了lambda表达式,它是对匿名函数的一种简化,能够包括表达式和语句,而且可用 ...

  6. Android常用控件之RatingBar的使用

    RatingBar控件比较常见就是用来做评分控件,先上图看看什么是RatingBar 在布局文件中声明 <?xml version="1.0" encoding=" ...

  7. 用wireshark解析应用层存储包

    工作中常常须要统计server上的rtp包接收.发送性能.不想自己再做一套统计软件,打算用现有的wireshark来做分析统计. 先把rtp头存成pcap格式文件,pcap文件格式及如何存储能够參照这 ...

  8. ZOJ 3529 A Game Between Alice and Bob(博弈论-sg函数)

    ZOJ 3529 - A Game Between Alice and Bob Time Limit:5000MS     Memory Limit:262144KB     64bit IO For ...

  9. 为了树莓派IIraspberrypi安装emacs+ecb+cedet+session+color-theme+cscope+linum

    类似这篇文章写的不多,为了避免以后大家转来转去而忽略了写文章的时间,这些特别加上是2014年6月28日,省的对不上一些软件的版本号(下文中有些"最新"的说法就相应这个时间).假设转 ...

  10. Codeforce 143B - Help Kingdom of Far Far Away 2

    B. Help Kingdom of Far Far Away 2 time limit per test 2 seconds memory limit per test 256 megabytes ...