Time of Update: 2018-12-08
一.反編譯Apk得到Java原始碼 轉載自:http://hi.baidu.com/%CB%BF%D4%B5%CC%EC%CF%C2/blog/item/2284e2debafc541e495403ec.html 工具下載:需用到dex2jar和JD-GUI這2個工具dex2jar:http://laichao.googlecode.com/files/dex2jar-0.0.7-SNAPSHOT.zipJD-GUI: windows版JD-GUI:http://laichao.googlec
Time of Update: 2018-12-08
裡氏代換原則(LSP):如果對每一個類型為T1的對象o1,都有類型為T2的對象o2,使得以T1定義的所有程式P在所有的對象o1都代換成o2時,程式P的行為沒有變化,那麼類型T2是類型T1的子類型。換言之,一個軟體實體如果使用的是一個基類的話,那麼一定使用於其子類,而且它根本不能察覺出基類對象和子類對象的區別。裡氏代換原則是繼承複用的基石。只有當衍生類可以替換掉基類,軟體單位的功能不會受到影響時,基類才真正被複用,而衍生類也才能夠在基類的基礎上增加新的行為。依賴倒轉原則(DIP):要依賴於抽象,不
Time of Update: 2018-12-08
介面隔離原則(ISP):使用多個專門的介面比使用單一的總介面要好。一個類對另外一個類的依賴性應當是建立在最小的介面上的。一個介面都代表一個角色,不應當將不同的角色都交給一個介面。沒有關係的介面合并在一起,形成一個臃腫的大介面,這是對角色和介面的汙染。 合成/彙總複用原則(CARP):又稱合成複用原則(CRP),就是在一個新的對象裡面使用一些已有的對象,使之成為新對象的一部分;新的對象通過向這些對象的委派達到複用已有功能的目的。簡而言之就是:要盡量使用合成/彙總,盡量不要使用繼承。彙總:用來表示“
Time of Update: 2018-12-08
迪米特法則(LoD):又稱最少知識原則(LKP),就是說一個對象應當對其他對象儘可能少的瞭解。狹義的迪米特法則:如果兩個類不必彼此直接通訊,那麼這兩個類就不應當發生直接的相互作用.如果其中一個類需要調用另一個類的方法的話,可以通過第三者轉寄這個調用.缺點:會在系統內造出大量的小方法,散落在系統的各個角落.這些方法僅僅是傳遞間接的調用,因此系統與系統中的商業邏輯無關.當設計師試圖從一張類圖看出總體的構架時,這些小方法會造成迷惑和困擾.為了克服狹義迪米特法則的缺點,可以使用依賴倒轉原則,引入一個抽象
Time of Update: 2018-12-08
自從有了設計模式的概念後一直想買本模式方面的書,所以買了《C#設計模式》,但是讀了幾個月的時間發現自己還只是看了簡單工廠,工廠,抽象工廠和單件模式,已經被此書搞得暈頭轉向了(書也爛,自己水平也低)。所以只得再考慮買本好書了,可設計模式的書大多是C++和Java寫的,VB起家的我C++水平實在夠嗆,所以考慮範圍也就定在了Java設計模式方面的書。前段時間在天級網看到《Java設計模式專輯》,感覺很好,特別是閻宏博士寫的幾篇文章十分精彩,所以很想買他寫的《java與模式》。然後我注意看了不少書評,感
Time of Update: 2018-12-08
物件導向的可複用設計(OOD)的第一塊基石就是"開-閉"原則(OCP) 。開閉原則講的是:一個軟體實體應當對擴充開放,對修改關閉。這個原則說的是,在設計一個模組的時候,應當使這個模組可以在不被修改的前提下被擴充。換言之,應當可以在不必修改原始碼的情況下改變這個模組的行為。滿足“開-閉”原則的設計可以給一個軟體系統帶來兩個無可比擬的優越性:* 通過擴充已有的軟體系統,可以提供新的行為,以滿足對軟體的新需求,使變化中的軟體系統有一定的適應性和靈活性。*
Time of Update: 2018-12-08
記得以前有人報怨在java裡沒有類似delphi裡的class reference 用法, 比如在delphi裡可以這樣做 type BaseClass = class constructor Create; virtual; ... end; BaseClassRef = class of BaseClass DerivedClass1 = class (BaseClass ) DerivedClass2 = class (BaseClass )
Time of Update: 2018-12-08
關於Java AOP和dotnet attribute, 有的人說, AOP是概念, attribute是技術, 不能混為一談, 不過如果你想在不影響原有class hiberarchy的條件下, 用橫切的方法去影響class或method的行為, 當你對.net程式員提這個要求, 他們想到的是attribute, 如果你對java程式員說, 他們肯定會說AOP, 所以無論是概念還是技術, 只要他們乾的是有相同之處, 我們就不用去太在乎他的名字. 只專著他們的功能好了. 首先,
Time of Update: 2018-12-08
曾經利用GCJ編譯itext,並利用itext寫了很多小程式(現在可以從網上擷取的有pdfrotate,nup_pdf),這裡只是介紹下如何擷取GCJ的編譯環境。GCJ是一個基於GNU協議的Java編輯器,支援以下編譯方式:Java原始碼直接編譯成本地機器碼,windows平台下就是exe可執行程式(脫離JRE);Java原始碼編譯成Java bytecode(class檔案),這個在windows平台下估計只有特殊情況才有意義,畢竟GCJ還不能完全相容J2SDK;Java
Time of Update: 2018-12-08
As promised here is a very simple PDF that contains a SVG-based image. The SVG contains the following data:Code highlighting produced by Actipro CodeHighlighter
Time of Update: 2018-12-08
層級: 初級chris, 畢業於中國人民大學資訊學院2003 年 6 月 27 日很多人用java進行文檔操作時經常會遇到一個問題,就是如何獲得word,excel,pdf等文檔的內容?我研究了一下,在這裡總結一下抽取word,pdf的幾種方法。用jacob其實jacob是一個bridage,串連java和com或者win32函數的一個中介軟體,jacob並不能直接抽取word,excel等檔案,需要自己寫dll哦,不過已經有為你寫好的了,就是jacob的作者一併提供了。 jacob
Time of Update: 2018-12-08
1、一種Native的實現,產生真正的Uuid,好像用的人挺多的。http://www.doomdark.org/doomdark/proj/jug/開源的,LGPL協議。是採用了Native的方式實現的,不過提供了不同的平台的實現。包括:FreeBSD_x86Linux_x86MacOSX_ppcSolaris_sparcWin_x86使用方式如下:import org.doomdark.uuid.UUID;import org.doomdark.uuid.UUIDGenerator;UUID
Time of Update: 2018-12-08
最近在寫一個Java的Message Service器,同時需要做一個.NET版本的用戶端。他們之間需要安全通訊,基於一些簡單的密碼協議,用到公開金鑰加密、對稱式加密、Hash演算法。這個過程中,我對這兩個平台的加密部分有了一定瞭解,以下也是我的一些新的認識吧。1、對稱式加密1) Java 1.5的對稱式加密很簡單,提供的演算法也較多。可以說是,使用簡單,傻瓜式,而且功能齊全。例如:Code highlighting produced by Actipro CodeHighlighter
Time of Update: 2018-12-08
經一個朋友介紹,發現了一個很好的Java環境下的查錯工具findBugs。這個工具的真的很棒,使用這個工具發現了我代碼中一些小BUG,人畢竟是人,就是會犯錯誤,工具比人強。令人吃驚的是,這個工具檢查可能導致Connection、Statement、ResultSet這些資源類忘記關閉的BUG,這個功能特彆強。例如:Conneciton conn = ...;Statement stmt = conn.createStatement();ResultSet rs =
Time of Update: 2018-12-08
System.nano()調用耗時450 nano,超級慢,比new Object()的操作慢100倍。經一群無聊好事者查證,System.nanoTime()在linux下的實現,最終調用clock_gettime系統函數。100萬次調用耗時,java語言中System.nanoTime()和C語言中的clock_gettime()調用時間基本一致,所以System.nanoTime()慢的原因就是系統調用clock_gettime。無聊好事者請注意,自行測試System.nanoTime()
Time of Update: 2018-12-08
Time of Update: 2018-12-08
最近做了一個小的編譯原理作業,是一個C_minus語言的詞法分析器,本來四月初就已經寫好了一個版本,而且支援一部分的語義邏輯驗證,並且還可以處理所有常數,所有的關鍵字,所有的算術運算子,因為功能超出了老師的預期,以至於被老師懷疑是抄襲網上的代碼,當然老師不只懷疑我,也懷疑別人。最終憑藉我的講解,徹底讓老師信服。但是由於我考慮到一個方法的可讀性原則,不想一個迴圈把所有邏輯都處理掉,所以寫了多個處理方法,把一個大迴圈,分離成多個子迴圈。
Time of Update: 2018-12-08
昨天項目更新功能但是報了一個永久儲存地區溢出的錯,導致我所有被SSH調用的方法都不可用,讓我很是鬱悶了一番,不過這個問題很普遍。網上一搜,解決方案一大堆。之所以報這個錯,原因:PermGen space(記憶體的永久儲存地區)這一部分用於存放Class和Meta的資訊,Class在被 Load的時候被放入PermGen space地區,它和和存放Instance的Heap地區不同,GC不會在主程式運行期對PermGen
Time of Update: 2018-12-08
熟悉C++的人對於兩個字串比較的代碼一定很瞭解:(string1==string2)但在java中,這個代碼即使在兩個字串完全相同的情況下也會返回falseJava中必須使用string1.equals(string2)來進行判斷 補充如果:string s1=new String("Hello");string s2=new String("Hello");則(s1==s2)=false 如果:string s1="Hello";string
Time of Update: 2018-12-08
要擷取對其他包的存取權限,所有的類必須有公用許可權或包許可權。如果將某個成員類聲明為protected,那麼它的.class檔案就會認為是公有類。如果將某個成員類聲明為private,那麼它的.class檔案就會認為是包內類。每個嵌套類和內部累都被存放在自己的.class檔案裡。.class檔案名稱先是封閉類的名字,緊跟著$符號,然後是被封閉類的名字匿名類是用數字來標記的舉例:Equation2.java檔案,產生的.class檔案有:Equation2.class