反射 getter setter 属性操作 数组操作

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 ;

}

};

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值