• 反射机制 CLass类的使用


    1  通过无参构造实例化对象

     1 package com.matto;
     2 
     3 /**
     4  * Created by matto on 6/15/16.
     5  */
     6 class Person{
     7     private String name ;
     8     private int age;
     9 
    10     public String getName() {
    11         return name;
    12     }
    13 
    14     public void setName(String name) {
    15         this.name = name;
    16     }
    17 
    18     public int getAge() {
    19         return age;
    20     }
    21 
    22     public void setAge(int age) {
    23         this.age = age;
    24     }
    25 
    26     public String toString(){
    27         return "姓名:" + this.name + "年龄:" +this.age ;
    28     }
    29 }
    30 
    31 public class InstanceDemo {
    32     public static void main(String[] args) {
    33         Class<?> c = null;
    34         try {
    35             c = Class.forName("com.matto.InstanceDemo.Person");
    36         } catch (ClassNotFoundException e) {
    37             e.printStackTrace();
    38         }
    39         Person per = null;
    40 
    41         try {
    42             per = (Person) c.newInstance();
    43         } catch (IllegalAccessException e) {
    44             e.printStackTrace();
    45         } catch (InstantiationException e) {
    46             e.printStackTrace();
    47 
    48             per.setName("Matto");
    49             per.setAge(28);
    50             System.out.println(per);
    51         }
    52     }
    53 }

    2  调用有参构造实例化对象

     1 package com.matto;
     2 
     3 import java.lang.reflect.Constructor;
     4 import java.lang.reflect.InvocationTargetException;
     5 
     6 /**
     7  * Created by matto on 6/15/16.
     8  */
     9 class Person{
    10     private String name ;
    11     private int age;
    12 
    13     public Person(String name , int age){
    14         this.setName(name);
    15         this.setAge(age);
    16     }
    17     
    18     public String getName() {
    19         return name;
    20     }
    21 
    22     public void setName(String name) {
    23         this.name = name;
    24     }
    25 
    26     public int getAge() {
    27         return age;
    28     }
    29 
    30     public void setAge(int age) {
    31         this.age = age;
    32     }
    33 
    34     public String toString(){
    35         return "姓名:" + this.name + "年龄:" +this.age ;
    36     }
    37 }
    38 
    39 public class InstanceDemo {
    40     public static void main(String[] args) {
    41         Class<?> c = null;
    42         try {
    43             c = Class.forName("com.matto.InstanceDemo.Person");  //传入要实例化的包.类
    44         } catch (ClassNotFoundException e) {
    45             e.printStackTrace();
    46         }
    47         Person per = null;
    48         Constructor<?> cons[] = null;                 //声明一个表示构造方法的数组
    49         cons = c.getConstructors();                  //通过反射取得全部构造函数,此处是以对象数组的方式返回。对象数组就是数组里的每个元素都是类的对象,赋值时先定义对象,然后将对象直接赋给数组就行了。
    50 
    51         try {
    52             per = (Person) cons[0].newInstance("Matto",28);    //向构造方法传递参数,因Person只有一个构造方法,所以数组下标为 [0]
    53         } catch (InstantiationException e) {
    54             e.printStackTrace();
    55         } catch (IllegalAccessException e) {
    56             e.printStackTrace();
    57         } catch (InvocationTargetException e) {
    58             e.printStackTrace();
    59         }
    60 
    61         System.out.println(per);                    //Person重写了toString()方法,所以输出结果为  : 姓名: Matto 年龄 :28
    62     }
    63 }
  • 相关阅读:
    C++小知识点
    C++类的const成员函数、默认的构造函数、复制形参调用函数
    原码、反码、补码,计算机中负数的表示
    linux学习笔记(一)
    涉及string、char *、char[ ]、逗号表达式 的代码
    软件皮肤 IrisSkin
    DataGridView 闪烁
    C# String StringBuider 解惑
    JTA事务总结
    世界真的存在吗
  • 原文地址:https://www.cnblogs.com/blog4matto/p/5586905.html
Copyright © 2020-2023  润新知