- 浏览: 117257 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
gtd03:
[b][/b][i][/i][u][/u]引用[*][img] ...
js 监听监键盘动作 -
tomfish88:
你用5条数据太少了,你用50000条你就看出差距了
多线程效率问题
package org.lxh.demo15.invokedemo ;
import java.lang.reflect.Array ;
public class ChangeArrayDemo{
public static void main(String args[]) throws Exception{
int temp[] = {1,2,3} ;// 声明一整型数组
int newTemp[] = (int []) arrayInc(temp,5) ; // 重新开辟空间5
print(newTemp) ;
System.out.println("\n-------------------------") ;
String t[] = {"lxh","mldn","mldnjava"} ;
String nt[] = (String [])arrayInc(t,8) ;
print(nt) ;
}
public static Object arrayInc(Object obj,int len){
Class<?> c = obj.getClass() ;
Class<?> arr = c.getComponentType() ; // 得到数组的
Object newO = Array.newInstance(arr,len) ; // 开辟新的大小
int co = Array.getLength(obj) ;
System.arraycopy(obj,0,newO,0,co) ; // 拷贝内容
return newO ;
}
public static void print(Object obj){ // 数组输出
Class<?> c = obj.getClass() ;
if(!c.isArray()){ // 判断是否是数组
return;
}
Class<?> arr = c.getComponentType() ;
System.out.println(arr.getName()+"数组的长度是:" + Array.getLength(obj)) ; // 输出数组信息
for(int i=0;i<Array.getLength(obj);i++){
System.out.print(Array.get(obj,i) + "、") ; // 通过Array输出
}
}
};
package org.lxh.demo15.invokedemo ;
import java.lang.reflect.Array ;
public class ClassArrayDemo{
public static void main(String args[]) throws Exception{
int temp[] = {1,2,3} ;// 声明一整型数组
Class<?> c = temp.getClass().getComponentType() ; // 取得数组的Class对象
System.out.println("类型:" + c.getName()) ; // 取得数组类型名称
System.out.println("长度:" + Array.getLength(temp)) ;
System.out.println("第一个内容:" + Array.get(temp,0)) ;
Array.set(temp,0,6) ;
System.out.println("第一个内容:" + Array.get(temp,0)) ;
}
};
package org.lxh.demo15.invokedemo ;
import java.lang.reflect.Field ;
public class InvokeFieldDemo{
public static void main(String args[]) throws Exception{
Class<?> c1 = null ;
Object obj = null ;
c1 = Class.forName("org.lxh.demo15.Person") ; // 实例化Class对象
obj = c1.newInstance() ;
Field nameField = null ;
Field ageField = null ;
nameField = c1.getDeclaredField("name") ; // 取得name属性
ageField = c1.getDeclaredField("age") ; // 取得name属性
nameField.setAccessible(true) ; // 此属性对外部可见
ageField.setAccessible(true) ; // 此属性对外部可见
nameField.set(obj,"李兴华") ; // 设置name属性内容
ageField.set(obj,30) ; // 设置age属性内容
System.out.println("姓名:" + nameField.get(obj)) ;
System.out.println("年龄:" + ageField.get(obj)) ;
}
};
package org.lxh.demo15.invokedemo ;
import java.lang.reflect.Method ;
public class InvokeSayChinaDemo{
public static void main(String args[]){
Class<?> c1 = null ;
try{
c1 = Class.forName("org.lxh.demo15.Person") ; // 实例化Class对象
}catch(Exception e){}
try{
Method met = c1.getMethod("sayChina") ; // 找到sayChina()方法
met.invoke(c1.newInstance()) ; // 调用方法
}catch(Exception e){
e.printStackTrace() ;
}
}
};
package org.lxh.demo15.invokedemo ;
import java.lang.reflect.Method ;
public class InvokeSayHelloDemo{
public static void main(String args[]){
Class<?> c1 = null ;
try{
c1 = Class.forName("org.lxh.demo15.Person") ; // 实例化Class对象
}catch(Exception e){}
try{
Method met = c1.getMethod("sayHello",String.class,int.class) ; // 找到sayChina()方法
String rv = null ;
rv = (String)met.invoke(c1.newInstance(),"李兴华",30) ; // 调用方法
System.out.println(rv) ;
}catch(Exception e){
e.printStackTrace() ;
}
}
};
package org.lxh.demo15.invokedemo ;
import java.lang.reflect.Method ;
public class InvokeSetGetDemo{
public static void main(String args[]){
Class<?> c1 = null ;
Object obj = null ;
try{
c1 = Class.forName("org.lxh.demo15.Person") ; // 实例化Class对象
}catch(Exception e){}
try{
obj = c1.newInstance() ;
}catch(Exception e){}
setter(obj,"name","李兴华",String.class) ; // 调用setter方法
setter(obj,"age",30,int.class) ; // 调用setter方法
System.out.print("姓名:") ;
getter(obj,"name") ;
System.out.print("年龄:") ;
getter(obj,"age");
}
/**
Object obj:要操作的对象
String att:要操作的属性
Object value:要设置的属性内容
Class<?> type:要设置的属性类型
*/
public static void setter(Object obj,String att,Object value,Class<?> type){
try{
Method met = obj.getClass().getMethod("set"+initStr(att),type) ; // 得到setter方法
met.invoke(obj,value) ; // 设置setter的内容
}catch(Exception e){
e.printStackTrace() ;
}
}
public static void getter(Object obj,String att){
try{
Method met = obj.getClass().getMethod("get"+initStr(att)) ; // 得到setter方法
System.out.println(met.invoke(obj)) ; // 调用getter取得内容
}catch(Exception e){
e.printStackTrace() ;
}
}
public static String initStr(String old){ // 将单词的首字母大写
String str = old.substring(0,1).toUpperCase() + old.substring(1) ;
return str ;
}
};
package org.lxh.demo15 ;
interface China{ // 定义China接口
public static final String NATIONAL = "China" ; // 定义全局常量
public static final String AUTHOR = "李兴华" ; // 定义全局常量
public void sayChina() ; // 无参的,没有返回值的方法
public String sayHello(String name,int age) ; // 定义有两个参数的方法,并返回内容
}
public class Person implements China{
private String name ;
private int age ;
public Person(){ // 无参构造
}
public Person(String name){
this.name = name ; // 设置name属性
}
public Person(String name,int age){
this(name) ;
this.age = age ;
}
public void sayChina(){ // 覆写方法
System.out.println("作者:" + AUTHOR + ",国籍:" + NATIONAL) ;
}
public String sayHello(String name,int age){
return name + ",你好!我今年:" + age + "岁了!" ;
}
public void setName(String name){
this.name = name ;
}
public void setAge(int age){
this.age = age ;
}
public String getName(){
return this.name ;
}
public int getAge(){
return this.age ;
}
};
- 031504_【第15章:JAVA反射机制】_JAVA反射机制的深入研究笔记.PDF (263.2 KB)
- 下载次数: 3
发表评论
-
ServerSocket 多线程服务器开发
2011-04-24 16:24 1674package socket; import j ... -
InetAddress 获得IP
2011-04-24 15:43 1493import java.net.InetAddress ... -
接口的作用 宠物商店
2011-04-24 15:14 1167package PetShopDemo; inte ... -
Arrays
2011-04-24 14:15 769package ArraysTest; impor ... -
Cloneable 对象克隆
2011-04-24 14:08 1057class Person implements Clon ... -
System
2011-04-24 13:59 798package SystemTest; publi ... -
Collections
2011-04-24 13:40 1364import java.util.Collections ... -
TreeSet对象排序的方法
2011-04-24 13:09 1475package set; import java. ... -
HashMap 的两种遍历方式
2011-04-24 12:35 758public static void main(Str ... -
ENUMERATION接口
2011-04-23 14:51 787很少用 import java.util.Vec ... -
ListIterator
2011-04-23 14:44 9701 只能有List实例化 2 必须先有头到尾,才能由尾到头 ... -
Iterator
2011-04-23 14:36 1059import java.util.List ; imp ... -
List.subList 得到的新数组地址指向旧数组
2011-04-23 14:22 1063public static void main(Str ... -
SortedSet
2011-04-23 13:50 859import java.util.SortedSet ; ... -
HashSet TreeSet
2011-04-23 13:43 791import java.util.HashSet ; ... -
LinkedList 队列
2011-04-23 13:36 874import java.util.LinkedList ... -
List Vector
2011-04-23 13:14 758import java.util.ArrayList ; ... -
collection 接口
2011-04-23 12:09 679图片 -
HashSet 对对象去重
2011-04-21 23:00 3164import java.util.Set ; impo ... -
Properties 属性 properties xml
2011-04-21 22:40 932import java.util.Properties; ...
相关推荐
PHP5 中 getter/setter 基类的实现 PHP5 中的 getter/setter 基类是一种常用的设计...PHP5 中的 getter/setter 基类可以使用魔术方法、数组和反射机制来实现,且可以使用抽象类来实现基类,以便于其他类继承和扩展。
"getter和setter测试器"是一个开源项目,它简化了对这些方法的单元测试过程,使得开发者可以更高效地验证类的内部状态是否正确地通过getter和setter进行操作。 这个测试器的工作原理是利用反射API,动态地调用类的...
- 数据库持久化框架:例如Hibernate,通过反射调用对象的getter和setter方法来读写数据库记录。 - AOP(面向切面编程):动态代理实现切面的插入。 - 运行时检查类结构:例如在单元测试中验证类的属性和方法。 总结...
4. 处理数组:反射提供API来创建和操作数组,包括获取数组长度、遍历数组元素等。 5. 执行注解处理:反射可以用于检测类、方法或字段上的注解,并根据注解执行相应的逻辑。 `BeanHelper.java`可能是一个工具类,...
5. **属性**:属性是C#中封装数据的一种方式,提供了访问类中字段的安全途径,可以通过getter和setter来控制对数据的读写。 6. **反射**:反射允许程序在运行时检查自身的信息,例如类、接口、属性、方法等,并能...
而`ReflectTester`类则演示了如何利用反射复制一个对象的所有属性,假设这些属性都有对应的getter和setter方法。 在使用反射时,需要注意性能和安全问题。因为反射操作通常比常规的Java代码运行慢,而且它允许对类...
要注意的是,反射只能访问具有公有getter和setter的属性。如果属性只有私有getter或setter,或者完全不公开,`GetProperties()`将不会返回这些属性。因此,确保在类的设计中考虑到这一点,以确保反射能够正确地访问...
这个类将包含表的列名作为成员变量,并提供getter和setter方法。反射机制将基于这些成员变量和方法来构建SQL语句。 为了插入数据,我们首先需要获取`User`类的Class对象,然后通过反射获取每个字段的名称和值。我们...
这些属性都有对应的getter和setter方法,这是Java Bean的标准规范。为了获取这些属性的值,我们将使用反射。 1. **获取对象的Class对象**: 首先,你需要获取到对象的`Class`实例。这可以通过`Object.getClass()`...
首先,获取输入对象的类,然后遍历其所有字段,通过反射找到对应的 getter 和 setter 方法,实现属性的复制。 反射在实际开发中有很多应用场景,比如: 1. **动态代理**:Java 动态代理通常基于反射实现,允许在...
- 反射工厂(如Hibernate):在ORM框架如Hibernate中,反射用于实例化持久化类,以及调用setter和getter方法映射数据库字段和对象属性。 6. 开发模式: - DAO模式:数据访问对象模式,将数据库操作与业务逻辑分离...
5. 访问属性:PropertyInfo对象的GetSetMethod方法可以获取到getter或setter方法,然后使用Invoke方法进行访问。例如,`propertyInfo.SetValue(obj, value)`修改obj的propertyInfo表示的属性值。 总之,C#的反射为...
注意,此方法仅适用于遵循JavaBean规范的对象,即每个属性都有对应的公共getter和setter方法。 #### 总结 Java的反射机制极大地增强了其灵活性和扩展性,尤其是在处理元数据、构建框架和插件系统时非常有用。然而...
- 反射可以自动找到类中的getter和setter方法,并调用它们来获取或设置对象的属性。 6. **静态元素** - 反射也能处理类的静态字段和静态方法。 7. **数组与集合** - 反射可以创建和操作数组,包括多维数组。 -...
在Java编程中,BeanUtil是一个非常重要的工具包,尤其在处理对象的属性操作时,它扮演着不可或缺的角色。BeanUtil源自著名的开源组织Apache,是其 Commons BeanUtils 模块的一部分,旨在简化JavaBeans的使用和操作,...
这些属性都是无参的getter和setter,方便我们通过反射进行读写操作: ```csharp public class MyClass { public int one { get; set; } public int two { set; get; } public int five { set; get; } public ...
- 访问属性:使用PropertyInfo对象的`GetGetMethod()`和`GetSetMethod()`获取getter和setter,然后调用`Invoke()`。 ```vbnet Dim myProp As PropertyInfo = myType.GetProperty("MyProperty") Dim propValue As...
如果需要频繁访问某个字段,考虑使用getter/setter方法或提供公共访问器,而非反射。 7. **谨慎使用AccessibleObject#setAccessible(true)**:这个方法可以绕过Java安全检查,但也会带来额外的性能成本。只有在绝对...
4. **集合操作**:对于数组或集合类型的属性,KVC支持操作子集,例如,`keyPath:@"array[index]"`可以访问数组中的某个元素。 5. **动态属性**:如果以上所有尝试都失败,KVC会尝试动态创建实例变量或方法来处理属性...