JAVA SE 相关
来源:互联网 发布:樱井知香 下马番号 编辑:程序博客网 时间:2024/05/21 09:07
反射:
反射(Reflection)是Java程序开发语言的特征之一,它允许运行中的Java程序对自身进行检查,或者说是'自审',并能直接操作程序的内部属性.例如,使用它能获得Java类中各成员的名称并显示出来.
Class c = Class.forName("java.lang.String");//返回与带有给定字符串名的类或接口相关联的 Class 对象,中间的参数是一个类的全部路径;
Method ms[] = c.getDeclaredMethods();//返回Method对象的一个数组,这些对象反映此Class对象表示的类或接口声明的所有方法,包括公共、保护、默认、访问和私有方法,但不包括继承的方法.
例子:
import java.awt.Button;
import java.lang.reflect.Method;
import java.util.Hashtable;
public class ReflectionTest {
/** *//**
* @param args
*/
public static void main(String[] args) throws Exception {
ReflectionTest reflection = new ReflectionTest();
reflection.getNameTest();
System.out.println("");
reflection.getMethodTest();
}
/** *//**
* Class的getName()方法测试
* @throws Exception
*/
public void getNameTest() throws Exception {
System.out.println("===========begin getNameTest============");
String name = "amigo";
Class cls = name.getClass();
System.out.println("string class name: " + cls.getName());
Button btn = new Button();
Class btnClass = btn.getClass();
System.out.println("button class name: " + btnClass.getName());
Class superBtnClass = btnClass.getSuperclass();
System.out.println("super button class name: " + superBtnClass.getName());
Class clsTest = Class.forName("java.awt.Button");
System.out.println("clsTest name: " + clsTest.getName());
System.out.println("===========end getNameTest============");
}
/** *//**
* Class的getMethod()方法测试
* @throws Exception
*/
public void getMethodTest() throws Exception {
System.out.println("===========begin getMethodTest==========");
Class cls = Class.forName("ReflectionTest");//返回与带有给定字符串名的类或接口相关联的 Class 对象
Class ptypes[] = new Class[2];
ptypes[0] = Class.forName("java.lang.String");
ptypes[1] = Class.forName("java.util.Hashtable");
Method method = cls.getMethod("testMethod", ptypes);
/*返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法
* 。name 参数是一个 String,用于指定所需方法的简称。
* parameterTypes 参数是按声明顺序标识该方法形式参数类型的 Class 对象的一个数组。
* 如果 parameterTypes 为 null,则按空数组处理。*/
Object args[] = new Object[2];
args[0] = "hello, my dear!";
Hashtable ht = new Hashtable();
ht.put("name", "amigo");
args[1] = ht;
String returnStr = (String) method.invoke(new ReflectionTest(), args);
/* new ReflectionTest()表示要反射的对象 args 表示该对象方法要传递的参数 */
System.out.println("returnStr= " + returnStr);
System.out.println("===========end getMethodTest==========");
}
public String testMethod(String str, Hashtable ht) throws Exception {
String returnStr = "return str";
System.out.println("begin testMethod invoked");
System.out.println("str= " + str);
System.out.println("name= " + (String) ht.get("name"));
System.out.println("end testMethod invoked");
return returnStr;
}
}
instance:
boolean f =c.isInstance(String.class);//用于查看c是不是String类型的,返回一个bool值
try {
Class cls = Class.forName("java.lang.String");
Object arr = Array.newInstance(cls,10);//创建一个具有指定的组件类型和长度的新数组
Array.set(arr,5, "this is a test"); //设置数组的第五个元素是"this is a test"
String s = (String) Array.get(arr, 5); //获取arr的第五个元素
System.out.println(s);
} catch (ClassNotFoundException e) {
e.printStackTrace();
int a[] = new int[]{1,2,3}; 与 int a[] ={1,2,3}; 效果一样
运用反射机制获得一个Class的几种方法:
1 Class c = 类名.class;
2 Class c = Class.forName("java.lang.String");//参数是一个类的全部路径
3 Class c= 对象名.getClass();
然后就可以用这个类c 来获取该类的方法:
Method m = c.getMethod("test", null);//test是那个类的一个方法,null是该类的参数这个参数是空
再接着可以使用m的一些方法:
如:
Object ob= m.invoke(new TestHelloWorld(), null);//执行TestHelloWorld对象的test方法,成功则返回test的执行结果
TestAnnotion ta = m.getAnnotation(TestAnnotion.class);//获取该方法上面的Annotation
java 注解:annotation
@Override:
这个注解的作用是标识某一个方法是否正确覆盖了它的父类的方法.可以用来避免写代码的时候疏忽大意,导致无谓的错误.
@Deprecated:
这个注解的作用是:表示已经不建议使用这个类成员了.
@SuppressWarnings
这个注释的作用是:抑制警告信息
- JAVA SE 相关
- Java SE NIO 网络编程相关
- java se 每天一点点之类的相关知识
- java se
- Java SE
- java se
- java se
- java se
- JAVA SE
- JAVA SE
- 《Java SE》初学Java
- 【Java SE】认识Java
- Spring Framework 4.0相关计划公布---包括对于Java SE 8 和Groovy2的支持
- Java SE 中的技术
- Java SE 简单介绍
- JAVA SE学习笔记
- Java SE 6 Beta
- Java SE -- Static Inner
- iphone 下的 lighttpd 服务程序安装与卸载
- 操作系统还是有研究的必要---最近跟Java耗上了
- SQL Server 中对XML数据的五种基本操作
- 转:惠普前总裁孙振耀指点职业规划。(迄今见过的最好的职业规划的文章,毕生受益)!!!!
- Java中执行Shell(.sh)和windows批量处理(.bat)
- JAVA SE 相关
- 输了吧
- 优化iphone存储空间,以及优化iphone内存。
- 我学我体会(七)
- 实习后的第八天
- this作为对象的默认引用
- uCLinux交叉环境设置错误问题
- 由用户操作手册开始的需求分析设计
- 刘星经典语录