混淆代碼 是為了防止class文件被反編譯用的 但是程序的功能還是正常的 和你正常運行一樣
濟陽網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),濟陽網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為濟陽成百上千提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的濟陽做網(wǎng)站的公司定做!
如果連變量名都混淆了,就是說所有有具體意義的英文變量名都用a,b,c,x,y等等來表示,那這是不可能還原的,因為電腦也不可能知道你這個a實際上代表了你的年齡而那個c代表了你老婆的胸圍!
但如果只是個事混淆,那網(wǎng)上倒有不少工具可以格式化源代碼!自己搜一搜吧!推薦一款編輯器,IntelliJ,很不錯,值得一提的是,我用過的眾多編輯器中,這款編輯器的代碼格式化功能最強大!
static 是靜態(tài)聲明,所以會先執(zhí)行Employee.id的時候,會先執(zhí)行static的腳本,就是id 的默認(rèn)賦值和靜態(tài)塊的執(zhí)行,即打印那個static_block
所以流程是。賦值id,打印static_block;那上面的代碼就是打印static_block 和Main:0
//哈哈,感覺這道題真心好啊。不知道樓主是從哪里看到的。
//首先這道題樓主要明白以下兩點:
//1:繼承時,子類會隱藏父類相同的方法,要調(diào)用父類方法就必須使用super關(guān)鍵字。
//2:向上轉(zhuǎn)型時,子類會丟失和父類不同的方法,可以使用父類的不同名的所有方法。
public?class?PolyDemo09{
public?static?void?main(String[]?args){
A?a1?=?new?A();
A?a2?=?new?B();//B類型向上轉(zhuǎn)型丟失與A類不同方法
B?b?=?new?B();?
C?c?=?new?C();
D?d?=?new?D();
System.out.println("⑴????"?+?a1.show(b));//B類的父類是A,所以A?and?A
System.out.println("⑵????"?+?a1.show(c));?//C類父類的父類是A,D和他是同級。所以A?and?A
System.out.println("⑶????"?+?a1.show(d));//D類方法有,所以不會向上轉(zhuǎn)型,所以A?and?D
System.out.println("⑷????"?+?a2.show(b));?/*注意這時候a2的兩個方法其實是
public?String?show(D?obj)?{
return?("A?and?D");
}
public?String?show(A?obj)?{
return?("B?and?A");
}??B的父類是A,所以B?and?A?
*/
/**/???????????????????????????????????????????????????????????
System.out.println("⑸????"?+?a2.show(c));//C的父類的父類是A,所以B?and?A;
System.out.println("⑹????"?+?a2.show(d));??//D有對應(yīng)方法,所以A?and?D
System.out.println("⑺????"?+?b.show(b));?/*這個就是繼承了,繼承除了隱藏父類中和子類同名的方法外,在子類中可以直接使用父類的方法。所以B?and?B
所以就變成了
public?String?show(D?obj)?{
return?("A?and?D");
}
public?String?show(B?obj)?{
return?("B?and?B");
}
public?String?show(A?obj)?{
return?("B?and?A");
*/
System.out.println("⑻????"?+?b.show(c));?//C?的父類是B,所以B?and?B
System.out.println("⑼????"?+?b.show(d));//D有相應(yīng)方法,所以A?and?D
}
}
class?A?{
public?String?show(D?obj)?{
return?("A?and?D");
}
public?String?show(A?obj)?{
return?("A?and?A");
}
}
class?B?extends?A?{
public?String?show(B?obj)?{
return?("B?and?B");
}
public?String?show(A?obj)?{
return?("B?and?A");
}
}
class?C?extends?B?{
}
class?D?extends?B?{
}
1)盡量指定類、方法的final修飾符。帶有final修飾符的類是不可派生的,Java編譯器會尋找機會內(nèi)聯(lián)所有的final方法,內(nèi)聯(lián)對于提升Java運行效率作用重大,此舉能夠使性能平均提高50%。
2)盡量重用對象。由于Java虛擬機不僅要花時間生成對象,以后可能還需要花時間對這些對象進行垃圾回收和處理,因此生成過多的對象將會給程序的性能帶來很大的影響。
3)盡可能使用局部變量。調(diào)用方法時傳遞的參數(shù)以及在調(diào)用中創(chuàng)建的臨時變量都保存在棧中速度較快,其他變量,如靜態(tài)變量、實例變量等,都在堆中創(chuàng)建速度較慢。
4)慎用異常。異常對性能不利,只要有異常被拋出,Java虛擬機就必須調(diào)整調(diào)用堆棧,因為在處理過程中創(chuàng)建了一個新的對象。異常只能用于錯誤處理,不應(yīng)該用來控制程序流程。
5)乘法和除法使用移位操作。用移位操作可以極大地提高性能,因為在計算機底層,對位的操作是最方便、最快的,但是移位操作雖然快,可能會使代碼不太好理解,因此最好加上相應(yīng)的注釋。
6)盡量使用HashMap、ArrayList、StringBuilder,除非線程安全需要,否則不推薦使用 Hashtable、Vector、StringBuffer,后三者由于使用同步機制而導(dǎo)致了性能開銷。
盡量在合適的場合使用單例。使用單例可以減輕加載的負(fù)擔(dān)、縮短加載的時間、提高加載的效率,但并不是所有地方都適用于單例。
第一個if是判斷searchkey是不是空的,如果不是空的,就追加到name字段作為查詢條件,like模糊查詢
接著第二個if判斷如果status的值不為空,就追加到status作為條件
如果status為空,走else分支,從userContext中獲取到employee對象,接著判斷,如果它的角色不是manager的話
把這個對象的id拿出來,作為seller.Id的條件進行查詢
package?test2;
import?java.io.BufferedReader;
import?java.io.File;
import?java.io.FileInputStream;
import?java.io.FileOutputStream;
import?java.io.IOException;
import?java.io.InputStream;
import?java.io.InputStreamReader;
import?java.util.HashMap;
import?java.util.Map;
import?java.util.Set;
public?class?JavaCodeAnalyzer?{
public?static?void?analyze(File?file)?throws?IOException{
//FileOutputStream?fos?=?new?FileOutputStream("F;"+File.separator+"result.txt");
if(!(file.getName().endsWith(".txt")||file.getName().endsWith(".java"))){
System.out.println("輸入的分析文件格式不對!");
}
InputStream?is=?new?FileInputStream(file);
BufferedReader?br=?new?BufferedReader(new?InputStreamReader(is));
String?temp;
int?count=0;
int?countSpace=0;
int?countCode=0;
int?countDesc=0;
MapString,?Integer?map?=?getKeyWords();
while((temp=br.readLine())!=null){
countKeys(temp,?map);
count++;
if(temp.trim().equals("")){
countSpace++;
}else?if(temp.trim().startsWith("/*")||temp.trim().startsWith("http://")){
countDesc++;
}else{
countCode++;
}
}
System.out.printf("代碼行數(shù):"+countCode+"占總行數(shù)的%4.2f\n",(double)countCode/count);
System.out.printf("空行數(shù):"+countSpace+"占總行數(shù)的%4.2f\n",(double)countSpace/count);
System.out.printf("注釋行數(shù):"+countDesc+"占總行數(shù)的%4.2f\n",(double)countDesc/count);
System.out.println("總行數(shù):"+count);
System.out.println("出現(xiàn)最多的5個關(guān)鍵字是:");
System.out.println("");
System.out.println("");
System.out.println("");
System.out.println("");
System.out.println("");
}
public?static?void?main(String[]?args)?{
getKeyWords();
File?file?=?new?File("F://Test.java");
try?{
analyze(file);
}?catch?(IOException?e)?{
//?TODO?自動生成?catch?塊
e.printStackTrace();
}
}
public?static?MapString,Integer?getKeyWords(){
MapString,Integer?map?=?new?HashMapString,?Integer();
String[]keywords?=?{"abstract","assert","boolean","break","byte","case","catch","char","class","continue","default","do","double","else","enum","extends","final","finally","float","for","if","implements","import","instanceof","int","interface","long","native","new","package","private","protected","public","return","????strictfp","short","static","super","????switch","synchronized","this","throw","throws","transient","try","void","volatile","while","goto","const"};
for(String?s:keywords){
map.put(s,?0);
}
return?map;
}
public?static?void?countKeys(String?s,MapString,Integer?map){
SetString?keys?=?map.keySet();
for(String?ss:keys){
if(s.indexOf(ss)!=-1){
map.put(ss,?map.get(ss)+1);
}
}
}
}
上班沒啥時間了,還有點沒寫完,你在想想。