Java基础学习笔记【11】Reflect反射(1)

  1. InputStreamReader将字节流转换为字符流
  2. 在java1.7中新增了Files,Paths对流,路径操作的工具类,内部就是输入输出流等的操作
  3. Syso加只能提示可以快速代码System.out.println();
  4. 反射创建Class的三种方式:
    (1)使用 class的属性得到Class对象


    1

    2

    Class<String> c = String.class;//String.class就表示JVM里的一份表示String类的字节码

    Class<String> c2 = String.class;

    (2)使用Class.forName(类的全限定名称)         static Class<?> forName(String className)


    1

    2

    Class<String> clazz = (Class<String>) Class.forName("String");//ERROR

    Class<String> clazz = (Class<String>) Class.forName("java.lang.String");

    (3) Object类: Class<?> getClass() 返回此 Object 的运行时类。


    1

    2

    3

    4

    List<String> list = new ArrayList<String>();

    Class<?> listClz = list.getClass();//得到的是listClz的真正类型类

    System.out.println(listClz);//java.util.ArrayList

    boolean b = listClz.isInstance(list);//等价于 list instanceof ArrayList

  5. Class的一些常用方法:


    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    Class<IM> clz = IM.class;

    clz.getPackage()//获取clz的包

    clz.getName()//类的全限定名称

    clz.getSuperclass()//获取直接父类

    Class<?>[] ins = clz.getInterfaces(); //获取所有的接口,接口可能多个所以数组接收,要操作就循环遍历

    Class<?>[] ins= clz.getClasses();//获得类public修饰的的内部类/接口

    String getSimpleName() //返回源代码中给出的底层类的简称。

    Class<? super T> getSuperclass() //返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的超类的 Class。

    Class<?>[] getInterfaces() //确定此对象所表示的类或接口实现的接口。

    int getModifiers() //返回此类或接口以整数编码的 Java 语言修饰符。

    Modifier:public static String toString(int mod) //返回描述指定修饰符中的访问修饰符标志的字符串

    <U> Class<? extends U> asSubclass(Class<U> clazz)

    //强制转换该 Class 对象,以表示指定的 class 对象所表示的类的一个子类。

    boolean isInstance(Object obj) //判定指定的 Object 是否与此 Class 所表示的对象赋值兼容。对象  instanceof  类

    int mod = clz.getModifiers(); //获取类的访问修饰符,获取到的为数字类型,要转成对应的类型就要使用相应的方法System.out.println(mod);//1表示public

    System.out.println(Modifier.toString(mod));

  6. 反射构造器:


    1

    2

    3

    4

    5

    6

    7

    Class<Employee> clz = Employee.class;//现获取class对象

    Constructor<Employee>[] cs = (Constructor<Employee>[]) clz.getConstructors();

    //类的所有公共构造方法

    Constructor<Employee> con=clz.getConstructor(String.class,Integer.class);

    //得到public指定的构造器,有几个参数就使用几个参数类型的字节码

    Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) 访问不受访问权限控制

    clz.getDeclaredConstructors()//获取所有的构造器集合

  7. 基本类型(boolean、byte、char、short、int、long、float 和 double)使用 类型.Class 获取class
    包装类型(Integer等)都使用:包装类都有一个TYPE的常量 ;用于表示其基本数据类型的字节码
    数组的Class对象,所有具有相同元素类型和维数的数组都共享该 Class 对象   Class<String[]> arr = String[].class; 
    什么数组是使用 类型[].Class
  8. 反射的方法:


    1

    2

    3

    4

    5

    Class<MethodDemo> clz = MethodDemo.class;

    Method[] ms = clz.getMethods();//拿到子类及其父类里所有的public修饰的方法

    Method m = clz.getMethod("main", String[].class);

    //拿到子类及其父类里所有的public修饰的指定的方法,后面的参数可可变参数用(类型.Class)做参数

    clz.getDeclaredMethods();//获取自己类里的所有方法或指定的一个方法,和访问权限无关

  9. 反射字段:


    1

    2

    3

    4

    Field[] fs = clz.getFields();//获得所有的public 字段,包括继承

    Field f = clz.getField("c");//指定的一个 public的,包阔继承

    Field[] fs = clz.getDeclaredFields();//得到所有的字段,只能获取当期类里面的,和访问权限无关

    f = clz.getDeclaredField("hahha");

  10. Declared一般在反射的使用中带有该单词名称的方法都是私有的或者受保护的类型
时间: 2024-08-05 15:07:37

Java基础学习笔记【11】Reflect反射(1)的相关文章

Java基础学习笔记 -- 11(方法、重载、递归)

1. 方法 1)方法作用: 封装一段特定的逻辑功能 ,使程序结构清晰.便于代码的重复使用 2)方法的定义: 方法的主要三要素:方法名.参数列表.返回值. 修饰词  返回值类型  方法名( 参数列表 ) { 方法体 } 说明: ① 返回值类型: 方法需返回结果时使用,无返回值为void,有返回值时设计为特定数据类型即可 . ② 参数列表:参数的设计,使方法处理更灵活,参数根据需求是可有可无的. 3)方法的调用: 根据有无返回值或者是有无参数,以及调用情况,有以下的调用方法 ① 方法名(); ② 方

java基础学习笔记day01

java基础学习笔记day01 1.软件开发: 软件:按照特定顺序组织的计算机数据和指令的集合 开发:软件的制作过程 软件开发:借助开发工具和计算机语言制作软件 2.java概述: java之父:詹姆斯·高斯林 JDK:java开发环境 jre:java运行环境 JVM:java虚拟机 java跨平台是因为,JVM能在不同的平台运行,JVM是跨平台的 JavaSE:标准版 JavaME:手机端,物联网 JavaEE:企业版,互联网项目 3.java语言特点: 简单性 解释性 面向对象 高性能 分

JAVA基础学习笔记(2)

看了几天的视频了,都没时间来写下学习笔记,今天来写下第二次的学习笔记,前几天看的给忘记了,就写最新看到的吧 主要内容:1.类的变量与函数(方法) 2.对象的存储方式 3.新建一个对象及对象的赋值与调用 4.空对象 5.匿名对象 1.类的变量与函数(方法) class Dog      //类名 { String name;  //变量的声明 int age; String color; void bark()   //方法的定义(返回值为空,不带参数) { System.out.println(

JAVA基础学习笔记(1)

今天第一天开始学JAVA,时间:2014年6月17日 学习内容:1.java环境的架设 2.JAVA基本数据类型 1.JAVA环境的架设       1.要先去下载JDK,下载地址 2.安装完成后,设置环境变量 1.1环境变量的设置        1.右键-我的电脑-属性-高级-环境变量-系统变量,找到PATH,在里面加入jdk里bin目录的地址 如:c:\java\bin; 2.新建-名为classpath,值为. 1.2测试JAVA是否配置正确        1.在cmd里面输入javac.

Java基础学习笔记

File 的高级获取功能 String[] list() 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录 示例 import java.io.File; class FileDemo9 { public static void  main(String[] args) { //获取E:下所有目录或者文件名称 File file=new  File("E:\\");//1.构建文件对象 String[]  fileNames=file.list();//2.获取E

黑马程序员--java基础学习笔记5

黑马程序员--java基础学习笔记6 一.笔记内容概述: 数组-第二种定义格式.数组-常见操作-遍历-最值-选择排序-冒泡排序-排序位置置换代码提取.数组-排序的性能问题.数组-常见功能-查找-折半查找.进制转换-查表法-整合. 二.常用内容介绍: 1.数组初始化的三种方式: int[] arr = new int[3]; int[] arr = new int[]{1,2,3}; int[] arr = {1,2,3}; 2.查表法: 如果数据中出现了对应关系,而且对应关系的一方是有序的数字编

[java基础学习笔记]Java8SE开发环境搭建、第一个Java Hello World、Java程序的编译与执行

本文作者:sushengmiyan 本文地址:http://blog.csdn.net/sushengmiyan/article/details/25745945 主要内容: ---------------------------------------------------| 1.JDK的下载与安装                            | 2.编写第一个java程序HelloWorld     | 3.编译执行HelloWorld                      

Java基础学习笔记(一)

程序员,程序猿,程序媛,码农 ——————————————————————————————————————————————————————— ——Java的应用领域    J2SE    主要用来开发桌面应用软件.    J2ME   嵌入式开发,例如手机里的软件,掌上电脑软件等等.     J2EE    属于网络编程,例如JSP等等,做网站用. ——参考资料    张孝祥    <Java就业培训>     林信良    <Java学习笔记>    机械工业    <Ja

Java基础学习笔记二十八 管家婆综合项目

本项目为JAVA基础综合项目,主要包括: 熟练View层.Service层.Dao层之间的方法相互调用操作.熟练dbutils操作数据库表完成增删改查. 项目功能分析 查询账务 多条件组合查询账务 添加账务 编辑账务 删除账务 项目环境搭建 技术选型和jar包介绍 每个项目都要使用一些已经成熟的技术,它们通常是由一些专业组织或团队所提供的开源免费技术.在今后的学习过程中,我们会逐渐对这些专业组织有所了解.本项目中使用的技术如下: apache的commons组件: commons-dbutils

[原创]java WEB学习笔记11:HttpServlet

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------