java反射机制

1.读取配置文件常见方法

public class Test {
    public static void main(String[] args) throws Exception {

        //获取properties的绝对路劲,一定要把配置文件放在类路径下面
        String path = Thread.currentThread().getContextClassLoader()
                .getResource("classinfo.properties").getPath();

        FileReader reader = new FileReader(path);
        Properties pro = new Properties();
        pro.load(reader);
        reader.close();
        String className = pro.getProperty("className");
        System.out.println(className);
//---------------------------------------------------------------------------------------------

        //上面获取配置文件的绝对路径比较麻烦,可以使用java.util.包下提供的资源绑定器,ResourceBundle
        //配置文件必须在类路径下面,而且必须是.properties结尾的文件才可以
        ResourceBundle bundle = ResourceBundle.getBundle("classinfo");
        String name = bundle.getString("className");
        System.out.println(className);
        

    }
}

2.类加载器简单概述

1,启动类加载器:rt.jar(java的核心类库)

2,扩展类加载器:ext目录

3,应用类加载器:classpath路径下面

4,执行顺序:1->2->3

5,双亲委派机制:自己写的String永远不会执行,因为首先会使用启动类加载器,增加安全

3,Field(反射对象的属性)

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;


    public class Test {
        public static void main(String[] args) throws Exception {

            Class student = Class.forName("java.lang.String");
            StringBuilder buffer = new StringBuilder();
            buffer.append(Modifier.toString(student.getModifiers()) + "class" + student.getSimpleName()+ "{\n");

            Field[] fields = student.getDeclaredFields();
            for(Field fs:fields){
                buffer.append("\t");
                buffer.append(Modifier.toString(fs.getModifiers()));
                buffer.append(" ");
                buffer.append(fs.getType().getSimpleName());
                buffer.append(" ");
                buffer.append(fs.getName());
                buffer.append(";\n");

            }
            buffer.append("}");
            System.out.println(buffer);
        }
    }

4,对象属性赋值

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;


    public class Test {
        public static void main(String[] args) throws Exception {

            Class stu = Class.forName("com.luoyi.Student");

            Object o = stu.newInstance();

            Field field = stu.getDeclaredField("name");
            field.setAccessible(true);
            field.set(o,"ly");
            System.out.println(field.get(o));


        }
    }

5,Method

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;


    public class Test {
        public static void main(String[] args) throws Exception {

            Class stu = Class.forName("com.luoyi.Student");

            Method[] methods = stu.getMethods();
            for(Method method:methods){
                //获取修饰符列表
                System.out.println(Modifier.toString(method.getModifiers()));
                //获取返回值
                System.out.println(method.getReturnType().getSimpleName());
                //获取方法名
                System.out.println(method.getName());
                //获取参数列表
                Class[] parameterTypes = method.getParameterTypes();
                for(Class para: parameterTypes){
                    System.out.println(para.getSimpleName());
                }
            }


        }
    }

6,调用方法

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;


    public class Test {
        public static void main(String[] args) throws Exception {

            Class stu = Class.forName("com.luoyi.Student");

            Object o = stu.newInstance();
            Method method = stu.getDeclaredMethod("login",String.class,String.class);

            //四要素
            //1,调用方法
            //2,object对象
            //3,实参
            //返回值
            method.setAccessible(true);

            Object retValue = method.invoke(o,"admin","123");
            System.out.println(retValue);
        }
    }

 

7,反射Construct<T>

Constructor[] constructors = stu.getDeclaredConstructors();

8,调用构造函数

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;


    public class Test {
        public static void main(String[] args) throws Exception {



            Class stu = Class.forName("com.luoyi.Student");

            Constructor con = stu.getConstructor(String.class);
            Object o = con.newInstance("success");
            

        }
    }

9,获取父类和父类接口

 


import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;


    public class Test {
        public static void main(String[] args) throws Exception {



            Class stu = Class.forName("java.lang.String");

            //获取父类
            Class superClass = stu.getSuperclass();
            System.out.println(superClass.getName());
            Class[] interfaces = stu.getInterfaces();
            for(Class inter:interfaces){

                System.out.println(inter.getName());
            }

        }
    }

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值