成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

80%的Java程序員不知道反射強(qiáng)行調(diào)用私有構(gòu)造器這事兒

開(kāi)發(fā) 開(kāi)發(fā)工具
在我之前的一篇文章里曾提到一個(gè)觀點(diǎn):“可能會(huì)有人使用反射強(qiáng)行調(diào)用我們的私有構(gòu)造器”,很多童鞋不明白Java反射機(jī)制怎么做到調(diào)用私有構(gòu)造器,今天我們來(lái)做一個(gè)實(shí)驗(yàn)。

在我之前的一篇文章里曾提到一個(gè)觀點(diǎn):“可能會(huì)有人使用反射強(qiáng)行調(diào)用我們的私有構(gòu)造器”,很多童鞋不明白Java反射機(jī)制怎么做到調(diào)用私有構(gòu)造器,今天我們來(lái)做一個(gè)實(shí)驗(yàn)。

實(shí)驗(yàn)代碼

  1. import java.lang.reflect.*; 
  2. public class ReflectTest {   
  3.      public static void main(String[] args) throws Exception {        
  4.         //get Constructor 
  5.         Class clazz = Class.forName("TestOne"); 
  6.         Constructor cons = clazz.getDeclaredConstructor(null);  
  7.          
  8.         //set accessible to access private constructor   
  9.         cons.setAccessible(true); //1  
  10.         cons.newInstance(null);  
  11.         cons.newInstance(null);  
  12.      } 
  13. class TestOne { 
  14.     private TestOne() {   
  15.         System.out.println("init TestOne=="+this.hashCode());   
  16.     }   

實(shí)驗(yàn)結(jié)果

注釋1處的代碼cons.setAccessible(true),執(zhí)行main函數(shù),出現(xiàn)異常Exception in thread "main" 

  1. java.lang.IllegalAccessException: Class ReflectTest can not access a member of class TestOne with modifiers "private" 

開(kāi)啟1處的代碼cons.setAccessible(true),執(zhí)行main函數(shù),出現(xiàn)如下正常的初始化信息:

  1. init TestOne==12677476 
  2. init TestOne==33263331 

這說(shuō)明私有構(gòu)造函數(shù)被多次成功調(diào)用,注意是私有構(gòu)造函數(shù)哦。

實(shí)驗(yàn)總結(jié)

出現(xiàn)完全不同的兩種測(cè)試結(jié)果的原因是什么?我們來(lái)剖析一下cons.setAccessible(true)函數(shù),為什么設(shè)置為true時(shí),可以通過(guò)反射調(diào)用私有構(gòu)造器呢?我們定位到cons.setAccessible(true)源代碼,可以看到下面的英文說(shuō)明,右側(cè)已經(jīng)幫助大家翻譯了一下。

反射強(qiáng)行調(diào)用私有構(gòu)造器

也就是說(shuō),Java反射機(jī)制非常強(qiáng)大,可以根據(jù)需要繞過(guò)Java語(yǔ)言的訪問(wèn)檢查。

原文是這樣說(shuō)的:

Set the accessible flag for this object to the indicated boolean value. A value of true indicates that the reflected object should suppress Java language access checking when it is used. A value of false indicates that the reflected object should enforce Java language access checks.

翻譯過(guò)來(lái)是這樣的:

  1. 將此對(duì)象的<tt>可訪問(wèn)</ tt>標(biāo)志設(shè)置為指示的布爾值。 值<tt> true </ tt>表示反射對(duì)象應(yīng)該在使用時(shí)抑制Java語(yǔ)言訪問(wèn)檢查。 值<tt> false </ tt>表示反射對(duì)象應(yīng)強(qiáng)制實(shí)施Java語(yǔ)言訪問(wèn)檢查。 

【本文為51CTO專(zhuān)欄作者“朱國(guó)立”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過(guò)作者微信公眾號(hào)“開(kāi)發(fā)者圓桌”獲取聯(lián)系和授權(quán)】

 

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來(lái)源: 51CTO專(zhuān)欄
相關(guān)推薦

2012-01-06 15:03:54

2021-02-08 22:32:43

程序員 靜態(tài)網(wǎng)頁(yè)

2013-12-05 16:59:22

2018-05-08 15:30:46

程序員代碼框架

2015-05-18 10:21:19

2018-11-01 13:57:25

AR醫(yī)療患者

2022-08-08 11:13:35

API接口前端

2011-08-23 13:50:17

程序員

2014-03-12 09:23:06

DevOps團(tuán)隊(duì)合作

2014-03-24 09:16:55

2016-10-09 19:22:08

2018-09-20 17:05:01

前端程序員JavaScript

2019-07-12 15:28:41

緩存數(shù)據(jù)庫(kù)瀏覽器

2018-11-25 10:08:44

阿里巴巴技術(shù)開(kāi)源

2025-01-17 08:50:03

程序員支付寶國(guó)補(bǔ)

2013-11-21 13:35:19

程序員牛人

2021-03-01 19:13:45

YAML程序員數(shù)據(jù)

2025-04-17 02:30:00

2021-01-12 12:33:20

Pandas技巧代碼

2016-04-08 17:50:04

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产欧美精品一区二区三区 | 日韩av一区二区在线观看 | 久久成人精品视频 | 日韩在线欧美 | 丝袜 亚洲 欧美 日韩 综合 | 成人激情视频在线 | 色综合色综合色综合 | 欧美一级片在线观看 | 成人网av | 久久精品久久久久久 | 男女羞羞视频免费 | 国产欧美精品区一区二区三区 | www.亚洲视频.com | 91一区二区三区在线观看 | 欧美三区视频 | av中文在线 | 国产污视频在线 | 欧美日韩精品在线免费观看 | 国产亚洲欧美另类一区二区三区 | 四虎永久影院 | 欧美xxxx黑人又粗又长 | 欧美一区二区三区的 | 免费黄色在线观看 | 91在线播 | 性福视频在线观看 | 一区二区三区 在线 | 在线观看国产视频 | 天天干天天草 | 激情91| 日韩高清不卡 | 中文字幕免费在线 | 国产高清精品一区二区三区 | 午夜a级理论片915影院 | 欧美二区在线 | 狠狠操狠狠搞 | 99re视频在线免费观看 | 日韩精品成人在线 | 91电影| 国产精品久久久久久久岛一牛影视 | 久久久久久天堂 | 国产成人在线视频免费观看 |