Java 反射机制简谈

Java 反射机制

是什么

Java反射机制就是在Java程序运行时,对于任意一个类,都能知道这个类的所有属性、注解和方法等信息;对于任意一个对象,都能调用它的任意方法和属性。这种动态获取信息以及动态调用对象方法的功能被称为Java语言的反射机制。

有什么用

在第三方应用的开发过程中,经常需要获取某个类的某个属性或方法,但需要获取的东西可能是私有的,这时候利用反射可以获取所需的私有属性或方法(但并不是所有的都适合反射)。

怎么用

先创建一个Apple类:

public class Apple {
    private int price;

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }
}

正射:反射包含了一个“反”字,相应的也有个“正射”,而“正射”就是类似我们平常使用的:

//直接初始化,正射
Apple apple = new Apple();
apple.setPrice(4);
System.out.println("the price is "+ apple.getPrice());

利用Apple类使用new关键字直接创建了一个apple对象,这是“正射”做的事。
反射:看看反射是怎么做的:

//查找这个类,利用其构造一个Class对象
Class clz = Class.forName("com.example.demo.Apple");	
//利用Class对象获取这个类的一个构造器
Constructor appleConstructor = clz.getConstructor();	
//利用构造器创建一个对象的实例
Object object = constructor.newInstance();	
//利用Class对象的getMethod方法获取类的setPrice方法,该方法有一个int类型的参数
Method setMethod = clz.getMethod("setPrice",int.class);
//调用这个Method对象的invoke方法,将object对象传递给invoke方法,同时传递调用这个Method方法的参数
//此处执行了Apple对象的setMethod方法
method.invoke(object, 13);
//获取对象的getMethod方法
Method getMethod = clz.getMethod("getPrice");
//执行对象的getMethod方法
System.out.println("the price is "+ getMethod.invoke(object));

反射的流程:获取反射的Class对象通过反射创建类对象通过反射获取类属性方法及构造器

反射常用API

获取反射中的Class对象

要获取一个类或调用一个类的方法,我们首先需要获取到该类的Class对象,有三种方法:

  1. 使用Class.forName()静态方法:需要知道该类的全路径名
    Class clz = Class.forName("com.example.demo.Apple");
    
  2. 使用类名.class方法:只适合在编译前就知道操作的Class
    Class clz = Apple.class;
  3. 使用类对象的getClass()方法。
    Apple apple = new Apple();
    Class clz = apple.getClass()
    
通过反射创建类对象

主要有两种方式:

  1. 通过Class对象的newInstance()方法
    Class clz = Apple.class;
    Apple apple = (Apple)clz.newInstance();
    
  2. 通过Constructor对象的newInstance()方法
    Class clz = Apple.class;
    Constructor constructor = clz.getConstructor();
    Apple apple = (Apple)constructor.newInstance();
    

通过第一种方法只能使用默认的无参数构造方法,而通过Constructor对象创建类对象可以选择特定构造方法。

通过反射获取类属性、方法、构造器

通过Class对象的getFields()方法 可以获取Class类的属性,但无法获取私有属性,但如果使用Class对象的getDeclaredFields()方法就能获取包括私有属性在内的所有属性:

Class clz = Apple.class();
Field[] fields = clz.getDeclaredFields();
for(Field field : fields){
	System.out.println(field.getName());
}

但是如果要获取私有属性的值,需要使用field.setAccessible(true)来用以获取私有属性的值。
与获取类属性一样,当我们去获取类方法、类构造器时,如果要获取私有方法或私有构造器,则必须使用有declared关键字的方法。

反射提供了一种使用私有构造方法去创建类对象的途径。

反射机制的相关类

与Java反射相关的类:

类名用途
Class类代表类的实体,在运行的Java程序中表示类和接口
Field类代表类的属性(属性也称为成员变量)
Method类代表类的方法
Constructor类代表类的构造方法
Class类:

Class代表类的实体,在运行的Java应用程序中表示类和接口,在这个类中提供了很多有用的方法。

Field类:

Field代表类的成员变量。

Method类

Method代表类的方法。

  • invoke方法:invoke(Object object, Object... args)
  • 用途:传递object对象及参数调用该对象对应的方法
Constructor类

代表类的构造方法。

  • newInstance(Object… initargs):根据传递的参数创建类的对象

反射的优缺点

  • 优点:
    1. 能够运行时动态获取类的实例,大大提高了系统的灵活性和拓展性;
    2. 与java动态编译相结合,可以实现无比强大的功能。
  • 缺点:
    1. 使用反射的性能较低
    2. 使用反射相对来说不安全
    3. 破坏了类的封装性,可以通过反射来获取这个类的属性和私有方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您可以在微软官网上下载Windows Server 2012。具体步骤如下: 1. 打开微软官网(https://www.microsoft.com/zh-cn/)。 2. 点击“产品”菜单,选择“Windows”选项。 3. 在“Windows”页面中,找到“Windows Server”选项,点击进入。 4. 在“Windows Server”页面中,找到“Windows Server 2012”选项,点击进入。 5. 在“Windows Server 2012”页面中,选择您需要的版本,点击“下载”按钮。 6. 根据提示,选择下载方式和下载位置,等待下载完成即可。 需要注意的是,下载前请确保您的计算机符合Windows Server 2012的系统要求。同时,建议您在下载前备份重要数据,以免数据丢失。 ### 回答2: Windows Server 2012 是一种基于64位编程的服务器操作系统。它在 IT 领域中广受欢迎,具有卓越的性能、功能、安全性和稳定性。Windows Server 2012 能够支持虚拟化、存储、网络、云计算等现代 IT 技术和应用。 要下载 Windows Server 2012,你需要首先确定你的系统环境和需求。Windows Server 2012 有多个版本,包括: 1. 数据中心版:适用于大型企业和云环境,支持无限虚拟化和高级存储功能,是最高级别的版本。 2. 标准版:适用于中型企业和小型企业,拥有多种高级特性而不需要额外的许可证。 3. 精简版:适用于特定类型的服务器应用,如网络运营商和电话交换机。 4. 企业版:适用于企业 IT 环境,能够支持更多的虚拟副本和高级存储。 如果你已经确定哪个版本适合你的需求和预算,那么就可以进行下载了。Windows Server 2012 可以在微软官网上下载。步骤如下: 1. 打开微软官网的“下载中心”页面。 2. 在搜索栏中输入“Windows Server 2012”,然后点击搜索。 3. 在搜索结果中选择相应的版本和语言,并点击“下载”。 4. 系统将要求你登录你的微软账号(或注册一个账号)。如果你没有账号,可以免费注册一个。 5. 下载完成后,双击下载文件并按照指示进行安装。安装完毕后,你就可以开始使用 Windows Server 2012 了。 需要注意的是,在下载 Windows Server 2012 前,你要确保你的计算机符合最低要求,包括 CPU、内存、硬盘空间等。此外,你还要了解其许可协议和使用规则,以确保你的使用不会侵犯版权或其他法律问题。 ### 回答3: 首先,我要说的是,Windows Server 2012已经不是最新的服务器操作系统版本,它已经有了它的继任者- Windows Server 2016和Windows Server 2019。但是如果你仍然想下载Windows Server 2012,这里是一些有用的信息: 1. 官方渠道 您可以通过微软官方网站下载Windows Server 2012。从微软官方网站下载Windows Server 2012是最安全和最可靠的方式。您可以从以下链接中选择: https://www.microsoft.com/en-us/evalcenter/evaluate-windows-server-2012 2. 第三方下载 您也可以从其他网站下载Windows Server 2012,比如FileHippo、Softonic等网站。但是请注意,下载文件可能会携带恶意代码或病毒。确保您只从可信的第三方网站下载文件,可能需要在下载前进行适当的病毒/间谍软件扫描。 3. 购买 如果您是企业用户,则 Microsoft Volume Licensing 多半是一个更好的选择。它适用于大型组织,可以帮助您管理和分发许多授权期间和产品许可证,以及进行更好的协商定价。您可以从下面的链接找到更多信息: https://www.microsoft.com/en-us/licensing/licensing-programs/overview.aspx 总的来说,下载 Windows Server 2012 的最佳建议是从微软官方网站下载,并确保您从安全的第三方网站下载安装环境。同时,还可以考虑购买授权的方式获取 Windows Server 2012,如果您是企业用户。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值