当前位置: 首页 > 图灵资讯 > java面试题> 金三银四精选java面试题-private修饰的方法可以通过反射访问,那么private的意义是什么?

金三银四精选java面试题-private修饰的方法可以通过反射访问,那么private的意义是什么?

来源:图灵教育
时间:2023-12-28 09:54:55
 

private修饰的方法可以通过反射访问,那么private的意义是什么?

在Java当中,如果为了我们不想让别人访问某些属性、方法,我们通常的做法是使用private关键字进行修饰。但是Java语言在设计时却允许通过反射来进行访问,只需要关掉访问检查就可以了。

 

import java.lang.reflect.Field;

public class Test {

    public static void main(string[] args) {
        C c = new C();
        try {
            Field f = C.class.getDeclaredField("a");
            f.setAccessible(true);
            Integer i = (Integer)f.get(c);
            System.out.println(i);
        } catch (Exception e) {}
    }
}

class C {
    private Integer a = 6;
}

 

那么private修饰符不是失去了它原本的意义了吗?

 

其实不尽然,本身private修饰符是基于OOP思想下封装概念的一种体现,对于使用者而言是一种约束,并不是一种安全机制。就好比说,你在道路上行驶,导航时不时提醒你限速,这是道路交通法的规定,但是救护车碰上情况是不是也会超速对吧,这个就是这两者的差异。

 

你在用Spring的IoC的时候,你知道你要“注入”,不管它是不是private的,都能够注入进去对吧。

 

如果你按照遵守这套规则,开发者在不考虑bug的情况下可以保证不出问题,否则就很有可能在你意想不到的地方带来灾难性的后果。