zoukankan      html  css  js  c++  java
  • 尚学堂211 反射机制的介绍

    反射的初步:

        动态语言: 程序运行时,可以改变程序结构或变量类型,如:Python,ruby,javascript等等。

    package com.bjsxt.test.bean;
    
    public class User {
        
        private int id;
        private int age;
        private String uname;
        
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public String getUname() {
            return uname;
        }
        
        public void setUname(String uname) {
            this.uname = uname;
        }
        
        public void setUname() {
            this.uname = "高淇";
        }
        
        public User(int id, int age, String uname) {
            super();
            this.id = id;
            this.age = age;
            this.uname = uname;
        }
        
        //javabean必须要有无参的构造方法!
        public User() {
        }
    }
    package com.bjsxt.test;
    
    /**
     * 测试各种类型(class,interface,enum,annotation,primitive type,void)对应的java.lang.Class对象的获取方式
     * @author 尚学堂高淇    www.sxt.cn
     *
     */
    @SuppressWarnings("all")
    public class Demo01 {
        
        public static void main(String[] args) {
            String path = "com.bjsxt.test.bean.User";
            
            try {
                
                Class clazz = Class.forName(path);
                //对象是表示或封装一些数据。  一个类被加载后,JVM会创建一个对应该类的Class对象,类的整个结构信息会放到对应的Class对象中。
                //这个Class对象就像一面镜子一样,通过这面镜子我可以看到对应类的全部信息。
                System.out.println(clazz.hashCode());
                
                Class clazz2 = Class.forName(path);    //一个类只对应一个Class对象
                System.out.println(clazz2.hashCode());
                
                Class strClazz = String.class;
                Class strClazz2 = path.getClass(); 
                System.out.println(strClazz==strClazz2);
                
                Class intClazz =int.class;
                
                int[] arr01 = new int[10];
                int[][] arr02 = new int[30][3];
                int[] arr03 = new int[30];
                double[] arr04 = new double[10];
                
                System.out.println(arr01.getClass().hashCode());
                System.out.println(arr02.getClass().hashCode());
                System.out.println(arr03.getClass().hashCode());
                System.out.println(arr04.getClass().hashCode());
                
                
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        }
        
    }

    程序的运行结果是:

    true
    319454176
    357218532
    319454176
    1555073959

    一般来说反射是这样实现的:
    Class class = Class.forName(className);
    Object object= class.newInstance();
    所以需要一个无参的构造器来生成对象(因为没有给初始值)。所以在上面定义了:

      //javabean必须要有无参的构造方法!
        public User() {
        }
  • 相关阅读:
    搭建Windows下基于Eclipse 的 PHP 开发环境
    Nuit
    typedef 用法小结
    什么是 GUID?
    软件啊
    C++ 学习经典
    [转载]OGRE初学者引导
    [转载]编程的首要原则(s)是什么?
    [转载]怎样成为优秀的软件模型设计者?
    [转载]管理角度看C++游戏程序员发展
  • 原文地址:https://www.cnblogs.com/kebibuluan/p/7268781.html
Copyright © 2011-2022 走看看