前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java:反射入门学习

Java:反射入门学习

作者头像
Breeze.
发布2022-06-05 12:16:39
2190
发布2022-06-05 12:16:39
举报

介绍反射及作用

  • 反射(Reflect)是在运行时动态访问类与对象的技术
  • 反射是JDK1.2版本后的高级特性,隶属于java.lang.reflect
  • 大多数Java框架都基于反射实现参数配置、动态注入等特性

反射四个核心类

Class类

  • Class是JVM中代表“类和接口”的类
  • Class对象具体包含了某个特定类的结构信息
  • 通过Class对象可获取对应类的构造方法/方法/成员变量
image-20220526184026393
image-20220526184026393

Constructor构造方法类

  • Constructor类是对Java类中的构造方法的抽象
  • Constructor对象包含了具体类的某个具体构造方法的声明
  • 通过Constructor对象调用带构造方法创建对象
image-20220526201933145
image-20220526201933145

Method方法类

  • Method对象值代某个类中的方法的描述
  • Method对象使用classObj.getMethod()方法获取
  • 通过Method对象调用指定对象的应用方法
image-20220526205323578
image-20220526205323578

Field成员变量类

  • Field对应某个具体类中的成员变量的声明
  • Field对象使用classObj.getField()方法获取
  • 通过Field对象可为某对象成员变量赋值/取值
image-20220526224931596
image-20220526224931596

#### getDeclared系列方法说明

  1. getDeclaredConstructor(s) | Method(s) | Field(s)获取对应对象
  2. getConstructor(s) | Method(s) | Field(s)只能获取public对象
  3. 访问非作用域内构造方法、方法、成员变量,会抛出异常

产生异常

  1. ClassNotFoundException:类名与类路径书写错误时抛出“累无法找到”异常
  2. InstantiationException:非法访问异常,当在作用域外访问对象方法或成员变量时抛出
  3. IllegalAccessException:当对象无法被实例化,抛出“实例化异常”
  4. NoSuchMethodException:没有找到与之对应的格式的方法
  5. InvocationTargetException:当被调用方法的内部抛出了异常而没有被捕获时
  6. NoSuchFieldException:没有找到成员变量时跑出的异常

反射在项目中的应用

设置国家化配置文件config.properties

代码语言:javascript
复制
language=pers.hua.i18n.Zhcn

创建国家化接口并调用接口

代码语言:javascript
复制
public interface I18N {
    public String say();
}
public class Zhcn implements I18N {
    @Override
    public String say() {
        return "生命不息奋斗不止!";
    }
}

创建Application

代码语言:javascript
复制
public class Application {
    public static void main(String[] args){
        public static void say() {
            Properties properties = new Properties();
            String configPath = Application.class.getResource("/config.properties").getPath();
            try {
                configPath = new URLDecode().decode(congigPath,"UTF-8");
                properties.load(new FileInputStream(configPath));
                String language = configPath.getProperty("language");
                I18N i18n = (I18N)class.forName(language).newInstance();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍反射及作用
  • 反射四个核心类
    • Class类
      • Constructor构造方法类
        • Method方法类
          • Field成员变量类
            • 产生异常
            • 反射在项目中的应用
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档