CoreJava Introduction

第一章  corejava的入門
一:什麼是語言
語言=os+數據結構+算法+思想
os:操作系統
數據結構:隊,棧,二叉樹,鏈表
算法:做遊戲開發時非常重要
面試題:int a>0,b>0只使用一條輸出語句輸出a,b的最大值
       System.out.println((|a+b|+|a-b|)/2);
二:安裝jdk
1)根據不同的操作系統下載不同的jdk
   Java有三個版本:
      Java SE:開發桌面應用程序,比如QQ
      Java EE:開發企業級應用程序
      Java ME:開發移動應用
2)安裝jdk
   如果是windows,直接雙擊
   如果是unix,在shell中運行
        a)拷貝到家目錄
  b)sudo chmod 777 /opt
  c)cp jdk_6u32_liunx_i586.bin /opt
  d)cd /opt
  e)sudo ./jdk_6u32_liunx_i586.bin
   如果是unix的.tar.gz文件:
       a)將tar.gz拷貝到家目錄並解壓
       b)sudo chmod 777 /opt
       c)sudo mv jdk1.7.0_04 /opt
3)配置環境變量
         在.bashrc中配置環境變量,打開該文件,追加內容
vi ~/.bashrc
        //添加以下內容
    CLASSPATH=. 
  JAVA_HOME=/opt/jdk1.6.0_32
  PATH=$PATH:$JAVA_HOME/bin
  export CLASSPATH JAVA_HOME PATH
   CLASSPATH指定類加載的路徑
   JAVA_HOME指定JDK的安裝目錄
三:JDK:java Development kit
  Sun公司在推出Java語言的同時,也推出了Java的一系列開發工具,
  如JDK——  Java Development Kit(Java開發工具包)。
 可以從網上免費下載。通常以JDK的版本來定義Java的版本。
 時間      版本           在Java標準函數庫中的類(class)的數量
 ----------------------------------------------------------------------
1996 JDK1.0(Java1.0)    250 重點applet
1997 JDK1.1(Java1.1)     500 比較適於開發圖形界面
1998 JDK1.2(Java2)       2300 可達到平臺原始速度,
可用於書寫正規企業級應用程序或移動應用程序
2000 JDK1.3(Java2)
2002 JDK1.4(Java2)        計算能力大幅度提升
2004 JDK1.5(Java5.0)代號Tiger老虎3500  對語言本身作重大改變, 更穩定、更安全、更高效
2006    JDK1.6(Java6.0)代號Mustang野馬
2011    JDK1.7(Java7.0)代號Dolphin海豚
2009年04月20日,甲骨文74億美元收購Sun。取得java的版權。
補充:JDK主要包括內容:
a)Java虛擬機:負責解析和執行Java程序.
              Java虛擬機可運行在各種平臺上
b)JDK類庫:提供最基礎的Java類及各種實用類。
            這些類放在$JAVA_HOME/jre/lib/rt.java
          java.lang, java.io, java.util, 
          javax.swing,java.sql包中的類都位於JDK類庫中。
c)開發工具:這些開發工具都是可執行程序.
            主要包括:位於$JAVA_HOME/bin
             javac.exe    編譯工具;
         java.exe     運行工具;
             javadoc.exe  生成JavaDoc文檔的工具
             jar.exe      打包工具等。


四: 理解Java語言特徵;
Java語言包括語法規則和語法規則的實現。
Sun公司對Java語言有自己的一份參考實現:JDK。
a. 編程語言:語言本質即規則: 字符集、詞法規則、句法規則(條件語句、循環語句等);桌面應用程序  :擁有圖形化用戶接口的軟件;服務器應用程序:通過瀏覽器訪問運行;                          
b. 開發環境:開發程序,不管是桌面應用還是服務器應用,均需要JDK的支持。
c. 應用環境:面向應用程序,而不是開發系統程序或者硬件編程,比如說驅動就是系統程序,系統程序一般用c語言
d. 部署環境:服務器應用程序需部署運行在服務器應用程序上,服務器本身也是一個Java程序,用Java語言編寫的服務器應用程序部署運行時也需要Java語言的支持,將java代碼打成一個包,部署到服務器這個過程叫做部署環境


五. 爲什麼發明Java? 
爲什麼發明了java,換而言之,java有哪些優點呢?
a. 提供一個解釋環境-----》JVM
1) 加速開發: Java當初目的是開發適用於智能化電子消費設備上的軟件,它是基於C++語言,但做了簡化,能加速軟件的開發過程
2) 一次編譯到處運行: 跨平臺
3) 多線程:多線程編程的簡單性是Java成爲流行的服務器端開發語言的主要原因之一
4) 支持動態更新: 軟件代碼文件的替換即更新,
                 類與類之間有調用,如果其中某
一個改變不會影響其他程序。
並且也不需要都編譯打包。只需要做
軟件代碼文件的替換操作。


b. 提供一個比較容易的方式編程
1) 更健壯:沒有指針、沒有內存管理;
   在開發者層面上沒有指針,但是在底層還是有指針。
   Java引入了引用的概念。
   C:malloc()手動分配內存,free()手動釋放內存
   C++:new手動分配內存,delete()手動釋放內存
      手動釋放內存對內存回收比較好。但是也有
       釋放錯誤(釋放一個已經釋放的內存,
               釋放一個沒有開闢的內存)
   Java開發程序員不需要關心什麼時候釋放內存。
   由GC垃圾回收器來管理內存的回收。
2) 純粹的面向對象的編程:在Java中認爲一切均是對象,
 對象有屬性以及改變屬性值的方法。通過Java編程圍繞
 着構建對象的模板、實例化對象、調用對象的方法和屬性等來進行。
c. 那麼如何實現上面這些呢?
虛擬機JVM提供一個解釋環境,讓java代碼可以運行。
垃圾回收機制讓程序員無需在代碼中進行內存管理。
代碼安全校驗保證java代碼的安全性。


六. 理解Java虛擬機的特徵;
  Jvm是什麼?簡稱java 虛擬機(java virtual machine),
是用軟件來模擬一個虛擬的環境。我們用java編寫的源程
序經過編譯以後生成字節碼文件,Jvm 提供了一個解釋運
行 java字節碼文件的環境,只要在不同操+作系統上安裝了
jvm後,就能對同一個java程序進行解釋運行,這就java的
跨平臺,一次編譯,到處運行。


七. 描述垃圾收集的概念;
什麼叫垃圾回收:
1)垃圾:無用對象所佔據的內存空間;
2)垃圾回收:將無用對象所佔據內存空間進行回收的過程;
3)爲什麼要垃圾回收?
 對象創建,需要佔用內存空間,在一個程序運行過程
 中要創建無數個對象,如果對象永久佔用內存,那麼內存
 很快會消費光,倒致後續對象無法創建或者出現內存不足
 的錯誤。因此必須採取一定措施及時回收那些無用對象的
 內存,這樣保證內存可以被重複利用。


C++等程序由程序員顯示進行內存釋放,這樣有可能:
  c:malloc()   free()
  c++:new   delete
1) 忘記內存釋放,倒致無端的內存佔用;
2) 釋放核心類庫佔用內存,倒致系統崩潰;


Java中垃圾回收處理:
1) 由JVM虛擬機通過一個系統級別的垃圾回收器線程自動完成,
不會忘記也不會釋放錯,系統更加穩定;


Java中垃圾回收處理特點:              
1) 由虛擬機通過垃圾回收器線程自動完成;
   是優先級別比較低的線程。沒有辦法去
   控制該線程運行。
   進程:是資源分配的最小單位
   線程:是程序運行的最小單位
2)GC什麼情況下工作:
   a)內存空閒時
   b)內存嚴重不足時
3)只有當對象不再被使用,它的內存纔有可能被回收;
如果虛擬機認爲系統不需要額外的內存,即便對象不再使用內存
4) 程序無法顯式迫使垃圾回收器立即執行垃圾回收,
  可以通過java.lang.System.gc()/java.lang.Runtime.gc()
  建議虛擬機回收對象;
5)java.lang.System.gc()或者java.lang.Runtime.gc()
  都只是來通知系統應該處理垃圾


java中垃圾回收處理的算法:
  1)標記清掃法:清掃所有的帶有標記的垃圾。
                 不會整理內存。
不會進行數據的搬移,效率快
  2)內存搬移法:將非垃圾的內存搬移到另外一塊區域。
                  會整理內存
 會進行數據的搬移,效率慢
八. 闡述Java平臺代碼安全實現策略;
 Java虛擬機爲Java程序提供運行時環境,
 其中一項重要的任務就是管理類,
 管理類的加載、連接和初始化;
1) 加載:查找並加載類的二進制文件(class文件),將其置於內存中。
2) 連接:
a. 驗證:確保被加載類的正確性(有正確的內部結構,並且與其他類協調一致);
爲什麼要驗證:Java虛擬機不知道某個特定的.class文件
到底是由正常的Java編譯器生成的,還是黑客特製的。
類的驗證能提高程序的健壯性,確保程序被安全地執行。


類驗證內容:
. 代碼和jvm規範一致:語法和版本是否兼容
. 代碼不能破壞系統的完整性
. 沒有堆棧的上溢和下溢
. 參數類型是正確的
. 類型轉換的正確的
                          
b. 準備:爲類的靜態變量分配內存,並將其初始化爲默認值;
c. 解析:把類中的符號引用轉換爲直接引用(一個指向所調用方法在方法區內的內存位置的指針);
3) 初始化:給類的靜態變量賦予正確的初始值;
即時編譯器(JIT compiler,just-in-time compiler)
是一個把Java的字節碼(包括需要被解釋的指令的程序)
轉換成可以直接發送給處理器的指令的程序。
8020規則:有80%的常用功能只用有20%的常用代碼是經常使用的,
Inter公司。這個是個專業的人區完成的,完成之後會安裝
在JVM中,我們使用就可以了。


九. 定義類、包和應用程序;


1) Java的工作方式:


源代碼: 編寫Java源代碼文件
                   |
編譯器: 用編譯器編譯源代碼。編譯器會檢查錯誤,如果有錯就要改正才能產生正確的輸出。
                   |
輸出: 編譯器會產生字節碼。任何支持Java的裝置都能夠把它轉譯成可執行的內容。編譯後的字節碼與平臺無關。
                   |
Java虛擬機: 可以讀取與執行字節碼。加載指定類,開始執行它的main方法,然後一直運行到main的所有程序代碼結束爲止。
         
 2) Java的程序結構:
a. 源文件:包含Java代碼(按java語法規則編寫的內容)的文件;
 特徵:1)以java作爲後綴;
       2)可以包含多個類/接口;
b.包的聲明語句(可有可無,如有只能有一行,且位於最前面);
  包的命名規則:公司域名的倒寫.組.功能
   package的作用:
          1)使用文件來進行層次管理的class
          2)在同一個包中不能出現相同的類名,避免命名衝突。
          3)一旦起了包名,類名就發生改變.
            包名.類名====>權限類名
c.import語句(可有可無, 可有多行,緊跟着包的聲明語句);
d.public class類的聲明
  1)類:Java代碼組織的單位, Java代碼都是以一個個類形式組織的。
 用Java語言編寫程序其實就是編寫一個個類;一個類裏的語
 句內容用大括號括起來,一個類裏帶有零至多個方法。
  2)一個Java文件中只能有一個public class,可以有多個class
  3)public class修飾的類名必須和文件名一樣
  4)類的內容語句,用大括號括起來:屬性和方法
e.public static void main(String[] args) 
  1)方法:類似於其它語言裏的函數或過程。
          方法裏帶有零至多行語句。
  2)方法的結構:
     修飾符 返回值類型 方法名字(參數列表){
方法體(業務邏輯代碼)
     }
修飾符:public class 
public 所有人都可以調用該方法
static 修飾方法就是靜態方法
 
  3)方法體,用大括號括起來                        
  4)main方法:Java虛擬機執行Java程序時,首先執行調用的方法。
main方法又叫程序的入口方法或起點方法。不管你的程序有多大,
不管你的程序有多少個類,一定都會有一個main()方法來作爲程序的起點。


f.System.out.println():Java中輸出語句
  System是java.lang.System類
  out是System中的內部類
  println()是方法
g.Java的三大頂級元素:
   package
   import
   class


3) 剖析類:                     
public class FirstJavaProgram{
     public static void main(String[] args) {
            System.out.println("Hello Java, I am your fans!");
     }
 }


        public: 公開給其它類存取;
class: 類聲明的關鍵字;
FirstJavaProgram: 類的名稱;
void: 方法的返回值;
main: 方法的名稱;
String[]: 數組類型;
args: 參數名稱;
System.out.println: 打印到標準輸出上(默認爲命令行)
"Hello Java, I am your fans!": 要輸出的字符串內容;
; 每一行語句必須用分號結尾;
 
十. 編碼、編譯以及運用Java應用程序;
1)編寫:vi 類名.java
      用記事本打開 類名.java
2)編譯:
   javac -d . src/類名.java
  -d:指定編譯後的class文件存放的路徑。
   編譯時連同packge一起編譯
3)運行:
   java  包名.類名


jar -cvf ch01.jar com  將com打包成ch01.jar
jar -xvf ch01.jar   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章