一、反射概念

 不用实例化也可以调用类中的私有成员;反射慢,实例化快;反射可以看到其他类中的内部构造,透明,但是不安全。

 JAR:JAVA函数库

 WAR:web发布的包

 YAR:RPC服务

二、idea打jar

  首先将需要当jar包的类全都public,然后点击右上角的图标,在Artifacts栏中选中一个主类方法,同意所添加的项目,ok。

  然后点击菜单栏中的Build下的build project,将jar包加入obj目录下。

  在自己的项目下新建包lib,将刚才加入到obj中的jar包复制到lib中,然后再次点击第一步中的图标,在libraries中选择刚才这个jar,添加即可。

三、反射具体操作

  1、将所需要创建的类都打包称为jar

  2、在方法中写入如下类似代码(c为运行时类)类——>运行时类——>对象(默认构造器反射)

 private static void reflectConstructor() {
//类 运行时类 对象
try {
Class c = Class.forName("com.zxc.N1.Animal");
Object o = c.newInstance();
Animal a = (Animal) o;
a.setName("Dog");
System.out.println(a.getName());
} catch (Exception e) {
e.printStackTrace();
}
}

  3、非默认构造器反射:参数列表中的三个点表示未知参数个数

private static void reflectNDConstructor(){
try {
Class c=Class.forName("com.zxc.N1.Animal");
Constructor c1=c.getConstructor(int.class,String.class);
Object o=c1.newInstance(12,"Cat");
Animal a=(Animal)o;
System.out.println(a.getName());
} catch(Exception e){
e.printStackTrace();
}
}

  4、方法反射:

private static void reflectMethod(){//反射方法
try{
Class c=Class.forName("com.zxc.N1.Animal");
Constructor c1=c.getConstructor(int.class,String.class);
Object o=c1.newInstance(10,"Snake");
Method m=c.getMethod("setName",String.class);
m.invoke(o,"Wolf");
Method m1=c.getMethod("getName");
System.out.println(m1.invoke(o)); // Method ms[]=c.getMethods();
// for(Method e:ms){
// System.out.println(e.getName());
// }
}catch (Exception e){
e.printStackTrace();
}
}

  5、属性反射:

  

 private static void reflectAttribute() {//反射属性
try{
Class c=Class.forName("com.zxc.N1.Animal");
Object o=c.newInstance(); Field age=c.getDeclaredField("age");
// age.set(o,12);私有不可访问
age.setAccessible(true);
age.set(o,100);
System.out.println(age.get(o));
// Field []f=c.getFields(); 私有属性看不到
// Field []f=c.getDeclaredFields();//可以看到私有属性
// for(Field f1:f){
// System.out.println(f1.getName());
// }
}catch(Exception e){
e.printStackTrace();
}
}

6、数组反射

  

 private static void reflectArray(){
Object o=Array.newInstance(String.class,3);
Array.set(o,0,"A");
System.out.println(Array.get(o,0));
}
通过反射来扩展一个数组:
public Object growArray(Object array, int size) {

    Class type = array.getClass().getComponentType();

    Object grown = Array.newInstance(type, size);

    System.arraycopy(array, 0, grown, 0,

        Math.min(Array.getLength(array), size));

    return grown;

}

14、反射(reflect)的更多相关文章

  1. [Go] 反射 - reflect.ValueOf()

    类型 和 接口 由于反射是基于类型系统(type system)的,所以先简单了解一下类型系统. 首先 Golang 是一种静态类型的语言,在编译时每一个变量都有一个类型对应,例如:int, floa ...

  2. Go语言学习笔记(四)结构体struct & 接口Interface & 反射reflect

    加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套: go中的struc ...

  3. go语言之行--接口(interface)、反射(reflect)详解

    一.interface简介 interface(接口)是golang最重要的特性之一,Interface类型可以定义一组方法,但是这些不需要实现.并且interface不能包含任何变量. 简单的说: ...

  4. Golang的反射reflect深入理解和示例

    编程语言中反射的概念 在计算机科学领域,反射是指一类应用,它们能够自描述和自控制.也就是说,这类应用通过采用某种机制来实现对自己行为的描述(self-representation)和监测(examin ...

  5. golang中的反射reflect详解

    先重复一遍反射三定律: 1.反射可以将"接口类型变量"转换为"反射类型对象". 2.反射可以将"反射类型对象"转换为"接口类型变量 ...

  6. Go语言反射reflect

    目录 通过反射获取类型信息 理解反射的类型(Type)与种类(Kind) reflect.Elem() - 通过反射获取指针指向的元素类型 通过反射获取结构体的成员类型 通过反射获取值信息 使用反射值 ...

  7. Java框架基础——反射(reflect)

    一.Class类的使用 1)在面向对象(oop)的世界里,万事万物皆对象. 在Java中,包括基本的数据类型,都是对象. Class c = int.class;//int 的类类型 那就是说: 类是 ...

  8. 类的加载到反射reflect

    类的加载: 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载.连接.初始化这三个步骤来实现对这个类进行初始化. 加载: 就是指将class文件加载进入内存,并为之创建一个Class对 ...

  9. java 反射(reflect)总结,附对象打印工具类

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

  10. (java)从零开始之-反射Reflect

    反射: 当一个字节码文件加载到内存的时候,jvm会对该字节码进行解剖,然后会创建一个对象的Class对象,把字节码文件的信息全部都存储到该Class对象中,我们只要获取到Class对象,我们就可以使用 ...

随机推荐

  1. Ant批量处理jmeter脚本

    Ant是一个可以把代码从某个地方拿来,编译,再拷贝到某个地方去的构建工具.一时冲动学习一下,顺便王婆卖瓜尝试着处理jmeter的脚本,于是,采坑之旅也从此开始.本文省略ant安装步骤和ant脚本说明, ...

  2. Linux程序设计学习笔记——异步信号处理机制

    转载请注明出处: http://blog.csdn.net/suool/article/details/38453333 Linux常见信号与处理 基本概念 Linux的信号是一种进程间异步的通信机制 ...

  3. JMX学习笔记(一)-MBean

    JMX学习笔记(一)-MBean 标签: jmxstringjavainterfaceexceptionclass 2010-12-07 22:20 15360人阅读 评论(5) 收藏 举报  分类: ...

  4. Android自己定义控件系列三:自己定义开关button(二)

    接上一篇自己定义开关button(一)的内容继续.上一次实现了一个开关button的基本功能.即自己定义了一个控件.开关button,实现了点击切换开关状态的功能.今天我们想在此基础之上.进一步实现触 ...

  5. 关于Win 10的隐私保护政策

    近日.有人责备Win10收集用户信息,事实上这样的指责并不公平,比方:"Privacy Groups Claim Microsoft Uses Windows 10 as Big Broth ...

  6. 11.QT窗口布局切割

    int main(int argc, char *argv[]) { QApplication a(argc, argv); //MainWindow w; //w.show(); //左右分割 7 ...

  7. Building Block[HDU2818]

    Building Block Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...

  8. 自动化框架的两种断言设计(pytest 版)

    自动化测试断言失败时,根据不同业务场景,可能需要立即终止或继续执行.这里以 Appium + pytest 为例. 一. 断言失败立即终止 用途一:用例的预期结果是其他用例的前提条件时,assert ...

  9. angular自定义指令-directive

    Directive究竟是个怎么样的一个东西呢?我个人的理解是这样的:将一段html.js封装在一起,形成一个可复用的独立个体,具体特定的功能.下面我们来详细解读一下Directive的一般性用法. v ...

  10. Unity Android发布“Bundle Identifier has not been set up correctly”

    原文:http://answers.unity3d.com/questions/162141/android-bundle-identifier-has-not-been-setup.html