JavaDay24的反射代码

// 把文件读到控制台


            BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream("1.txt")));
            String str=null;
            Class c=null;
            while ((str=br.readLine())!=null){
                c=Class.forName(str);    
            }
            System.out.println(c);

注意:文件是包加类名

// 获取公有的构造

        Class c=Class.forName("Demo1.Student");
            Constructor con =c.getConstructor(String.class,int.class);
            Student student=(Student) con.newInstance("林俊杰",20);
            student.show();

// 获取私有的构造

  System.out.println("++++++++++++++++++暴力反射++++++++++++++++++++++++");
            Constructor co=c.getDeclaredConstructor(String.class);
            co.setAccessible(true);
            Student student1=(Student) co.newInstance("周杰伦");
            student1.show();

// 获取公有的方法

 System.out.println("=======================公有的方法========================");
            Class c=Class.forName("Demo1.Student");
            Constructor con =c.getConstructor(String.class,int.class);
            Student student=(Student) con.newInstance("林俊杰",20);
            Method m=c.getMethod("show");   //  共有的方法
            m.invoke(student);

// 获取有返回值的方法

         System.out.println("++++++++++++++++++++++++++有返回值的方法+++++++++++++++++++++++++++++++++++");
            Class c1=Class.forName("Demo1.Student");
            Constructor co1=c1.getDeclaredConstructor();
            co1.setAccessible(true);
            Method m1=    c1.getMethod("show1",int.class,int.class);
            Object o= m1.invoke(co1,2,3);
            System.out.println(o);

获取公有属性

 Class  c2 =  Class.forName("com.offcn.day24.test.Student");
        Field [] f= c2.getFields();
        System.out.println(Arrays.toString(f));

获取所有公有的属性

Class  c2 =  Class.forName("com.offcn.day24.test.Student");
         Field  []f =   c2.getDeclaredFields();
        System.out.println(Arrays.toString(f));

获取单个公有的属性,并赋值

 Class  c2 =  Class.forName("com.offcn.day24.test.Student");
          Object  obj  = c2.newInstance();
          Field f =  c2.getField("age");
          // 给其赋值
           f.set(obj,200);
          System.out.println(f.get(obj));
              
              // 通过对象来获取其值
          Student student = (Student) obj;
        System.out.println(student.age);

获取私有的属性并给去赋值,取值

 Class  c2 =  Class.forName("com.offcn.day24.test.Student");
          Field f =   c2.getDeclaredField("name");
           Object  obj  = c2.newInstance();

              // 暴力反射
              f.setAccessible(true);


          // 给属性设置值

           f.set(obj,"您好,我来了");
           // 取值
        System.out.println(f.get(obj));

properties与反射结合
properties文件内容

name=Demo2.Dog
method=run

两个类

//狗类
public class Dog {
    public void run(){
        System.out.println("狗在跑");
    }
}
// 猫类
public class Cat {
    public void eat(){
        System.out.println("猫在吃鱼");
    }
}

// main方法的实现代码
      Properties properties=new Properties();
            //ClassLoader c=Test2.class.getClassLoader;
            InputStream is=Test2.class.getResourceAsStream("1.properties");
            properties.load(is);
            String name=properties.getProperty("name");
            String meth=properties.getProperty("method");

            Class cla=Class.forName(name);
            Object obj=cla.newInstance();
            Method method=cla.getMethod(meth);
            method.invoke(obj);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值