class类 反射

原创 2013年12月05日 23:57:45

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;
	}
}



















Java中Class类与反射机制的用法总结

Java中Class类与反射机制的用法总结 Java的Class类是java反射机制的基础,通过Class类我们可以获得关于一个类的相关信息,下面我们来了解一下有关java中Class类的相...
  • mawming
  • mawming
  • 2016年08月23日 09:17
  • 869

J2EE之反射中的class类(一)

J2EE之反射中的class类(一) class类的简介:package com.mooc.reflect;public class ClassDemo1 { public static...

Class类,反射的概念

一.认识Class类 想要反射,你就必须要了解一个类——Class,我们知道,java程序中的各个java类都属于同一事物,我们通常用Classliability描述对吧,反射这个概念从JDK1...

反射 之 Class 类的常用方法

反射中,最基础的是对Class类的了解和使用。在JAVA中Object是一切类的父类,而getClass()方法是Object中定义的,如下 [java] view plaincop...

JAVA反射机制-class类的获取

java.lang.Class 是一个比较特殊的类,它用于封装被装入到JVM 中的类(包括类和接口)的信息。当一个类或接口被装入的JVM 时便会产生一个与之关联的java.lang.Class 对象,...
  • le5yo
  • le5yo
  • 2011年05月26日 18:53
  • 681

黑马程序员-java学习笔记-反射基础类Class

---------------------- android培训、java培训、期待与您交流! ---------------------- 正所谓万物皆对象。Java类用于描述一类事物的共性,该...

Class类--反射的基石

Class类: Class 类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组属于被映射为 Class  对象的一个类,所有具有相同元素类型和维数的数组...

【Java反射机制】_Class类的使用笔记

【Java反射机制】_Class类的使用笔记 本章目标: 可以使用Class类完成对象的实例化操作 可以通过Constructor类调用有参构造方法完成对象的实例化操作 具体内容: ...

Java--Reflect(反射)专题1——class 类的使用

转载请注明:http://blog.csdn.net/uniquewonderq 1.class类 1.1在面向对象的世界中,万事万物皆对象   但是在java语言中,静态的成员,普通的数据类型(...

java进阶(二):反射的基础——Class类

一、反射的基石——Class类。 1、与class的区别:
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:class类 反射
举报原因:
原因补充:

(最多只允许输入30个字)