栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java 反射:Class类,动态加载类获取方法和成员变量构造信息,方法反射的基本操作,集合泛型的本质(1)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 反射:Class类,动态加载类获取方法和成员变量构造信息,方法反射的基本操作,集合泛型的本质(1)

  System.out.println(c2.getSimpleName());//不包含包名的类的名称
  System.out.println(c5.getName());
}

}

ClassDemo3.java


public class ClassDemo3 {

public static void main(String[] args) {
  String s = "hello";
  ClassUtil.printClassMethodMessage(s);
  Integer n1 = 1;
  ClassUtil.printClassMethodMessage(n1);
}

}

ClassDemo4.java


public class ClassDemo4 {

 
 
public static void main(String[] args) {
  // TODO Auto-generated method stub
  ClassUtil.printFieldMessage("hello");
  System.out.println("=============");
  ClassUtil.printFieldMessage(new Integer(1));
}

}

ClassDemo5.java


public class ClassDemo5 {

 
 
public static void main(String[] args) {
  // TODO Auto-generated method stub
  ClassUtil.printConMessage("hello");
  ClassUtil.printConMessage(new Integer(1));
}

}

ClassUtil.java


import java.lang.reflect.Constructor;

import java.lang.reflect.Field;

import java.lang.reflect.Method;

public class ClassUtil {

 
 
public static void printClassMethodMessage(Object obj){
  //要获取类的信息  首先要获取类的类类型
  Class c = obj.getClass();//传递的是哪个子类的对象  c就是该子类的类类型
  //获取类的名称
  System.out.println("类的名称是:"+c.getName());
  
  Method[] ms = c.getMethods();//c.getDeclaredMethods()
  for(int i = 0; i < ms.length;i++){
  	//得到方法的返回值类型的类类型
  	Class returnType = ms[i].getReturnType();
  	System.out.print(returnType.getName()+" ");
  	//得到方法的名称
  	System.out.print(ms[i].getName()+"(");
  	//获取参数类型--->得到的是参数列表的类型的类类型
  	Class[] paramTypes = ms[i].getParameterTypes();
  	for (Class class1 : paramTypes) {
  		System.out.print(class1.getName()+",");
  	}
  	System.out.println(")");
  }
}
 
 
public static void printFieldMessage(Object obj) {
  Class c = obj.getClass();
  
  //Field[] fs = c.getFields();
  Field[] fs = c.getDeclaredFields();
  for (Field field : fs) {
  	//得到成员变量的类型的类类型
  	Class fieldType = field.getType();
  	String typeName = fieldType.getName();
  	//得到成员变量的名称
  	String fieldName = field.getName();
  	System.out.println(typeName+" "+fieldName);
  }
}
 
 
public static void printConMessage(Object obj){
  Class c = obj.getClass();
  
  //Constructor[] cs = c.getConstructors();
  Constructor[] cs = c.getDeclaredConstructors();
  for (Constructor constructor : cs) {
  	System.out.print(constructor.getName()+"(");
  	//获取构造函数的参数列表--->得到的是参数列表的类类型
  	Class[] paramTypes = constructor.getParameterTypes();
  	for (Class class1 : paramTypes) {
  		System.out.print(class1.getName()+",");
  	}
  	System.out.println(")");
  }
}

}

MethodDemo:

===========

MethodDemo1.java


import java.lang.reflect.Method;

public class MethodDemo1 {

public static void main(String[] args) {
 //要获取print(int ,int )方法  1.要获取一个方法就是获取类的信息,获取类的信息首先要获取类的类类型
  A a1 = new A();
  Class c = a1.getClass();
  
  try {
  	//Method m =  c.getMethod("print", new Class[]{int.class,int.class});
  	Method m = c.getMethod("print", int.class,int.class);
  	//方法的反射操作  
  	//a1.print(10, 20);方法的反射操作是用m对象来进行方法调用 和a1.print调用的效果完全相同
      //方法如果没有返回值返回null,有返回值返回具体的返回值
  	//Object o = m.invoke(a1,new Object[]{10,20});
  	Object o = m.invoke(a1, 10,20);
  	System.out.println("==================");
  	//获取方法print(String,String)
         Method m1 = c.getMethod("print",String.class,String.class);
         //用方法进行反射操作
         //a1.print("hello", "WORLD");
         o = m1.invoke(a1, "hello","WORLD");
         System.out.println("===================");
       //  Method m2 = c.getMethod("print", new Class[]{});
            Method m2 = c.getMethod("print");
           // m2.invoke(a1, new Object[]{});
            m2.invoke(a1);
  } catch (Exception e) {
  	// TODO Auto-generated catch block
  	e.printStackTrace();
  } 
}

}

class A{

public void print(){
  System.out.println("helloworld");
}
public void print(int a,int b){
  System.out.println(a+b);
}
public void print(String a,String b){
  System.out.println(a.toUpperCase()+","+b.toLowerCase());
}

}

MethodDemo2.java


import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.lang.reflect.Method;

public class MethodDemo2 {

public static void main(String[] args) {
  UserService us = new UserService();
  
  try {
  	BufferedReader br = new BufferedReader(
  			new InputStreamReader(System.in));
  	System.out.println("请输入命令:");
  	String action = br.readLine();
  	
  	
  	Class c = us.getClass();
  	Method m = c.getMethod(action);
  	m.invoke(us);
  } catch (Exception e) {
  	e.printStackTrace();
  }
}

}

MethodDemo3.java


结尾

最后,针对上面谈的内容,给大家推荐一个Android资料,应该对大家有用。

首先是一个知识清单:(对于现在的Android及移动互联网来说,我们需要掌握的技术)

泛型原理丶反射原理丶Java虚拟机原理丶线程池原理丶
注解原理丶注解原理丶序列化
Activity知识体系(Activity的生命周期丶Activity的任务栈丶Activity的启动模式丶View源码丶Fragment内核相关丶service原理等)
代码框架结构优化(数据结构丶排序算法丶设计模式)
APP性能优化(用户体验优化丶适配丶代码调优)
热修复丶热升级丶Hook技术丶IOC架构设计
NDK(c编程丶C++丶JNI丶LINUX)
如何提高开发效率?
MVC丶MVP丶MVVM
微信小程序
Hybrid
Flutter

接下来是资料清单:(敲黑板!!!)

领取通道在这里给你们摆上了~

点击我的GitHub免费获取

1.数据结构和算法

2.设计模式

3.全套体系化高级架构视频;七大主流技术模块,视频+源码+笔记

4.面试专题资料包(怎么能少了一份全面的面试题总结呢~)

不论遇到什么困难,都不应该成为我们放弃的理由!共勉~

如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。


er/Android%E5%BC%80%E5%8F%91%E4%B8%8D%E4%BC%9A%E8%BF%99%E4%BA%9B%EF%BC%9F%E5%A6%82%E4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)**


1.数据结构和算法

[外链图片转存中…(img-dCm2Itc2-1643958688248)]

2.设计模式

[外链图片转存中…(img-C4E8HPTJ-1643958688248)]

3.全套体系化高级架构视频;七大主流技术模块,视频+源码+笔记

[外链图片转存中…(img-AgapGyxW-1643958688249)]

4.面试专题资料包(怎么能少了一份全面的面试题总结呢~)

[外链图片转存中…(img-ckYvo3WY-1643958688249)]

不论遇到什么困难,都不应该成为我们放弃的理由!共勉~

如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。

[外链图片转存中…(img-9J3TIrPW-1643958688250)]

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/727149.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号