本文目錄一覽:
北大青鳥java培訓:提高代碼閱讀能力的技巧有哪些?
對於學習軟體開發的人來說,學會閱讀源代碼是非常重要的,然而很多人並不具備閱讀源代碼的能力。
很多人不喜歡閱讀源代碼,認為這是非常無聊的事情。
如果不會閱讀源代碼,對於後面寫代碼是非常困難的,很多開發人員主要把重心放在寫代碼上,反而忽略代碼的閱讀。
閱讀代碼是非常關鍵的,下面甘肅電腦培訓為大家介紹閱讀代碼的技巧。
1、學會運行代碼運行代碼是閱讀代碼的第一步,這樣能夠了解關於項目的很多細節,並且了解怎麼進行運行,掌握庫的使用方法。
這樣是了解一個項目最好的方法,如果能夠自己了解和編寫相關的項目,這樣對於使用框架和庫會有自己的想法。
2、找到高層次的邏輯當您開始閱讀項目的代碼時,會涉及到每個細節。
相反的,你還需要掌握高層次結構,從這個地方找到入口點,在很多大型項目開發中都可以使用這種方法。
如果是進行web程序開發,那麼甘肅IT培訓建議應該查看不同的包,例如存儲業務邏輯的位置,存儲UI代碼的位置,控制器所在的位置等等。
3、了解和使用工具很多工具都可以有助於源代碼閱讀,並且對可視化代碼有很大的幫助。
在使用過程中,甘肅IT培訓認為IntelliJIdea工具能夠導航源代碼,允許使用單詞的一部分,甚至單詞的縮寫進行搜索。
您還應該學習鍵盤的快捷鍵。
使用滑鼠導航源代碼可能會非常無聊和緩慢,鍵盤快捷鍵可以更快的進行跳轉。
4、了解語言更深入地了解特定語言有助於提高您的代碼閱讀技能。
每種語言都有自己的約定,樣式和語法。
這些知識可以幫助您快速熟悉特定代碼。
其中甘肅電腦培訓發現在Java語言中,方法名稱以小寫字母開頭,而在C#語言中,方法名稱以大寫字母開頭。
了解這種差異可以幫助你從源代碼中找到識別方法。
JAVA如何閱讀代碼更高效?
個人經驗,
讀文件有4種方法,
1 按行讀
2 按規定大小位元組讀
3 按流讀
4 隨機讀取文件
我認為第3種是最好的,而且他是通吃的,
下面是我從網上找來的,你看看有用嗎?
====================================
前兩天用到讀寫文件的操作,上網搜了一些這方面的資料。很有用的。
java中多種方式讀文件
一、多種方式讀文件內容。
1、按位元組讀取文件內容
2、按字元讀取文件內容
3、按行讀取文件內容
4、隨機讀取文件內容
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;
import java.io.Reader;
public class ReadFromFile {
/**
* 以位元組為單位讀取文件,常用於讀二進位文件,如圖片、聲音、影像等文件。
* @param fileName 文件的名
*/
public static void readFileByBytes(String fileName){
File file = new File(fileName);
InputStream in = null;
try {
System.out.println(“以位元組為單位讀取文件內容,一次讀一個位元組:”);
// 一次讀一個位元組
in = new FileInputStream(file);
int tempbyte;
while((tempbyte=in.read()) != -1){
System.out.write(tempbyte);
}
in.close();
} catch (IOException e) {
e.printStackTrace();
return;
}
try {
System.out.println(“以位元組為單位讀取文件內容,一次讀多個位元組:”);
//一次讀多個位元組
byte[] tempbytes = new byte[100];
int byteread = 0;
in = new FileInputStream(fileName);
ReadFromFile.showAvailableBytes(in);
//讀入多個位元組到位元組數組中,byteread為一次讀入的位元組數
while ((byteread = in.read(tempbytes)) != -1){
System.out.write(tempbytes, 0, byteread);
}
} catch (Exception e1) {
e1.printStackTrace();
} finally {
if (in != null){
try {
in.close();
} catch (IOException e1) {
}
}
}
}
/**
* 以字元為單位讀取文件,常用於讀文本,數字等類型的文件
* @param fileName 文件名
*/
public static void readFileByChars(String fileName){
File file = new File(fileName);
Reader reader = null;
try {
System.out.println(“以字元為單位讀取文件內容,一次讀一個位元組:”);
// 一次讀一個字元
reader = new InputStreamReader(new FileInputStream(file));
int tempchar;
while ((tempchar = reader.read()) != -1){
//對於windows下,rn這兩個字元在一起時,表示一個換行。
//但如果這兩個字元分開顯示時,會換兩次行。
//因此,屏蔽掉r,或者屏蔽n。否則,將會多出很多空行。
if (((char)tempchar) != ‘r’){
System.out.print((char)tempchar);
}
}
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
System.out.println(“以字元為單位讀取文件內容,一次讀多個位元組:”);
//一次讀多個字元
char[] tempchars = new char[30];
int charread = 0;
reader = new InputStreamReader(new FileInputStream(fileName));
//讀入多個字元到字元數組中,charread為一次讀取字元數
while ((charread = reader.read(tempchars))!=-1){
//同樣屏蔽掉r不顯示
if ((charread == tempchars.length)(tempchars[tempchars.length-1] != ‘r’)){
System.out.print(tempchars);
}else{
for (int i=0; icharread; i++){
if(tempchars[i] == ‘r’){
continue;
}else{
System.out.print(tempchars[i]);
}
}
}
}
} catch (Exception e1) {
e1.printStackTrace();
}finally {
if (reader != null){
try {
reader.close();
} catch (IOException e1) {
}
}
}
}
/**
* 以行為單位讀取文件,常用於讀面向行的格式化文件
* @param fileName 文件名
*/
public static void readFileByLines(String fileName){
File file = new File(fileName);
BufferedReader reader = null;
try {
System.out.println(“以行為單位讀取文件內容,一次讀一整行:”);
reader = new BufferedReader(new FileReader(file));
String tempString = null;
int line = 1;
//一次讀入一行,直到讀入null為文件結束
while ((tempString = reader.readLine()) != null){
//顯示行號
System.out.println(“line ” + line + “: ” + tempString);
line++;
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null){
try {
reader.close();
} catch (IOException e1) {
}
}
}
}
/**
* 隨機讀取文件內容
* @param fileName 文件名
*/
public static void readFileByRandomAccess(String fileName){
RandomAccessFile randomFile = null;
try {
System.out.println(“隨機讀取一段文件內容:”);
// 打開一個隨機訪問文件流,按只讀方式
randomFile = new RandomAccessFile(fileName, “r”);
// 文件長度,位元組數
long fileLength = randomFile.length();
// 讀文件的起始位置
int beginIndex = (fileLength 4) ? 4 : 0;
//將讀文件的開始位置移到beginIndex位置。
randomFile.seek(beginIndex);
byte[] bytes = new byte[10];
int byteread = 0;
//一次讀10個位元組,如果文件內容不足10個位元組,則讀剩下的位元組。
//將一次讀取的位元組數賦給byteread
while ((byteread = randomFile.read(bytes)) != -1){
System.out.write(bytes, 0, byteread);
}
} catch (IOException e){
e.printStackTrace();
} finally {
if (randomFile != null){
try {
randomFile.close();
} catch (IOException e1) {
}
}
}
}
/**
* 顯示輸入流中還剩的位元組數
* @param in
*/
private static void showAvailableBytes(InputStream in){
try {
System.out.println(“當前位元組輸入流中的位元組數為:” + in.available());
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String fileName = “C:/temp/newTemp.txt”;
ReadFromFile.readFileByBytes(fileName);
ReadFromFile.readFileByChars(fileName);
ReadFromFile.readFileByLines(fileName);
ReadFromFile.readFileByRandomAccess(fileName);
}
}
二、將內容追加到文件尾部
import java.io.FileWriter;
import java.io.IOException;
import java.io.RandomAccessFile;
/**
* 將內容追加到文件尾部
*/
public class AppendToFile {
/**
* A方法追加文件:使用RandomAccessFile
* @param fileName 文件名
* @param content 追加的內容
*/
public static void appendMethodA(String fileName,String content){
try {
// 打開一個隨機訪問文件流,按讀寫方式
RandomAccessFile randomFile = new RandomAccessFile(fileName, “rw”);
// 文件長度,位元組數
long fileLength = randomFile.length();
//將寫文件指針移到文件尾。
randomFile.seek(fileLength);
randomFile.writeBytes(content);
randomFile.close();
} catch (IOException e){
e.printStackTrace();
}
}
/**
* B方法追加文件:使用FileWriter
* @param fileName
* @param content
*/
public static void appendMethodB(String fileName, String content){
try {
//打開一個寫文件器,構造函數中的第二個參數true表示以追加形式寫文件
FileWriter writer = new FileWriter(fileName, true);
writer.write(content);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String fileName = “C:/temp/newTemp.txt”;
String content = “new append!”;
//按方法A追加文件
AppendToFile.appendMethodA(fileName, content);
AppendToFile.appendMethodA(fileName, “append end. n”);
//顯示文件內容
ReadFromFile.readFileByLines(fileName);
//按方法B追加文件
AppendToFile.appendMethodB(fileName, content);
AppendToFile.appendMethodB(fileName, “append end. n”);
//顯示文件內容
ReadFromFile.readFileByLines(fileName);
}
}
———————————————————————————————————————————————–
寫入文件
try{
FileWriter fw=new FileWriter(SystemConfig.getRealPath()+”WEB-INF/url.txt”);
fw.write(“movie”+name);
fw.close();
}catch(IOException e){
e.printStackTrace();
}
讀文件中內容
try{
FileReader fr = null;
fr = new FileReader(SystemConfig.getRealPath()+”WEB-INF/url.txt”);
BufferedReader br=new BufferedReader(fr);
String Line = null;
Line = br.readLine();
while(Line!=null){
s=Line;
Line=null;
br.close();
fr.close();
}
}catch(IOException e1){
e1.printStackTrace();
}
上傳文件
try {
InputStream stream = getUpFile().getInputStream();//把文件讀入
OutputStream bos = new FileOutputStream(filePath + “movie” +name);//建立一個上傳文件的輸出流
int bytesRead = 0;
byte[] buffer = new byte[1026];
while ( (bytesRead = stream.read(buffer, 0, 1026)) != -1) {
bos.write(buffer, 0, bytesRead);//將文件寫入伺服器
}
bos.close();
stream.close();
}catch(Exception e){
System.err.print(e);
}
如何閱讀一個Java項
1、最好了解UML語言;
2、了解代碼大致結構,再根據模塊詳細去看,效果會好一些。
3、每天敲上1千行。。就可以了。。。習慣了就好了。。。慢慢來。。。
比如說 你看書看累了 寫個小程序放鬆下(一般別人是玩遊戲放鬆)- -這樣你就可以了解你要看的代碼的功能和所用的框架技術,這樣在熟悉的基礎上就能得心應手了。
不過,我可不相信什麼一天敲多少行的代碼,你要有目的性的敲,有目的性的敲10行比沒目的性的敲100行還有用。什麼是有目的性的就要你自己去摸索了。
最後給你提醒下,千萬不要相信什麼好的程序員要敲幾十萬行或幾百萬行的代碼,沒用,都是屁話,你要有知識進去才有用。
如果對所看的領域不熟悉,可以試著分解項目,找出真正不懂的部分,對比以前的知識儲備對比著看
先從整體著手。了解整體框架。再著眼每個細節。
4、先看整體結構,把握思路理解類的作用,然後有必要的話再琢磨細節。
5、先隨便拿本java入門書看完,書上的例子照著做完,哪怕抄,要都能理解,然後開始去找例子,先從最小的例子開始看,然後自己寫,然後自己加一些自己的想法,有了這些基礎再去看別人寫的例子,去了解別人的思想,然後轉換成自己的,慢慢的你會進步非常的神速。
6、首先要使用幫助分析代碼框架的工具,如VC中的class view。我認為這樣至少可以減少初看長代碼者的很多麻煩,方便熟悉代碼的基本框架。
然後是要帶著問題去看,藉助上述對框架的理解就比較容易能找到一些感興趣的代碼段,此時就可以細細品位了。
7、閱讀代碼起初不是件容易的事,要先選點代碼量不大且自己較能理解的代碼來練習閱讀能力。一開始就拿個LINUX內核那樣的「天書」來,我相信不是每個凡人都能輕易看懂的。
8、學習 源代碼
很是枯燥,我也看一些源代碼,特別是一個一個文件的查看,最後,我發現,要想快速了解像jdk,tomcat,hibernate這樣的源代碼,必須得藉助工具,首相從整體出發,了解整體框架,然後,在注重細節,我推薦使用Rose,powerdesign
或者source insight 都可以啊
9、先找到main函數,然後一個個接著看
10、教教你怎麼看源代碼吧
1.這是什麼項目的源代碼?
(再沒有文檔這個總是有的吧?哪怕是個代號)
2.這個項目的性質
(B/S還是C/S,用的什麼編程語言,用的行業細分,規模)
3.源代碼的規模
有多少行(其中有多少行是注釋),總共有多少個文件(每一類文件分別有多少個,每個文件是多少行)
如果是面向對象的,有多少個class,如果是面向過程的有多少個function
4.功能的詳細整理
功能列表
函數名 功能 功能描述
(沒有注釋不要緊,函數名總是有的吧,功能你認為是什麼就填什麼)
5.功能模塊之間的關係
(哪怕沒有注釋,按名稱,調用關係一定能整理清楚)
如果你把我上面列的5點搞清楚了,再來抱怨,我想應該是下面這個樣子:
如果這個代碼能夠運行,你可以先讓它運行起來,這樣直觀一些。
如果不能運行,我相信源碼一定會在某種程度上告訴你這個源碼是做什麼的,哪怕沒有任何文檔和注釋,相信我,一定比混淆後的代碼容易看懂。
還有,這些源碼調用的最基本的API都是有文檔的。
例如不知道a是做什麼的,但知道a調用了b,b調用了寫文件的api,
你可以暫時這樣理解,a做的某一件事就是調用b寫文件。
等你對這些a,b,c之間的關係了解得越來越多之後,實現原理也就基本清楚了。
也有可能代碼用了一個比較複雜的演算法,並沒有在旁邊寫上這個演算法的名字(如果有名字,肯定是一個很大的幫助),碰巧這個演算法你沒有用過,這時你可以把這段程序的步驟用文字描述出來。
怎麼看懂java代碼?
想要看到都能java代碼,需要了解編程的基礎知識,變數,表達式,程序執行結構,邏輯判斷等等。最重要是要學會如何調試代碼,慢慢練習,熟練了自然就會了。
如何學習java!
第一階段,Java SE基礎:
Java環境搭建、Java流程式控制制語句-for循環、switch選擇判斷、循環嵌套、數組拷貝、多維數組、final關鍵字、構造函數的調用、類的訪問許可權和路徑、面向對象高級特性、Java異常處理、Set,Map,List介面及介面實現類、Java線程、同步阻塞、JavaIO流、文件的操作,複製,讀寫,刪除等。
第二階段,JavaWeb:
MySQL安裝、管理、創建資料庫、MySQLUPDATE
查詢、Mysql高級操作、JDBC、JDBC資料庫連接操作,JDBC動態Sql處理、Servlet3.0 網頁重定向、Servlet3.0
新增的註解支持、AJAX、responseText屬性詳解等。
第三階段,Java高級框架-SSH:
Struts2異常處理、Struts2+Log4j集成、Struts2和JSON實例、Hibernate5、Hibernate集合映射、Hibernate組件映射、Spring4.0、SpringAOP+
AspectJ框架、Spring 與其它Web框架集成、Spring Hibernate支持等。
第四階段,Java高級框架-SSM:
SpringMVC、Spring MVC生成JSON數據、MyBatis、MyBatis 環境配置及入門、Mybatis set標籤、Mybatis trim標籤、Shiro、Shiro快速入門教程、Shiro Web應用等。
第五階段,SpringBoot+VUE全棧框架:
SpringBoot、全局異常處理、過濾器監聽器、EHCache緩存、SpringBoot Quartz定時任務、Vue、Vue.js 安裝、模板語法、計算屬性、事件處理器、Vue.js 自定義指令、Vue.js 路由等
第六階段,特色課程:
ActiveM環境搭建、生產者和消費者、消息持久化操作、RSA數字加密演算法、Codebar條形碼生成器、zxing二維碼生成器、HighCharts統計圖、Echarts統計圖、網路播放器ckplayer、嵌入式網路播放器,可以瀏覽器和移動端隨意使用
第七階段,互聯網框架的高級應用1:
分散式服務框架的理解,Dubbo架構設計詳解及其核心要點,框架運行原理分析、SpringData數據訪問、Lucene搜索引擎、Lucene的全文搜索伺服器介紹、索引建立方式、Solr海量數據搜索引擎、Socket網路通信、實現RMI遠程對象通訊、使用JMS消息服務、Kafka分散式消息系統、WebService與RestfulWS等
第八階段,互聯網框架的高級應用2:
Spring Security安全框架、實現Web應用安全控制、緩存應用與EhCache框架、OSCache與JBossCache框架、MyBatis與Hibernate緩存機制、NoSQL應用與SQL調優、MongoDB
NoSQL資料庫、Redis內存資料庫、實現RedisSession共享、SQL語句的優化、實現資料庫讀寫分離、WEB應用集群及性能優化、Maven項目管理工具、Web伺服器負載均衡、實現Nginx與Tomcat集群、使用LoadRunner測試工具、性能優化之內存調優、代碼優化與重構的方法等。
對java有興趣的小夥伴們,不妨先從java入門開始!B站上有很多的java教學視頻,從基礎到高級的都有,還挺不錯的,知識點講的很細緻,還有完整版的學習路線圖。也可以自己去看看,下載學習試試。
原創文章,作者:GCNX,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/147147.html