程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JAVA類庫的提前加載

JAVA類庫的提前加載

編輯:關於JAVA

在JAVA運行的時加載jar包類庫 要是有相同的包路徑,相同的類名字出現,那麼JVM是否 會報告錯誤呢?

當然不會! JVM只會加載最早的出現的CLASS

首先JVM會加載 自己默認的包 然後加載 EXT目錄下面的所有JAR 再到 classpath

那麼 現在有2個 JAR 分別是 kj021320.jar summer.jar 裡面都有包路徑cn.isto

同樣有 類Jcrack.class 那麼 JVM就會看哪個 類先加載到VM中就用哪個!後面讀進來的 如果路徑名字一樣 就會丟棄!

想到以上加載方式大家會想象到什麼呢?

我們首先設計一個類

//這個是專門破解的類
package cn.isto;
public class Jcrack{
public Jcrack(){}
boolean getLogin(String pwd){
 return true;
}
}

裡面只有一個方法判斷 登陸是否成功 直接返回一個true

把這個類打包為 kj021320.jar

下面我們再來寫2個類

//這個是真正運行時候判斷登陸的類
package cn.isto;
public class Jcrack {
  public Jcrack() {
  }
  boolean getLogin(String pwd){
    return "KJ021320".equals(pwd);
  }
}
//調用登陸驗證的類
package cn.isto;
public class JMain {
  public JMain() {
  }
  public static void main(String[] args){
    System.out.println(new Jcrack().getLogin("Summer"));
  }
}

很明顯我們把上面2個類編譯OK後 直接運行! 不用看控制台都會打印false

然而我們再把上面kj021320.jar加載回來再運行 JMain類

系統就會顯示true 簡單說因為 JVM把正常用戶的Jcrack類拋棄了!而加載了我們自己修改的Jcrack類!

JAVA應用就這樣簡單破解了!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved