JAVA 反射
您查询的关键词是:newinstance object initargs 。如果打开速度慢,可以尝试快速版;如果想保存快照,可以添加到搜藏。
(百度和网页http://bbs.iaiai.com/forum/read.php?tid=2690的作者无关,不对其内容负责。百度快照谨为网络故障时之索引,不代表被搜索网站的即时页面。)
主题 : java的反射机制 使用道具┊ 复制链接 ┊浏览器收藏┊打印
java的反射机制
java的反射机制一
在java里面有一种反射机制reflect,这是其它语言所没有的,可以动态创建对象和方法,还有成员变量等:
一.对象动态创建的方法如下:
我们需要使用的有Class类和Constructor类,还有Method和Field类,具体的使用方法如下:
1.使用Class类的Class.forName(String className)方法得到一个Class对象,
eg: Class aClass=Class.forName(Foo.class.getName());
或者 Class aClass=Class.forName("Foo");
2.得到一个Class对象之后,我们还需要把它转换成我们需要的类型对象,
eg: Foo foo=(Foo)aClass.newInstance();
注意此地方的newInstance()方法只能调用Foo类的公有无参构造函数,如果没有构造函数
则使用父类的公有无参构造函数,如果被重写了,则会创建对象失败。
3.得到了对象之后我们就可以任意摆布她了。
4.如果我们的构造函数里面需要传入参数,怎么办?
这时候我们就需要使用Constructor类了,创建方法如下:
eg: Constructor ctor = aClass.getDeclaredConstructor(Class[] parameterTypes);
如果我们有这样一个类需要动态创建对象:
public class BB {
private int baby = 9;
public BB(int b) {
baby = b;
}
/**
* @return Returns the baby.
*/
public int getBaby() {
return baby;
}
/**
* @param baby
* The baby to set.
*/
public void setBaby(int baby) {
this.baby = baby;
}
}
那么我们如何来做呢?
Integer[] os = new Integer[1];
os[0] = new Integer(6);
Class cls = Class.forName(BB.class.getName());
Constructor ctor = cls.getDeclaredConstructor((new Class[] { int.class }));
BB bbb = (BB) ctor.newInstance(os);
System.out.println(bbb.getBaby());
二.方法的动态创建:
假设上面的BB类需要动态创建getBaby()方法,我们该怎么做?这时候我们需要使用到
Method类了:
1.定义一个方法m:
eg: Class cls = Cla
相关文档:
最近我发现不少初学者,学习java的时候,看了好多java的历史、优点和应用范围。对于这些知识,并不难理解。我也当然同意java是一种优秀的计算机语言。但是对于我们来说要了解的并不是,这些历史等知识。而是掌握java这套技术。要想掌握这套技术实践是非常重要的。那么很多初学者,在第一步实践的时候就遇到了困难,就是配置 ......
class Super { static int taxi = 1729; }
class Sub extends Super {
static { System.out.print("Sub "); }
}
class Test {
public static void main(String[] args) {
System.out.println(Sub.taxi);
}
}
输出:1729
知识要点:
A reference to a class field causes initialization of ......
先写程序,在来解释简单工厂和工厂方法模式。
1、定义一个汽车接口
package com.beckham.factory;
/**
* @author 作者<Beckham>
* Email:gaowm0207@gmail.com
* Jan 26, 2010 2:35:15 PM
* Version:1.0
*/
public interface Car {
public void start() ;
}
接口里面定义一个方法:start( ......
Blog from http://forum.xda-developers.com/showthread.php?t=552846
I've just pushed new Hero Java app into my rogers build and it works fine.
What you basically need is:
Jbed.apk (install with adb install)
libjbedvm.so (adb push /system/lib) - remember to remount as RW.
I strongly suggest to ......