zoukankan      html  css  js  c++  java
  • Java反射机制

    1、不通过new一个对象,还可以怎么创建对象?

      通过java反射机制创建对象

    2、private的属性绝对安全吗?

      不安全,可以通过反射机制对私有属性进行赋值

    3、反射应用场景:jdbc驱动加载、SpringIOC

    4、创建UserTest类

    package com.cppdy;
    
    public class UserTest {
    
        private String name;
        private String sex;
    
        public UserTest() {
    
        }
    
        public UserTest(String name, String sex) {
            this.name = name;
            this.sex = sex;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getSex() {
            return sex;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    
        @Override
        public String toString() {
            return "User [name=" + name + ", sex=" + sex + "]";
        }
    
    }

    4、创建IOCTest类(反射案例)

    package com.cppdy;
    
    import java.lang.reflect.Constructor;
    import java.lang.reflect.Field;
    
    public class IOCTest {
    
        public static void main(String[] args) throws Exception {
            Class<?> forName = Class.forName("com.cppdy.UserTest");
            //通过无参构造函数创建实例
            UserTest user1 = (UserTest) forName.newInstance();
            System.out.println(user1.toString());
            //通过有参构造函数创建实例
            Constructor<?> constructor = forName.getConstructor(String.class,String.class);
            UserTest user2 = (UserTest)constructor.newInstance("吹泡泡的魚","男");
            System.out.println(user2.toString());
            //通过反射机制对私有属性进行赋值
            Object newInstance = forName.newInstance();
            Field declaredField1 = forName.getDeclaredField("name");
            Field declaredField2 = forName.getDeclaredField("sex");
            //设置允许访问私有成员
            declaredField1.setAccessible(true);
            declaredField2.setAccessible(true);
            
            declaredField1.set(newInstance, "cppdy");
            declaredField2.set(newInstance, "nan");
            
            UserTest user3 = (UserTest)newInstance;
            System.out.println(user3.toString());
            
            
        }
    
    }
  • 相关阅读:
    Android 浅谈相机研发
    Android线程和线程池
    android之多媒体篇(三)
    android之多媒体篇(二)
    android之多媒体篇(一)
    Android图片缩放方法
    android之BitmapFactory.Options的使用
    mac .bash_profile环境变量汇总
    免费的HTML5连载来了《HTML5网页开发实例具体解释》连载(六)媒体查询
    LeetCode
  • 原文地址:https://www.cnblogs.com/jiefu/p/10029343.html
Copyright © 2011-2022 走看看