现在的位置: 首页 > 综合 > 正文

【黑马程序员Java培训、Android培训】2010JAVA高新技术学习(二)

2013年02月17日 ⁄ 综合 ⁄ 共 3025字 ⁄ 字号 评论关闭

 

 

 

主要来讲讲反射,反射挺重要,如果只做web开发工作,有可能用不太到反射,但是要做安卓开发的话,反射技术就显得非常重要了。

反射听起来挺抽象的一个东西,其实也不是很难。反射就相当于解剖,就好比把电视机比作一个类,叫做TV。那么,电视机里面有很多的功能,像发音功能,播放功能,这些功能就相当于JAVA中类里面的方法。speak()、play()...但是就像电视机一样,类是封装起来的,我们看不见里面的内容,反射做的工作就是把这个类解剖,看看里面到底有什么东西。这就是反射。

类有很多成员组成:字段、方法、构造方法、main()

1、反射类的构造函数Construtor

 //反射Person类的构造函数Person()
 @Test
 public void test2() throws Exception{
  Class clazz = Class.forName("net.csdn.reflect.Person");
  Constructor c = clazz.getDeclaredConstructor(null);
  System.out.println(c.getModifiers());
  System.out.print("前面");
  System.out.print(new Modifier().toString(c.getModifiers()));
  System.out.println("后面");
  //当构造函数前面都有public修饰的时候,反射构造函数的时候调用getConstructor(参数);
  //当构造函数前面什么都没有加的时候,反射构造函数的时调用getDeclaredConstructor(参数);
  Person p = (Person)c.newInstance(null);
  System.out.println(p.name);
 }
 
 //
 //反射Person类的构造函数public Person(String name)
 @Test
 public void test3() throws Exception{
  Class clazz = Class.forName("net.csdn.reflect.Person");
  Constructor c = clazz.getConstructor(String.class);
  System.out.println(new Modifier().toString(c.getModifiers()));
  //Modifier()修正类,修正的人
  //里面有一个toString()方法
  //功能是传入一个int值,就会返回一个对应的修饰符public或者private等
  
  //有了构造函数,创建对象
  Person p = (Person)c.newInstance("李盼乐和朱俊霏");
  System.out.println(p.name); 
 }
 
 //反射Person类得构造函数private Person(String name,int password)
 @Test
 public void test4() throws Exception{
  Class clazz = Class.forName("net.csdn.reflect.Person");
  Constructor c = clazz.getDeclaredConstructor(String.class,int.class);
  c.setAccessible(true);//强盗一把
  Person p = (Person)c.newInstance("好人",23);
  System.out.println();
  
 }

2、反射类的方法Method

 //反射Person类得方法public void sleep()
 @Test
 public void test1() throws Exception{
  Class clazz = Class.forName("net.csdn.reflect.Person");
  Method m = clazz.getMethod("sleep",null);
  Person p = new Person();
  System.out.println(m.invoke(p, null));  
 }
 
 //反射Person类的方法private String sleep(String name)
 @Test
 public void tes2() throws Exception{
  Class clazz = Class.forName("net.csdn.reflect.Person");
  Method m = clazz.getDeclaredMethod("sleep",String.class);//private方法要调用getDeclareMethod()
  //因为方法的修饰符是私有的,所以要进行private修饰
  m.setAccessible(true);
  Person p = new Person();
  System.out.println(m.invoke(p, "朱玲均"));
 }
 
 //反射person类的方法public Class[] sleep(String name,int[] password)
 @Test
 public void test3() throws Exception{
  Class clazz = Class.forName("net.csdn.reflect.Person");
  Method m = clazz.getMethod("sleep",String.class,int[].class);
  Person p = new Person();
  m.invoke(p, "haha",new int[]{1,2,3,4});
 }

3、反射类的main()方法

 @Test
 public void test1() throws Exception{
  Class clazz = Class.forName("net.csdn.reflect.Person");
  Method m = clazz.getMethod("main", String[].class);
  //clazz.getDeclaredMethod(name, parameterTypes)
  //Person p = new Person();
  //m.invoke(p,new String[]{"one","two","three"});
  //因为main方法使静态的,所以无需传对象,传了也没关系
  m.invoke(null, new Object[]{new String[]{"one","two","three"}});
 }

4、反射类的字段Field

 public static void main(String[] args) throws Exception {
  Class newfm=Class.forName("net.csdn.reflect.fm");
  Field fields[]=newfm.getDeclaredFields();
  for(int i=0;i<fields.length;i++)
  System.out.println(fields[i].getName());
 }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

学习中

抱歉!评论已关闭.