20155214曾士軒 2006-2007-2 《Java程序設計》第1周學習總結
教材學習內容總結
瀏覽教材,根據自己的理解每章提出一個問題
- 1.標准API的架構指的是什么?
- 2.一個項目良好的文件管理分支應該是怎么樣的(怎樣管理package,src,classes等)?
- 3.Java語言和C語言有哪些語法差別?
- 4.新建對象分配的內存空間和對應類中屬性類型有什么聯系呢?什么叫做編譯程序蜜糖?
- 5.裝箱動作對方法的影響?
- 6.多態的接口和JAVA中的interface有哪些差別?次態多態指的是什么?
- 7.兩個接口定義了相同的方法是否表示相同的行為?
- 8.異常處理時是如何將錯誤包裝成對象的?
- 9.對象的索引是什么?是將索引儲存在隊列中來讀取對象嗎?
- 10.JAVA的輸入輸出串流和C的文件操作有什么異同嗎?
- 11.如何理解“撰寫類操作java.lang.Runnable接口,流程的進入點實操作在run()方法中(而不是main()方法)”?
- 12.如何理解“同樣的Lambda表達式,可以用來表示不同目標類型的對象操作”?
- 13.為什么要划分機器時間和人類時間?
- 14.使用隊列、棧等不同的結構對銜接NIO銜接數據節點有什么差別呢?
- 15.一個Logger類應該具有那些屬性?
- 16.通過java.sql.DataSource獲得數據來源后,如何將部分數據存儲下來?
- 17.類加載器的功能是繼承自java.lang.ClassLoader,那么它的初始搜索路徑設置的是在哪?
- 18.動態代理技術和自定義注釋之間存在什么關系?
教材學習中的問題和解決過程
了解JAVA的歷史
-
為什么需要Java程序設計語言?
- 1.Java 是由 Sun Microsystems 在 1995 年首先發布的編程語言和計算平台。
- 2.IEEE評出的2016年五月語言排行,JAVA穩坐第一。
- 3.“Java的設計思想保守,他不願意為增加新特性而增加新問題,也不願意讓某些功能嚇跑一線的藍領工作者。雖然緩慢,但是Java卻在不斷地前進和變化着。”——《進擊的Java》/李盼
- 4.有許多應用程序和 Web 站點只有在安裝 Java 后才能正常工作,而且這樣的應用程序和 Web 站點日益增多。Java 快速、安全、可靠。從筆記本電腦到數據中心,從游戲控制台到科學超級計算機,從手機到互聯網,Java 無處不在!(https://www.java.com/zh_CN/download/faq/whatis_java.xml)
-
Java解決了什么問題
- 1."Java就是一種藍領語言,它的設計是為了讓工作中的程序員解決真正的問題。Java是實用的語言,它解決的是真實世界的業務。"——Ben Evans
- 2.James解釋他設計Java但初衷時說:當我在設計的時候,我知道人們想要自動內存管理,人們想要強型式,但是這些功能會嚇跑藍領工人。比如說Smalltalk這是一門很優秀的語言,但是它太先進了,它和現實中開發者們在構建應用時的思維脫離開了。所以Java繼承了其中一些理念,並將其簡化,把這些理念放入一種語言和格式中。這些事解釋了這門語言設計的基本動機。
- 3.一次編譯,到處運行,開源社區活躍。
- 4.Java本身會見到許多為了節省資源而作的設計,Java一開始就是為了消費性數字產品而設計,而這類小型裝置通常有着有限內存與運算資源。
了解JVM、JRE與JDK,並下載、安裝、測試JDK
-
JVM
-
JVM是Java Virtual Machine(Java虛擬機)的縮寫,JVM是一種用於計算設備的規范,它是一個虛構出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現的。
-
JRE
-
JRE為Java Runtime Environment的簡稱,Java Runtime Environment(包括Java Plug-in)是Sun的產品,包括兩部分:Java Runtime Environment和Java Plug-in。JavaRuntimeEnvironment(JRE)是可以在其上運行、測試和傳輸應用程序的Java平台。
-
JDK
-
JDK是 Java 語言的軟件開發工具包,主要用於移動設備、嵌入式設備上的java應用程序。JDK是整個java開發的核心,它包含了JAVA的運行環境,JAVA工具和JAVA基礎的類庫。
-
Oracle JDK與OpenJDK的關系
-

-
OpenJDK是Sun在2006年末把Java開源而形成的項目,Oracle JDK采用了商業實現,而OpenJDK使用的是開源的FreeType。
(http://www.cnblogs.com/zengkefu/p/5633342.html) -
授權協議的不同:
-
1.openjdk采用GPL V2協議放出,而JDK則采用JRL放出。兩者協議雖然都是開放源代碼的,但是在使用上的不同在於GPL V2允許在商業上使用,而JRL只允許個人研究使用。
-
2.OpenJDK不包含Deployment(部署)功能:部署的功能包括:Browser Plugin、Java Web Start、以及Java控制面板,這些功能在Openjdk中是找不到的。
-
3.OpenJDK源代碼不完整:這個很容易想到,在采用GPL協議的Openjdk中,sun jdk的一部分源代碼因為產權的問題無法開放openjdk使用,其中最主要的部份就是JMX中的可選元件SNMP部份的代碼。因此這些不能開放的源代碼 將它作成plug,以供OpenJDK編譯時使用,你也可以選擇不要使用plug。而Icedtea則為這些不完整的部分開發了相同功能的源代碼 (OpenJDK6),促使OpenJDK更加完整。
-
4.部分源代碼用開源代碼替換:由於產權的問題,很多產權不是SUN的源代碼被替換成一些功能相同的開源代碼,比如說字體柵格化引擎,使用Free Type代替。
-
5.openjdk只包含最精簡的JDK:OpenJDK不包含其他的軟件包,比如Rhino Java DB JAXP……,並且可以分離的軟件包也都是盡量的分離,但是這大多數都是自由軟件,你可以自己下載加入。
-
6.不能使用Java商標
(http://blog.csdn.net/kiyoki/article/details/8777744)
學習Java API的重要性
- 1.Java最重要的就是提供龐大且強大的標准API,提供字符串處理、數據輸入/輸出、網絡套件、用戶窗口接口等功能,可以使用這些API作為基礎來進行程序開發,無需重復開發功能相同的組件。
- 2.事實上,在熟悉Java語言之后,更多的時候,都是在學習如何使用Java SE提供但API來組成應用程序。
了解JCP與JSR、RI、TCK的關系
- JCP(Java Community Process)成立於1998年,是使有興趣的各方參與定義Java的特征和未來版本的正式過程。
- JCP使用JSR(Java規范請求,Java Specification Requests)作為正式規范文檔,描述被提議加入到Java體系中的的規范和技術。 JSR變為final狀態前需要正式的公開審查,並由JCP Executive Committee投票決定。最終的JSR會提供一個參考實現,它是免費而且公開源代碼的;還有一個驗證是否符合API規范的TCK(Technology Compatibility Kit)。
- RI(reference implementation)是根據JSR成果作出免費且開發原始碼的參考實現
了解Java的學習路徑
了解PATH、CLASSPATH、SOURCEPATH的作用並會設置

使用sudo vim /etc/profile打開profile 在最后加入PATH、CLASSPATH
- path 路徑,操作系統會依照PATH環境變量中設定的路徑順序,依次尋找各路經下是否有需要的指令。
- classpath 類的路徑,虛擬操作系統需要尋找文檔時,通過CLASSPATH指定其可執行文件的路徑信息。
- sourcepath 是程序代碼調用類時,編譯程序尋找類原始碼的文檔存放位置。
理解封裝、繼承、多態
- 封裝 目前理解,將數據與操作數據的源代碼進行有機的結合,形成類的方法。其中數據和函數都是類的成員。
- 繼承 目前理解,子類可以調用、重寫父類的屬性。
- 多態 目前理解,多態是允許你將父類設置成子類相等的技術,賦值之后,父類就可以根據當前賦值給它的子類的特性以不同的方式運作。
Java SE API架構
- 目前還不太理解,尚未學習。
容器
- 容器從操作層面來說,就是執行與JVM上的Java應用程序;從抽象層面來說就是你的應用程序溝通、協調相關資源的系統
- Java應用程序客戶端執行於應用程序客戶端容器中。
這一節的標題是「Java不只是語言」,學完這節內容后你認為Java還是什么?
- Java首先是一種語言,它預見了時代商業和科技的潮流,逐漸制定出了適應潮流的標准,在標准的基礎上滿足“跨平台”等特性使得Java成為了藍領趨勢。
深入理解JVM/JRE/JDK
JVM
- JVM是Java程序唯一認識的操作系統,其可執行文件為.class的位碼文檔。
- JVM將位碼文檔翻譯為相依於平台的機器碼,這是Java“一次編譯,到處運行”的關鍵。
JRE
- JRE是Java執行環境,包括Java SE API與JVM。
- JRE中的Java SE API可以直接提供鏈接庫
JDK
- JDK提供像編譯程序這樣的工具。
- JDK本身也包括了JRE。
- 撰寫Java程序才需要JDK,執行程序只需要JRE。 <- 思考題:只執行Java程序,不下載JDK可以嗎?
安裝JDK,理解「Public JRE」和「Private JRE」的用途
-
1.安裝JDK
(學習婁老師的JDK安裝教程:http://www.cnblogs.com/rocedu/p/6371315.html#SECJDK)

-
2.public JRE
公共JRE在安裝過程中可以選擇為別的位置。它包括各種瀏覽器的插件,以便於能夠在瀏覽器中執行JAVA小應用程序(Applet)。運行Java虛擬機,Java虛擬機會自動加載公共JRE下面的一個rt.jar包,它是Java核心類庫所在。 -
3.private JRE
在jdk目錄下面有一個子目錄jre,這就是private JRE所在的目錄。所謂私有JRE,即JDK中的工具包需要用到的JRE。這個jre目錄名稱是固定的,不能更改。
代碼調試中的問題和解決過程
初步使用IDE(推薦IDEA),會編譯、運行、調試簡單的Java程序
問題:
-
1.Invalid method declaration

-
2.Method 'main()' is never used

-
3.Cannot resolve symbol 'string'

解決方案:
- main()方法一定得是
public static void main(String [] args) - main()方法是public成員;static表示JVM不用生成類實例就能調用; main()不用傳回值;String[] args可以取得用戶指定的命令行自變量;
代碼托管
(前期git本地設置參照盧肖明學長博客 http://www.cnblogs.com/lxm20145215----/p/5905765.html)
- 代碼提交過程截圖:

tree命令可以查看當前目錄下的項目分支

git init命令可以在項目文件下創建一個庫
git add . -A命令可以將當前目錄下所有文件上傳到庫
git commit -m "撰寫注釋"命令可以撰寫本次上傳代碼的注釋
git log命令可以查看git上傳日志
git remote add origin git@git.oschina.net:git帳號/項目名.git命令可以鏈接遠程github項目
git push -u origin master命令可以將本地項目更新到github項目上

-
托管鏈接
http://git.oschina.net/besti155214/myHello
- 代碼量截圖:

上周考試錯題總結
- 本周考試取消了,我對命令行重新做了總結,並復習了上節課的筆記。
其他(感悟、思考等,可選)
經過一周目的學習,我發現要從一開始入門時使用搜索引擎發現某個命令,某個軟件,某種功能,到能熟練掌握它還有一段不小的距離。
即使在段時間內進行了突擊性學習,沒有反復的拿出來練習還是會遺忘。應該將自己學習過的技能多拿出來實戰,並且思考一下運用心得。
學習進度條
| 代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
|---|---|---|---|---|
| 目標 | 5000行 | 30篇 | 400小時 | |
| 第一周 | 10/10 | 1/1 | 15/21 | 對java學習流程有了一個大致的概念 |
