关闭

class类 反射

401人阅读 评论(0) 收藏 举报

class

1.java程序中的各个java类属于同一类事物,描述这类事物的java类名就是Class

一个类被加载到内存中,占用一片存储空间,这个空间里面的内容就是类的字节码,不同的类有不同的字节码,它们在内在中的内容也是不同的

有三种方式得到字节码,字节码就是类

1,类名.class

2,对象.class

3.Class.forName("类名")


反射

反射就是把java中的各个成份,映射成相应的java类,一个java类中用一个Class类的对象来表示,一个类中的组成部分 成员变量,成员属性,构造方法,包等信息也是用一个个java类来表示,表示java类的Class类显然要提供一系列的方法来其中的变量,方法,构造,修饰符,包的信息。这些信息就是用相应类的实例对象来表示。如,field  Method,Contructor,Package等等

Contructor类的应用

public class FanSheDemo4 
{
   public static void main(String[] args) throws Exception
   {
	   //等到String类的构造方法,但是构造方法太多,只能用参数类型来确定用哪个
	   //得到一个构造方法的类,用泛型来限制类型
	   Constructor<String> contructor=String.class.getConstructor(String.class);
	   //用这个构造下的一个方法创建一个对象
	   String str=contructor.newInstance("abc");
   }
}

field 的应用

/**
 * 将任意一个对象中的所有string类型蝗成员变量所对应的字符串内容中的“b”改成"a"
 * 
 */
public class FanSheDemo 
{
     public static void main(String[] args) throws Exception
     {
    	 FieldDemo fd=new FieldDemo();
    	 StringDemo sd=new StringDemo();
    	 fd.objDemo(sd);
    	 Field fields=StringDemo.class.getField("x");
    	 sop(fields.get(sd));
     
     }
     
     public static void sop(Object obj)
     {
    	 System.out.println(obj);
     }
}
class StringDemo
{
	public String x="a";
        public String y="b";
}
class FieldDemo
{
    public Object objDemo(Object obj) throws Exception
    {
      Field[] fields=obj.getClass().getDeclaredFields();
      for(int x=0;x<fields.length;x++)
      {
    	    if(fields[x].getType()==String.class)
    	  {
    	       String strValue=(String) fields[x].get(obj);
    	       String newValue=strValue.replace("a", "b");
    	       fields[x].set(obj,newValue);
    		  
    	  }
      }
      return obj;
      
    }
}
Method应用

   public static void main(String[] args) throws Exception
    {
    	//创建对象
       FanSheDemo3 fs=new FanSheDemo3();
       Method method=fs.getClass().getMethod("setX",int.class);
       System.out.println(method.invoke(fs,3));//null
       Method method2=fs.getClass().getMethod("getX", null);
       System.out.println(method2.invoke(fs,null));//3
    }
}

class FanSheDemo3
{
	private int x=0;
	private int y=0;
 	public int getX() {
		return x;
	}
	public void setX(int x) {
		this.x = x;
	}
	public int getY() {
		return y;
	}
	public void setY(int y) {
		this.y = y;
	}
}



















0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3575次
    • 积分:138
    • 等级:
    • 排名:千里之外
    • 原创:11篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档