--------------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. iphone之NSArray比较大小

    //排序 NSArray *tempArray = [[NSArray alloc]initWithArray:self.contentArray]; tempArray = [tempArray s ...

  2. 窗体的Alpha通道透明色支持(一旦 Form 被定义为利用 LayeredWindow ,窗口的绘图不再响应沿用多年的 WM_Paint 消息)

    参考: http://www.delphibbs.com/delphibbs/dispq.asp?lid=2190768 Windows 2000后,为了支持类似MAC界面的Alpha通道混合效果,提 ...

  3. Delphi中获取Unix时间戳及注意事项(c语言中time()是按格林威治时间计算的,比北京时间多了8小时)

    uses DateUtils;DateTimeToUnix(Now) 可以转换到unix时间,但是注意的是,它得到的时间比c语言中time()得到的时间大了8*60*60这是因为Now是当前时区的时间 ...

  4. C++基础之---union联合体大小分析

    #include <iostream> using namespace std; union un { int a[7]; double b; char c[10]; int d[3]; ...

  5. opencv MAT数据操作

    1.存取单个像素值 最通常的方法就是 img.at<uchar>(i,j) = 255; img.at<Vec3b>(i,j)[0] = 255; 2.用指针扫描一幅图像 对于 ...

  6. Iron Foundry

    Iron Foundry Provided by Tier 3 Iron Foundry is a project initiated by the engineers of Tier 3, an e ...

  7. VC++ 视频播放器 图文步骤记录

    1.安装DirectShow9.0 SDK DirectShow9 SDK下载链接http://download.csdn.net/detail/jindou910101/5591169 2.运行Di ...

  8. Tutorial: 结合使用AngularJS和Django

    好吧,我承认自己很懒,时间又不够用. 翻译的几个文章都是虎头蛇尾,但我保证这次肯定不太监. 关键的单词不翻译,实在觉得翻译成汉语很别扭,括号里是参考翻译. 有问题和建议尽管提出来,我会改进完善. Tu ...

  9. wwwtyro/cellophane

    wwwtyro/cellophane A dead simple web terminal that gets all of the boilerplate out of the way and le ...

  10. 不错的C++框架: Thrift(2)-传输和网络相关

    不错的C++框架: Thrift(2)-传输和网络相关 - ang639 - 博客频道 - CSDN.NET 不错的C++框架: Thrift(2)-传输和网络相关