Java 反射和映射(主要描述下反射)
来源:互联网 发布:美发上门服务app软件 编辑:程序博客网 时间:2024/06/13 10:24
什么是反射?等同于映射吗?
完全不相关的。反射是一个机机制,映射是一种关系。
反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
映射是一种对应关系,在很多的情况下,表示一种存在的联系而已。
反射能做什么
在运行时判断任意一个对象所属的类;
在运行时构造任意一个类的对象;
在运行时判断任意一个类所具有的成员变量和方法;
在运行时调用任意一个对象的方法;
生成动态代理。
通俗的讲,当某些API没有暴露出来,但是我们又需要用到其中的某些方法属性就需要了。
ForExample:
//假如JavaBean没有暴露出构造方法
package mypackage;
public class JavaBean {
private int age;
private String name;
public String adress;
public int getAge() {
return age;
}
private void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAdress() {
return adress;
}
public void setAdress(String adress) {
this.adress = adress;
}
}
public class JavaBean {
private int age;
private String name;
public String adress;
public int getAge() {
return age;
}
private void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAdress() {
return adress;
}
public void setAdress(String adress) {
this.adress = adress;
}
}
//我们可以通过Class类来获取实例对象
package mypackage;
import java.lang.reflect.Method;
public class JNITest {
public static native void getStringFromC();
public static void main(String[] args) {
try {
//获取类
Class<?> class1 = Class.forName("mypackage.JavaBean");
//获取所有的公共的方法
Method[] methods = class1.getMethods() ;
for (Method method : methods) {
System.out.println( method );
}
//获取实例类
Object object = class1.newInstance();
JavaBean javaBean = (JavaBean)object;
javaBean.setName("Hellow");
System.out.println("--->"+javaBean.getName());
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果:
public java.lang.String mypackage.JavaBean.getName()
public void mypackage.JavaBean.setName(java.lang.String)
public java.lang.String mypackage.JavaBean.getAdress()
public void mypackage.JavaBean.TestMethod()
public int mypackage.JavaBean.getAge()
public void mypackage.JavaBean.setAdress(java.lang.String)
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public boolean java.lang.Object.equals(java.lang.Object)
public java.lang.String java.lang.Object.toString()
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
--->Hellow
public void mypackage.JavaBean.setName(java.lang.String)
public java.lang.String mypackage.JavaBean.getAdress()
public void mypackage.JavaBean.TestMethod()
public int mypackage.JavaBean.getAge()
public void mypackage.JavaBean.setAdress(java.lang.String)
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public boolean java.lang.Object.equals(java.lang.Object)
public java.lang.String java.lang.Object.toString()
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
--->Hellow
阅读全文
0 0
- Java 反射和映射(主要描述下反射)
- 基于注解和反射的Java ORM框架(1)-通过注解描述映射关系
- 增强版basedao java 反射和映射
- 映射和反射的区别
- javascript_javascript中的反射和映射
- hibernate继承关系映射和java反射机制的运用
- java中反射机制的主要作用
- 两个概念的区别:框架如Struts的url映射 VS java反射,是反射和映射
- java 反射和内省
- java 反射和代理
- JAVA 反射和代理
- Java 反射和代理
- java反射和内省
- java反射和内省
- java反射和内省
- java反射和注解
- java反射和迭代器
- java反射和注解
- Delcam PowerInspect 2014\
- java默认VM设置--myEclipse
- SpringBoot 调度任务
- ffmpeg seek--ts
- jQuery第一课 javaScript的简单复习(jquery框架)
- Java 反射和映射(主要描述下反射)
- Linux系统备份工具 REAR (RELAX-AND-RECOVER)
- 打印等腰三角形(1)
- 小白Java笔记——基本类型的类型转换和表达式类型的自动提升
- 使用文本做缓冲
- 【Android】从源码角度看Handler机制
- 蓝桥杯-三人年龄
- python pandas numpy matplotlib 常用方法及函数 转载▼ import numpy as np import pandas as pd import matplotlib
- Tomcat学习总结(17)—— Tomcat生产环境中域名访问和连接MySQL