1、java 反射的作用(好处):

(1)能够使我们很方便的创建灵活的代码,这些代码可以在运行时装配(运行时获取一个类实例),就不用在组件之间进行源代码链接了,大大提高系统的灵活性和扩展性。

(2)与Java动态编译相结合,可以实现无比强大的功能。

2、java的反射的负作用:

(1)使用反射的性能较低 
(2)使用反射相对来说不安全 
(3)破坏了类的封装性,可以通过反射获取这个类的私有方法和属性

3、反射实现要做的事:

(1)反编译:.class->.java

(2)通过反射机制访问java对象的属性,方法,构造方法等。

4、反射要用到的反射机制中的类:

java.lang.Class;

java.lang.reflect.Constructor;

java.lang.reflect.Method;

java.lang.reflect.Modifider;

5、具体功能的实现:

(1)反射实现的具体方法:下面来获取Demo类型

  1)、Clazz1 = Class.forName("Demo");

  2) 、 Clazz2 = Demo.class;

  3) 、 Demo demo = new Demo();

      Clazz3 = demo.getClass();

(2) 创建对象:获取类以后就可以创建对应的对象,利用newInstance;

  Class c = Class.forName("Demo");

  Object  = c.newInstance(); //调用了 Demo的无参数构造方法。

(3)获取属性:包括所有属性和指定属性。

  获取所有属性的写法:

package com.test;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier; /**
* Created by Administrator on 2016/11/13.
*/
public class ClazzTest { public static void main(String [] args){
//获取整个类
try {
Class c = Class.forName("java.lang.Integer");
//获取所有的属性
Field[] fs =c.getDeclaredFields();
//定义StringBuffer 来存储属性
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(Modifier.toString(c.getModifiers())+" class "+c.getSimpleName()+"{\n");
//里边的每一个属性
for (Field field:fs){
stringBuffer.append("\t");
stringBuffer.append(Modifier.toString(field.getModifiers())+"");//获得属性的修饰符
stringBuffer.append(field.getType().getSimpleName()+"");//属性类型的名称
stringBuffer.append(field.getName()+";\n");
}
stringBuffer.append("}");
System.out.print(stringBuffer);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} }
}

输出结果:

public final class Integer{
public static final int MIN_VALUE;
public static final int MAX_VALUE;
public static final ClassTYPE;
static final char[] digits;
static final char[] DigitTens;
static final char[] DigitOnes;
static final int[] sizeTable;
private final int value;
public static final int SIZE;
public static final int BYTES;
private static final long serialVersionUID;
}

  获取特定属性:

package com.test;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.lang.Integer;
/**
* Created by Administrator on 2016/11/13.
*/
public class ClazzTest { public static void main(String [] args){
/*
User u = new User();
u.age = 12; //set
System.out.println(u.age); //get
*/ //获取整个类
try {
Class c = Class.forName("User");
//获取所有的属性
Field fs =c.getDeclaredField("age"); //不能是静态的属性和final属性
//实例化
Object i = c.getInterfaces();
//打破封装
fs.setAccessible(true);
fs.set(i,20);
System.out.print(fs.get(i)); } catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} }
}

获取方法,和构造方法,不再详细描述,只来看一下关键字:

方法关键字

含义

getDeclaredMethods()

获取所有的方法

getReturnType()

获得方法的放回类型

getParameterTypes()

获得方法的传入参数类型

getDeclaredMethod("方法名",参数类型.class,……)

获得特定的方法

构造方法关键字

含义

getDeclaredConstructors()

获取所有的构造方法

getDeclaredConstructor(参数类型.class,……)

获取特定的构造方法

父类和父接口

含义

getSuperclass()

获取某类的父类

getInterfaces()

获取某类实现的接口

java 反射机制复习笔记。的更多相关文章

  1. java反射机制(笔记)

    java反射机制就是获取出class的相应方法 例如 获取构造函数: 模版: Class test = Class.forName("cn.test.Person");//得到相应 ...

  2. java反射机制学习笔记

    内容引用自:https://www.cnblogs.com/wkrbky/p/6201098.html https://www.cnblogs.com/xumBlog/p/8882489.html,本 ...

  3. JAVA的反射机制学习笔记(二)

    上次写JAVA的反射机制学习笔记(一)的时候,还是7月22号,这些天就瞎忙活了.自己的步伐全然被打乱了~不能继续被动下去.得又一次找到自己的节奏. 4.获取类的Constructor 通过反射机制得到 ...

  4. Java反射机制--笔记

    1.认识Class类 任何一个类都是Class类的实例对象,这个实例对象有三种表示方式. /*java 反射机制*/ // 获取类的方法 UserDao userDao = new UserDao() ...

  5. Java分享笔记:关于Java反射机制

    [1] 关于Java反射机制的概述 1.反射机制的概念:允许程序在执行期,借助于反射相关的API,取得任何类的内部信息,并能直接操作任意对象内部的属性和方法. 2.与反射相关的主要的API:java. ...

  6. Java二次复习笔记(1)

    Java二次复习笔记(1) Java采用的默认字符编码集是Unicode. byte=byte+byte报错,值为int,而byte+=byte不报错.同样short = short+short报错, ...

  7. 第28章 java反射机制

    java反射机制 1.类加载机制 1.1.jvm和类 运行Java程序:java 带有main方法的类名 之后java会启动jvm,并加载字节码(字节码就是一个类在内存空间的状态) 当调用java命令 ...

  8. Java反射机制

    Java反射机制 一:什么事反射机制 简单地说,就是程序运行时能够通过反射的到类的所有信息,只需要获得类名,方法名,属性名. 二:为什么要用反射:     静态编译:在编译时确定类型,绑定对象,即通过 ...

  9. java基础知识(十一)java反射机制(上)

    java.lang.Class类详解 java Class类详解 一.class类 Class类是java语言定义的特定类的实现,在java中每个类都有一个相应的Class对象,以便java程序运行时 ...

随机推荐

  1. haml入门

    1.什么是Haml Haml是HTML abstraction markup language,遵循的原则是标记应该是美的.Haml能够加速和简化模版,长处是简洁.可读.高效. 2.erbm模板和ha ...

  2. Linux下用户管理、目录结构

    linux的文件系统是采用层级式的树状目录结构,在此结构中的最上层是根目录“/”,然后在此目录下再创建其他的目录. 目录介绍: / root,存放root用户的相关文件 home,存放普通用户的相关文 ...

  3. C# 如何判断系统是32位还是64位

    摘自:http://www.cnblogs.com/tom-tong/archive/2012/03/12/2392173.html public static int GetOSBit() { tr ...

  4. java中对Redis的缓存进行操作

    Redis 是一个NoSQL数据库,也是一个高性能的key-value数据库.一般我们在做Java项目的时候,通常会了加快查询效率,减少和数据库的连接次数,我们都会在代码中加入缓存功能.Redis的高 ...

  5. Sql注入基础一

    凡是带入数据库查询的都有可能是注入.     整个数据包 Sql注入原理? 网站数据传输中,接受变量传递的值未进行过滤,导致直接带入数据库查询执行的操作问题. Sql注入对于渗透的作用? 获取数据(网 ...

  6. Redis作者谈Redis应用场景(转)

    add by zhj : 这是Redis的作者antirez在他的技术博客中写的一篇文章 英文原文:take-advantage-of-redis-adding-it-to-your-stack 译文 ...

  7. 0x06 MySQL 单表查询

    一 单表查询语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二 关键字 ...

  8. MariaDB数据库主从复制实现步骤

    一.MariaDB简介 MariaDB数据库的主从复制方案,是其自带的功能,并且主从复制并不是复制磁盘上的数据库文件,而是通过binlog日志复制到需要同步的从服务器上. MariaDB数据库支持单向 ...

  9. 我的Android进阶之旅------>Android使用9Patch图片作为不失真背景

    做人要大度,海纳百川,做事要圆滑,左右逢源,这让我想到了编程也是如此,代码要扩展,界面也要考虑自适应. 这篇文章是android开发人员的必备知识,是我特别为大家整理和总结的,不求完美,但是有用. 1 ...

  10. samba了解

    1. samba是一个网络服务器,用于Linux和Windows之间共享文件 2,amba服务的启动.停止.重启    service smb start|stop|restart3. 掌握samba ...