❶ java源代碼分析 實在是不太會,求高手教教我。
packagetest2;
importjava.io.BufferedReader;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.InputStreamReader;
importjava.util.HashMap;
importjava.util.Map;
importjava.util.Set;
publicclassJavaCodeAnalyzer{
publicstaticvoidanalyze(Filefile)throwsIOException{
//FileOutputStreamfos=newFileOutputStream("F;"+File.separator+"result.txt");
if(!(file.getName().endsWith(".txt")||file.getName().endsWith(".java"))){
System.out.println("輸入的分析文件格式不對!");
}
InputStreamis=newFileInputStream(file);
BufferedReaderbr=newBufferedReader(newInputStreamReader(is));
Stringtemp;
intcount=0;
intcountSpace=0;
intcountCode=0;
intcountDesc=0;
Map<String,Integer>map=getKeyWords();
while((temp=br.readLine())!=null){
countKeys(temp,map);
count++;
if(temp.trim().equals("")){
countSpace++;
}elseif(temp.trim().startsWith("/*")||temp.trim().startsWith("//")){
countDesc++;
}else{
countCode++;
}
}
System.out.printf("代碼行數:"+countCode+"占總行數的%4.2f ",(double)countCode/count);
System.out.printf("空行數:"+countSpace+"占總行數的%4.2f ",(double)countSpace/count);
System.out.printf("注釋行數:"+countDesc+"占總行數的%4.2f ",(double)countDesc/count);
System.out.println("總行數:"+count);
System.out.println("出現最多的5個關鍵字是:");
System.out.println("");
System.out.println("");
System.out.println("");
System.out.println("");
System.out.println("");
}
publicstaticvoidmain(String[]args){
getKeyWords();
Filefile=newFile("F://Test.java");
try{
analyze(file);
}catch(IOExceptione){
//TODO自動生成catch塊
e.printStackTrace();
}
}
publicstaticMap<String,Integer>getKeyWords(){
Map<String,Integer>map=newHashMap<String,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(Strings:keywords){
map.put(s,0);
}
returnmap;
}
publicstaticvoidcountKeys(Strings,Map<String,Integer>map){
Set<String>keys=map.keySet();
for(Stringss:keys){
if(s.indexOf(ss)!=-1){
map.put(ss,map.get(ss)+1);
}
}
}
}
上班沒啥時間了,還有點沒寫完,你在想想。
❷ java代碼詳細分析
這個方法就是生成一個隨機數(這個隨機數是有范圍的),但是這個隨機數可能小於0,所以就加了一個if判斷,如果小於0就在前面加負號,負負為正,然後將這個隨機數返回。
❸ java代碼解析
圖發不上來,請看參考資料連接
初學的話只要了解值傳遞不會改變,引用傳遞會改變。
至於原理,有興趣的話可以了解一下。下面講得很詳細
講解:按值傳參與按引用傳參
----------------------------------------------------------------------------
類中包含方法,方法又分為方法聲明和方法實現,方法聲明中又有參數列表,參數根據調用後的效果不同,即是否改變參數的原始數值,又可以分為兩種:按值傳遞的參數與按引用傳遞的參數。
他們的區別是什麼呢?上面旺旺老師是說調用後的效果,我們看一個案例說明:比如有個女孩非常喜歡QQ,還給自己起了個浪漫的名字「輕舞飛揚」,飛揚小姐認識了一個網友「痞子蔡」(n年前非常火的一個網路小說《第一次親密接觸》的兩個主人公),他們聊的很投緣,有天飛揚小姐竟然把自己的電話號碼告訴了痞子蔡,有天痞子蔡竟然電話過來約飛揚小姐見面,考慮到網路的虛幻與現實人心的叵測,飛揚小姐面臨著艱難的選擇:是否去見網友?
那麼見網友就是個方法,方法的參數就是輕舞飛揚,如果痞子蔡是個披著羊皮的狼,那飛揚小姐就可能面臨危險,比如身上少些東西或者多些東西,就是說在方法體中有可能改變參數的原始數值。
現實中飛揚小姐只有兩種選擇,第一,為了愛情奮不顧身,上刀山下火海,再所不辭,但這有可能改變飛揚狀態,即數值;第二,委婉拒絕以求自保,但如果痞子蔡為人特別好,比如像旺旺老師這樣(嘔吐中),她也許會失去一段大好的姻緣。這里,如果科技足夠發達,我們可以完全給出第三種選擇,輕舞飛揚製作一個自己的替身,即把自己備份一份,然後把備份傳入方法體,這樣不論痞子蔡對她做了什麼都不會對她的源體發生影響,又能檢測痞子蔡對自己是否真心。
OK,這里我們就把飛揚小姐本人去見網友叫按引用傳遞,這樣在方法體中發生的改變在方法調用完對參數還有影響,而把讓她替身去叫按值傳遞,這樣方法調用完對參數原始數值沒有影響,發生改變的只是參數的備份,這份備份在方法調用完會自動消亡,也就是說飛揚的替身在見完網友自動消亡。最後可以簡單概括為一句話:按值傳遞參數數值不變,按引用傳遞參數數值改變。
我們上面剛學習了JAVA的數據類型,則有:值類型就是按值傳遞的,而引用類型是按引用傳遞的。下面看一個例子:
public class TestValueAndRef {
public static void main(String[] args) {
Student student = new Student();
student.stuAge = 10;
int a = 10;
int arr[] = new int[]{9, 5, 27};
System.out.println("初始值 a = " + a);
System.out.println("初始值 student.stuAge = " + student.stuAge);
System.out.println("初始值 arr[0] = " + arr[0]);
TestValueAndRef testValueAndRef = new TestValueAndRef();
testValueAndRef.change(a, student, arr);
System.out.println("調用函數後 a = " + a);
System.out.println("調用函數後 student.stuAge = "
+ student.stuAge);
System.out.println("調用函數後 arr[0] = " + arr[0]);
}
public void change(int pa, Student pstu, int[] parr) {
//方法體中改變值類型pa的值
pa = pa + 10;
//方法體中改變引用類型stu,parr的值
pstu.stuAge = pstu.stuAge + 10;
parr[0] = parr[0] + 10;
System.out.println("方法體改變後pa = " + pa);
System.out.println("方法體改變後student.stuAge = "
+ student.stuAge);
System.out.println("方法體改變後parr[0] = " + parr[0]);
}
}
運行結果:
--------------------------------------------------------------------------
初始值 a = 10
初始值 student.stuAge = 10
初始值 arr[0] = 9
方法體改變後pa = 20
方法體改變後student.stuAge = 20
方法體改變後parr[0] = 19
調用函數後 a = 10
調用函數後 student.stuAge = 20
調用函數後 arr[0] = 19
---------------------------------------------------------------------------------
我們看到,基本數據類型int變數a雖然在方法體中改變了數值,但方法調用完後其原始數值並沒有改變。而引用數據類型Student在方法體中改變年齡的數值,方法執行完其數值發生了改變,數組也是引用類型,所以其值也發生了改變。也就是說:按值傳遞參數數值不變,按引用傳遞參數數值改變。它們在內存中的變化如下所示:
根據上面講解的值類型和引用類型的知識,int類型變數在棧中分配一塊內存,而student與arr分配兩塊內存,當方法調用時,創建三個變數pa,pstu,parr這里相當於把棧中的數據全備份一份給這三個數值,則有:
大家看到,不管是按值傳遞還是按引用傳遞,都是把棧中的數據備份了一份給參數變數,只不過值類型備份的是具體的數值,而引用類型備份的是內存地址。
方法體執行完時:
我們看到,根據pstu與parr改變了堆中的具體數值,而pa改變的只是棧中的數值。最後方法調用結束,pstu,pa,parr三個變數消亡,則有:
根據這樣的內存變換,您知道按值傳遞與按引用傳遞的深層原因了嗎
❹ java源碼分析,最好的解答,應該最好逐句解答,這句什麼要這樣寫,為什麼不哪樣寫,看的人一樣就看懂了。
但是如果連程序最基本的元素——標識符、關鍵字、……等等的都沒有了解的話,那麼最先開始看實例是比較困難的,哪怕是逐句解釋。當然了,可以把概念放到實例中講解,但是這樣一來大量概念和其它信息的相互關聯,未必能讓初學者在一開始就理解實常式序。
我也覺得結合實例的基礎講解比價好,只是不能一味全部是實例,當然也不能全部是概念,要相互結合,適當地概括和總結。
❺ java 代碼解析
你的第一個錯誤就是類沒有找到,原因是.java 文件名和類名不一致,仔細檢查一下吧,另外程序里本身還有一些錯誤,我已經改好了,代碼如下:
public class Example1_1 {
public static void main(String args[])
{
String arrStu[][]={{"20073401","王宏","女","18"},{"20073402","張華","女","19"},
{"20073403","劉鵬","女","20"},{"20073404","王秋月","女","22"}};
System.out.println("下面是列印結果\t學號\t姓名\t性別\t年齡");
for(int i=0;i<arrStu.length;i++)
{ System.out.println("第"+(i+1)+"行的所有元素:");
for (int j=0;j<arrStu[i].length;j++)
{ System.out.println(arrStu[i][j]+"\t");
}
System.out.println("\n");
}
}
}
❻ java代碼解讀
第一個if是判斷searchkey是不是空的,如果不是空的,就追加到name欄位作為查詢條件,like模糊查詢
接著第二個if判斷如果status的值不為空,就追加到status作為條件
如果status為空,走else分支,從userContext中獲取到employee對象,接著判斷,如果它的角色不是manager的話
把這個對象的id拿出來,作為seller.Id的條件進行查詢
❼ java代碼分析
定義一個Mystery類,包含一個字元串變數s
Mystery m = new Mystery();
產生一個Mystery類的實例m,調用構造方法Mystery()
構造方法的作用是令s="constructor"
再調用m的go()方法
go()方法的作用是在屏幕上輸出s
所以顯示"constructor"字元串
❽ 解讀Java代碼
從文件里讀入數據,初始化Vehicles,初始化Edges,通過geneticAlgorithm生成解決方案。最後列印結果數據。
❾ Java大神如何學習和分析Java框架的源碼
1、拿到代碼查看項目當中是否有readme這樣的文件,如果沒有查看是否有文檔之類的
2、代碼當中沒有文檔,那麼就想你的同事或者其他人要這個框架的介紹或者資料
3、先請教別人這個框架的大體思路
4、自己獨立去按照文檔或者其他人說的思路去看代碼
5、不懂的地方全部記錄下面,一次行去問,有的時候很多問題在你看到後面的東西的時候就自然明白了
6、看懂了代碼之後自己嘗試著寫一個,看自己的理解是否正確就這么多了。
❿ java基礎代碼解讀
//Scanner是一個是一個接收鍵盤輸入的一個類
//這句話創建了一個Scanner實例
Scannerin=newScanner(System.in);
//
這句話列印了Whatisyourname
System.out.println("Whatisyourname");
//這句話等待用戶輸入當用戶輸入字元串後按下回車nextLine()將返回一個字元串
//符給name
Stringname=in.nextLine();
//同上
System.out.println("Howoldareyou");
//這句視乎有錯
//age是int類型的所以你應該用nextInt()而不是nextLine()
//怎樣你就必須輸入數字
intage=in.nextLine();
//這句話列印你的信息
//加入你輸入的name為張三age為20
//將列印Hello張三,nextyear.you'll,you21
System.out.println("Hello"+name+",nextyear.you'll,you"+(age+1));