java学习笔记-反射机制

     2022-03-24     761

关键词:

1.   JAVA反射机制的概念

技术分享

 

2. 怎样实例化一个 Class对象   

    Class.forName(包名.类名);

    对象.getClass();

    类.class;

   ============================代码===================================

   

package org.liys.getclass;
class Y{

};

public class GetClass02{



public static void main(String args[]){

Class<?> c1 = null;
Class<?> c2 = null;
Class<?> c3 = null;

//日常开发中常用的一种实例化形式
try{
c1 = Class.forName("org.liys.getclass.Y");
}catch(ClassNotFoundException e){}

c2 = new Y().getClass(); //通过object类中的方法实例化
c3 = Y.class; //通过类.class实例化
System.out.println(c1.getName());
System.out.println(c2.getName());
System.out.println(c3.getName());
}

}

 

3.Class类的使用

 用Class类的newInstance来替代掉一般的new操作。 

 不过需要保证的是,类的申明中,需要有无参构造函数。

  .....

  Class<?> c = null;

  c = Class.forName(包名.类名);

  类的实例化对象 =  (类) c.newInstatnce(); (object 向下转型)

  对象.setName(), 对象.setage();

  ......

  很少会用带有有参构造函数的类来做实例化,但如果有的话,可以用Constructor来解决。  

  使用getConstructors来获取该类所有的构造函数 cons[],并用下标来调用cons[0],cons[1]。

 

  ===========================代码=============================

  

package org.liys.newinstance;
import java.lang.reflect.Constructor;
class Person{

private String name;
private int age;

public Person(String name,int age){
this.name = name;
this.age = age;

}
public void setName(String name){
this.name = name;
}
public void setAge(int age){
this.age = age;
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}

public String toString(){
return "姓名: " + this.name + " 年龄: "+ this.age;
}
}

public class GetPerson{

public static void main(String args[]){

Class<?> c = null;

try{
c = Class.forName("org.liys.newinstance.Person");
} catch(ClassNotFoundException e){
e.printStackTrace();
}
Person p = null;
Constructor<?> cons[] = null;
cons = c.getConstructors();
try{
p = (Person) cons[0].newInstance("李柯",30);
}catch(Exception e){
e.printStackTrace();
}
//p.setName("李柯");
//p.setAge(30);
System.out.println(p);


}


}

  

4.取得类(.class)的结构

   最重要是获取类的对象, Class<?> c1 = Class.forName(报名.类名);

   a. 获取类的父类   从java doc中查询 Class中获取父类的方法

      Class<?> c2 = c1.getSuperclass();     .....c2.getName();

      技术分享

 

   b.获取该类中所有的方法,包括方法的参数,抛出异常,返回值等

   通过Class中的getMethods()方法获得所有的方法包括从父类继承的方法

   或者通过Class中的getDeclaredMethods() 方法,只是获得该类中定义的方法。

   然后再根据Method类去查如何获得函数的参数,返回值,权限范围,抛出异常等

 

  技术分享

代码=========================================================================

package org.lxh.demo15;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class GetMethodDemo {
public static void main(String args[]){

Class<?> c1 = null;
try{
c1 = Class.forName("org.lxh.demo15.Person");  //获取类对象
}catch(ClassNotFoundException e){
e.printStackTrace();
}

Method[] m = c1.getMethods();   //获取类中所有的方法
String mod = null;
String parm = "";
String Except = "";
for(int i=0; i<m.length;i++){      
parm = "";
Except = "";
mod = Modifier.toString(m[i].getModifiers());  //获取方法的权限访问范围

Class<?> rettype = m[i].getReturnType();     //获取方法的返回值

Class<?>[] p = m[i].getParameterTypes();    //获取方法中的参数  
for(int j= 0;j<p.length;j++){

parm = parm + p[j].getName() +" arg["+j+"]";
if (j < (p.length -1)){
parm = parm + ",";
}

}


Class<?>[] Ex = m[i].getExceptionTypes();  //获取方法抛出的异常,一是Class类型
if (Ex.length > 0){
Except = " throws ";
for(int j= 0;j<Ex.length;j++){

Except = Except + Ex[j].getName() ;
if (j < (Ex.length -1)){
Except = Except + ",";
}

}
}

System.out.println(mod + " " +rettype+" "+ m[i].getName() +"("+parm+")" +" "+Except);

}

}

}

 

c.获取实现的接口类

........

Class<?> c[] = c1.getInterfaces() ; // 以数组形式返回实现的全部接口
for(int i=0;i<c.length;i++){
System.out.println("实现的接口名称:" + c[i].getName()) ; // 输出接口名称
}

........

 

d.获取类的属性

 

Field f[] = c1.getDeclaredFields() ; // 取得本类中的属性

Field f[] = c1.getFields() ; // 取得本类中的公共属性包括继承自父类或实现的接口类中的

 .......

Field f[] = c1.getFields() ; // 取得本类中的公共属性
for(int i=0;i<f.length;i++){
Class<?> r = f[i].getType() ; // 得到属性类型     
int mo = f[i].getModifiers() ; // 得到修饰符的数字
String priv = Modifier.toString(mo) ; // 还原修饰符

System.out.print(priv + " ") ;
System.out.print(r.getName() + " ") ; // 得到属性类型
System.out.print(f[i].getName()) ; // 输出属性名称
System.out.println(" ;") ;

}

..........

 

e.获取类的所有构造方法

Constructor<?> con[] = c1.getConstructors() ;

之后与Method相同,查找Constructor 的参数,访问权限范围。

   

 

 

   

 





































































































































java反射机制学习:初始反射机制

  本人小白一枚,想和大家一起分享我学习java的笔记和心得。 反射机制: 指的是可以于运行时加载、探知、使用编译期间完全未知的类。 程序在运行状态中,可以动态加载一个只有名称的类,对于任意一个已加载的类,... 查看详情

java讲课笔记36:初探反射机制

文章目录零、本讲学习目标一、认识反射(一)Java反射机制(二)Java反射的动态性质(三)如何理解Java反射的原理(四)利用反射可实现的功能二、Java反射常用API三、使用反射的基本步骤四、利用反射获取类的信息(一)获... 查看详情

java学习笔记之反射

鲁春利的工作笔记,谁说程序员不能有文艺范?Java程序在运行期间可以动态加载、解析和使用一些在编译阶段并不确定的类型,这一机制被称为反射(Reflection)或自省(Introspection)。Java程序可以加载一个运行时才得知名称的cl... 查看详情

反射笔记(转载)

Java反射机制详解 java 反射 定义 功能 示例概要:Java反射机制详解||目录1反射机制是什么2反射机制能做什么3反射机制的相关API·通过一个对象获得完整的包名和类名·实例化Class类对象·获取一个对象的父类与... 查看详情

java反射学习之一反射机制概述

一、反射机制背景概述  1、反射(reflection)是java被视为动态语言的一个关键性质  2、反射机制指的是程序在运行时能获取任何类的内部所有信息二、反射机制实现功能概述  1、只要给定类的全名,就能通过反射获取类的... 查看详情

java反射机制的学习

本文转载自: http://www.blogjava.net/zh-weir/archive/2011/03/26/347063.html Java反射机制是Java语言被视为准动态语言的关键性质。Java反射机制的核心就是允许在运行时通过Java Reflection APIs来取得已知名字的class类的相关信息,动... 查看详情

java-反射机制学习

反射机制是Java的一个重要性,它使得Java语言具有了动态特性。比如说,可以在代码中动态地获取某个类的信息,生成它的实例、获取其成员变量、调用它的方法。下面通过几个示例来演示反射机制的作用与用法。示例1.获取类... 查看详情

java反射机制笔记

概念:类和对象之间的关系--》类是对象的一种描述,对象是一类实物的一个具体实例子 反射:得到元数据的行为,得到类中所有成员和行为德尔一种机制 Class是对一切类的行为和状态的抽象 Class类:用于描述一切类/接口/枚举/... 查看详情

简谈java反射机制,动态代理

...制,动态代理是基于什么原理?小编整理了一些java进阶学习资料和面试题,需要资料的请加JAVA高阶学习Q群:701136382这是小编创建的java高阶学习交流群,加群一起交流学习深造。群里也有小编整理的2019年最新最全的java高阶学习... 查看详情

简谈java反射机制,动态代理

...制,动态代理是基于什么原理?小编整理了一些java进阶学习资料和面试题,需要资料的请加JAVA高阶学习Q群:701136382这是小编创建的java高阶学习交流群,加群一起交流学习深造。群里也有小编整理的2019年最新最全的java高阶学习... 查看详情

反射学习

一、什么是反射机制?  java反射机制是在“运行状态”中,对任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取信息以及动态调用对象的方法的功能称为java... 查看详情

java中的反射机制

学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:618528494  我们一起学Java!      反射,当时经常听他们说,自己也看过一些资料... 查看详情

12000+字java反射,一起全面了解java反射机制,为学习框架铺路(代码片段)

文章目录Java反射机制理解Class类获取Class类实例类的加载过程类加载器ClassLoader创建运行时类的对象获取运行时类的结构调用运行时类的指定结构动态代理Java反射机制Reflection是被视为动态语言的关键,反射机制允许程序在执... 查看详情

java反射机制

Java反射机制一、序言:  在学习Java的深入知识时,发现好多地方都用到了反射机制,但我却没有深究过,所以想总结并且理解一下Java的反射机制。二、深入讲解:觉得这个博主讲得特别好   查看详情

反射机制

...架技术的基础所在。灵活掌握Java反射机制,对大家以后学习框架技术有很大的帮助。 那么什么是Java的反射呢?       大家都知道,要让Java程序能够运行,那么就得让Java类要被Java虚拟机加载。Java类... 查看详情

java反射基础笔记

...发现自己的基础知识掌握的并不是很牢固,遇到的问题与学习的东西也没有很好的做过记录,导致再遇到时耗费大量时间上网搜索,所以决定串下基础知识并尽量形成记录,方便自己之后遗忘时查询,也方便各位有需求的伙伴翻... 查看详情

javase——反射机制

...名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 在JavaScript中有这样一个函数,eval。 在这个函数内,写上等式,可以直接运算。写上方法,可以完成调用。给这个函数传入的参数是字符串。它... 查看详情

java反射

...架技术的基础所在。灵活掌握Java反射机制,对大家以后学习框架技术有很大的帮助。那么什么是Java的反射呢?       大家都知道,要让Java程序能够运行,那么就得让Java类要被Java虚拟机加载。Java类如果... 查看详情