Android中Java反射技术的使用示例

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import android.os.Bundle;
import android.app.Activity;
/**
 * Demo描述:
 * Android中Java反射技术的使用示例
 * 在Java中描述字节码文件(xxx.class)的类叫Class
 * 反射的过程可视为剖析Class的过程
 */
public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        init();
    }
    private void init(){
        try {
            /**
             * 1 反射出无参的构造方法并得到对象
             * 注意:
             *      1 在Class.forName()中应该传入含有包名的类全名
             *      2 newInstance()方法的本质是调用类的无参Public构造方法
             */
            String className1="cn.testreflect.Worker";
            Class clazz1=Class.forName(className1);
            Object object1=clazz1.newInstance();
            System.out.println("object1.toString()="+object1.toString());  

            /**
             * 2 反射出带参数的构造方法并得到对象
             */
            String className2="cn.testreflect.Worker";
            Class clazz2=Class.forName(className2);
            Constructor constructor1=clazz2.getConstructor(int.class,String.class);
            Object object2=constructor1.newInstance(18,"小明");
            System.out.println("object2.toString()="+object2.toString());  

            /**
             * 3 获取类的私有字段
             * 注意:
             *      获取共有字段应调用clazz3.getField(name)方法
             */
            String className3="cn.testreflect.Worker";
            Class clazz3=Class.forName(className3);
            Field ageField1=clazz3.getDeclaredField("age");
            System.out.println("ageField1="+ageField1);  

            /**
             * 4 获取和更改某个对象的私有字段
             *   即模拟get()和set()方法
             */
            String className4="cn.testreflect.Worker";
            Class clazz4=Class.forName(className4);
            Field ageField2=clazz4.getDeclaredField("age");
            Object object4=constructor1.newInstance(18,"小明");
            //取消访问私有字段的合法性检查
            ageField2.setAccessible(true);
            //获取对象的私有字段
            Object ageObject4=ageField2.get(object4);
            System.out.println("ageObject4="+ageObject4);  

            //再更改对象的私有字段的值
            ageField2.set(object4, 9527);
            //重新获得
            Object ageObject5=ageField2.get(object4);
            System.out.println("ageObject5="+ageObject5);  

            /**
             * 5 调用对象的带参数的方法
             */
            String className5="cn.testreflect.Worker";
            Class clazz5=Class.forName(className5);
            Method method=clazz5.getMethod("printMessage", String.class,int.class,int.class);
            Object object5=clazz5.newInstance();
            method.invoke(object5, "周星星",50,9527);  

        } catch (Exception e) {
            System.out.println(e.toString());
        }  

    }
public class Worker {
        private int age;
        private String name;
        public Worker() {
            super();
            System.out.println("---> public Worker(){ }");
        }
        public Worker(int age, String name) {
            super();
            this.age = age;
            this.name = name;
            System.out.println("---> public Worker(int age, String name){ }");
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        @Override
        public String toString() {
            return "Worker [age=" + age + ", name=" + name + "]";
        }  

        public void printMessage(String name,int age,int salary){
            System.out.println("name="+name+",age="+age+",salary="+salary);
        }  

    }

main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >  

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Android中Java反射技术的使用"
            android:layout_centerInParent="true"/>  

    </RelativeLayout>
时间: 2024-12-27 23:50:57

Android中Java反射技术的使用示例的相关文章

Android中直播视频技术探究之---基础核心类ByteBuffer解析

一.前言 前一篇文章我们介绍了Android中直播视频技术的基础大纲知识,这里就开始一一讲解各个知识点,首先主要来看一下视频直播中的一个重要的基础核心类:ByteBuffer,这个类看上去都知道了,是字节缓冲区处理字节的,这个类的功能非常强大,也在各个场景都有用到,比如网络数据底层处理,特别是结合网络通道信息处理的时候,还有就是后面要说到的OpenGL技术也要用到,当然在视频处理中也是很重要的,因为要处理视频流信息,比如在使用MediaCodec进行底层的视频流编码的时候,处理的就是字节,我们如

Java反射技术学习总结

-------<a href="http://www.itheima.com/"">android培训</a>.<a href="http://www.itheima.com/" ">java培训</a>期待与您交流!---------- Java反射技术就是将java中的类的各个组成部分反射出来变为java中相应的数据类型获得. Java同样将类中的各个组成部分进行封装,变为一个个Java类. C

Android中通过反射来设置显示时间

这个Toast的显示在Android中的用途还是很大的,同时我们也知道toast显示的时间是不可控的,我们只能修改他的显示样式和显示的位置,虽然他提供了一个显示时间的设置方法,但是那是没有效果的(后面会说到),他有两个静态的常量Toast.SHORT和Toast.LONG,这个在后面我会在源码中看到这个两个时间其实是2.5s和3s.那么我们如果真想控制toast的显示时间该怎么办呢?真的是无计可施了吗?天无绝人之路,而且Linux之父曾经说过:遇到问题就去看那个操蛋的源代码吧!!下面就从源代码开

Android中app卡顿原因分析示例

在知乎回答了一个“为什么微博的app在iPhone比Android上流畅”的问题.后面部分是一个典型的动画卡顿的性能分析过程,因此帖在这里.有编程问题可以在这里交流.知乎链接. ========================================================= 我来说下我所知道的事情.我不知道iOS为什么流畅,但我知道一些Android为什么不流畅的原因. 首先,就题主所说的问题,我用iPad和小米Pad对比了一下微博滑动滚屏这件事情(2014年8月10日目前微博

小怪兽 Java反射技术 等你来打

Java反射技术,是java的难点,也是程序员进化过程中的必打小怪兽,这里就根据java api好好研究一下java的反射技术. Class Fields Methods 请先回忆一下[java类的定义]. 一.反射是什么 反射是什么?百度百科这样定义:JAVA反射机制是在运行状态下,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取对象信息以及动态调用对象方法的功能称为java语言的反射机制. 可以这样理解,大家小时候有木有玩过平

java 反射技术

什么是反射?反射就是将字节码中的各种成分映射到相应的java类中来,java反射技术自JDK1.1以来就出现了,目前大多数流行的框架都采用了这种技术,可见其重要性,这篇文章将详细介绍我对java反射技术的一些研究. 代表字节码对象的Class java中所有的类都有自己特有的一份字节码,当程序调用该类时,JVM便会将这份字节码装载到内存中来.在java中主要有三种方法来得到相应的字节码对象. 通过类的实例的getClass()方法获取,如 Class clazz=new Date().getCl

【软件工程】JAVA反射技术

JAVA反射技术 Java 反射技术应用广泛,它能够配置:类的全限定名.方法和参数,完成对象的初始化,甚至是反射某些方法.这样就可以大大增强 Java 的可配置’性, pring IoC 的基本原理也是如此,当然 Spring IoC 的代码要复杂得多. Java 的反射内容繁多,包括对象构建.反射方法.注解.参数.接口等. 通过反射构建对象 Java 中允许通过反射配置信息构建对象,比如 ReflectServicelmpl.java 然后通过反射的方法去构建它 这里的代码就是生成一个对象,然

java反射技术实例

java反射技术实例?1. [代码][Java]代码     package com.gufengxiachen.java.reflectiontest; public class Person {private String name;private int age;private static int total;public Person(){super();total++;}public Person(String name,int age){super();this.name=name

Android中直播视频技术探究之---基础知识大纲介绍

一.前言 最近各种视频直播app到处都是,各种霸屏,当然我们也是需要体验的,关于视频直播的软件这里就不介绍了,在不是技术的人来看,直播是一种潮流,是一种娱乐方式,但是作为一个高技术的,我们除了看看,更重要的是学习技术,其实Android中的视频技术没什么说的,因为网上的资料很多,但是之前的视频技术大部分都出现在了视频播放,就是主流的视频播放器,那个最重要的一个技术就是视频的编解码,这个也会在后续文章中详细介绍视频的处理技术.但是现在直播的技术是在之前的视频技术上又有了一个要求就是视频录制,现在录