【Android】反射

摘要:
˃clazz=等级。姓名;//哗啦声。newInstance();//获取所有构造函数[]构造函数=clazz。getConstructors();对于{Log.e;//取出第i个构造函数System.out.print;//----打印构造函数的前缀修饰符System.out.prprint(“”+constructor.getName()+“”);//打印构造函数的名称//----打印构造器的参数。Class[]parameterTypes=constructor.GetParameterType();//构造方法参数集,但数组类型显示为{System.out.print;}System.out。println(“)”);}//修饰符-类名-超类名-接口日志。e//所有字段字段[]字段=clazz。getDeclaredFields()//所有公共字段//字段[]字段=clazz。getFields();如果{Log.e;}否则{Log.e;}}//所有方法方法[]方法=clazz。getDeclaredMethods()//所有公共方法//方法[]方法=clazz。获取方法();对于{Log.e;}}捕获{e.printStackTrace();Log.e;}对于{Log.e;//获取第i个构造函数,请尝试{//获取指定包的Context object Context=createPackageContext;//获取类对象bclazz=class.forName;//所有构造函数[]构造函数=bclazz.getDeclaredConstructors();//所有公共构造函数//构造函数[]构造函数=bclazz.GetConstructor()。
package com.example.myandroidtest;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

import android.R.integer;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;


public class MainActivity extends BaseActivity {
     Class<?> bclazz;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.e("tag", "=MainActivity=onCreate=");
        try{
            //获取指定类的class对象
            Class<?> clazz = Class.forName("android.app.Notification");
            //clazz.newInstance();
            //获得所有构造函数
            Constructor[] constructors=clazz.getConstructors();
            for (Constructor constructor : constructors) {
                Log.e("Constructor反射构造函数:","");
                    //取出第i个构造方法。
                System.out.print(Modifier.toString(constructor.getModifiers()));
                //---- 打印该构造方法的前缀修饰符
                System.out.print(" "+constructor.getName()+"("); //打印该构造方法的名字
                //---- 打印该构造方法的参数。
                Class[] parameterTypes=constructor.getParameterTypes(); //构造方法参数集但是 数组类型显示特殊
                for(int j=0;j<parameterTypes.length;j++) 
                {
                    System.out.print(parameterTypes[j].getName());
                }
                System.out.println(")");
            }
            //修饰符 -类名 -超类名 -接口
            Log.e("Notification反射包名", Modifier.toString(clazz.getModifiers())+" "
              +clazz.getPackage().getName()+" extends "+clazz.getSuperclass()+" implement "+clazz.getInterfaces().getClass().getName());
            //所有字段
            Field[] fields=clazz.getDeclaredFields();
            //所有public字段
            //Field[] fields=clazz.getFields();
            for(Field field : fields)
            {   //数组特殊处理
                if (field.getType().isArray()) {
                    Log.e("Notification反射属性", field.getType().getComponentType()+" "+field.getName());
                } else {
                    Log.e("Notification反射属性", field.getType()+" "+field.getName());
                }
            }
            //所有方法
           Method[] methods =clazz.getDeclaredMethods();
           //所有public方法
           //Method[] methods =clazz.getMethods();

           for(Method method : methods)
           {
               Log.e("Notification method反射name", Modifier.toString(method.getModifiers())+" "+method.getName());
             
           }
           
        }catch (Exception e){
            e.printStackTrace();
            Log.e("Notification反射错误", "Exception");
        }
    
    try{
        //获得指定包的Context对象
        Context c = createPackageContext("com.example.myandroidtest", Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);
        //获得class对象
        bclazz = Class.forName("android.bluetooth.BluetoothManager");
        //所有构造函数
        Constructor[] constructors=bclazz.getDeclaredConstructors();
        //所有public构造函数
        //Constructor[] constructors=bclazz.getConstructors();
        for (Constructor constructor : constructors) {
            Log.e("Constructor反射构造函数:","");
             //取出第i个构造方法。
            System.out.print(Modifier.toString(constructor.getModifiers()));
            //---- 打印该构造方法的前缀修饰符
            System.out.print(" "+constructor.getName()+"("); //打印该构造方法的名字
            //---- 打印该构造方法的参数。
            Class[] parameterTypes=constructor.getParameterTypes(); //构造方法参数集但是 数组类型显示特殊

            for(int j=0;j<parameterTypes.length;j++) 
            {
            System.out.print(parameterTypes[j].getName());
            }
            System.out.println(")");
            //constructor.newInstance(c);//实例化
        }
        //有参数构造函数
        Constructor con = bclazz.getConstructor(Context.class);
        //创建它的一个对象
        //Object maObject = bclazz.newInstance();//构造函数无参数实例化     
        Log.e("calzz 是否为Null", ""+(bclazz==null));
        Log.e("BluetoothManager反射包名", Modifier.toString(bclazz.getModifiers())+" "
                +bclazz.getPackage().getName()+" extends "+bclazz.getSuperclass()+" implement "+bclazz.getInterfaces().getClass().getName());
        //所有字段
        Field[] fields=bclazz.getDeclaredFields();
        for(Field field : fields)
        {
            if (field.getType().isArray()) {
                Log.e("BluetoothManager反射属性", field.getType().getComponentType()+" "+field.getName());
            } else {
                Log.e("BluetoothManager反射属性", field.getType()+" "+field.getName());
            }
            
        }
        
       //获得所有方法
       Method[] methods =bclazz.getDeclaredMethods();
       for(Method method : methods)
       {
           Log.e("BluetoothManager method反射name", ""+method.getName());
           if (method.getName().equals("getAdapter")) {
               //执行方法
               method.invoke(con.newInstance(c));
        }
       }   
    }catch (Exception e){
        e.printStackTrace();
        Log.e("calzz 是否为Null", ""+(bclazz==null));
        Log.e("BluetoothManager反射错误", "Exception");
    }
    }


  
}

免责声明:文章转载自《【Android】反射》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Debian下自动备份MySQL数据库并上传到远程FTP服务器且删除指定日期前的备份Shell脚本Java中path,-classpath,-Djava.library.path的功能和区别下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

java单例类

public class SingleTonDemo { public static void main(String[] args) { SingleTon.getSingle(); SingleTon.getSingle(); } } class SingleTon{//创建单例类/由类的本身创建对象 //private stati...

Android(java)学习笔记47:通过反射获得构造方法并且使用

1. 获取字节码文件对象:             Class c = Class.forName("cn.itcast_01.Person"); 2. 获取构造方法                  public Constructor[] getConstructors():所有公共(public)构造方法                  publi...

Java枚举类型的理解及在后台响应中的使用

在前后台分离开发过程中,统一响应的格式可以使用枚举类型进行规范开发,对于不同的错误/异常类型可以响应不同的状态码和响应信息。 1,枚举类型的简单理解:枚举类型就是包含了已经创建好对象的final类,这个final类的开始是一些枚举变量,枚举变量可以有多个值,这些参数被赋给了枚举对象, 枚举对象可以通过枚举类调用枚举变量获取。 总结以下几点: 1)枚举类型不...

StringBuilder 以及 StringBuffer默认大小与扩容

默认值初始化: 1.  首先明确 StringBuffer类与 StringBuilder类均继承了抽象类 AbstractStringBuilder类 无参构造方法 2. 源码中StringBuffer类和StringBuilder类初始化均调用父类的构造方法: 父类初始化: 子类默认传入值16 给父类初始化字符数组   有参构造方法:   扩容...

【Java面向对象 05】

一、构造方法 1、方法名与类名称相同,2、没有返回值,不需要void关键字2、调用类里面的属性必须先进行对象的引用,即:new 类名(),引用:引用名.属性以下举例:Test01类对Students类进行初始化调用,Test02类对Students类进行属性的修改,即修改成员变量 public class Students { //学号 i...

mongodb之增删改查

目录 概述 方法 构造方法 getInstance方法 initMongo方法 getCollection(MongoColl mongoColl)方法 向mongodb添加数据 更新mongodb中的数据 更新操作符 $set $inc $mul $rename 删除mongodb中的数据 查找数据 概述 该类是emessage...