第一章 corejava的入門

第一章 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_8u32_liunx_i586.bin /opt
d)cd /opt
e)sudo ./jdk_8u32_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.8.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野馬
2009 JDK1.7(Java7.0)代號Dolphin海豚
2014 JDK1.8(Java8.0)
2009年04月20日,甲骨文74億美圓收購Sun。取得java的版權。java


補充:JDK主要包括內容:
a)Java虛擬機:負責解析和執行Java程序.
Java虛擬機可運行在各類平臺上
b)JDK類庫:提供最基礎的Java類及各類實用類。
這些類放在$JAVA_HOME/jre/lib/rt.jar
java.lang, java.io, java.util,
javax.swing,java.sql包中的類都位於JDK類庫中。
c)開發工具:這些開發工具都是可執行程序.
主要包括:位於$JAVA_HOME/bin
javac.exe 編譯工具;
     java.exe 運行工具;
javadoc.exe 生成JavaDoc文檔的工具
jar.exe 打包工具等。c++

四: 理解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的
跨平臺,一次編譯,處處運行。sql

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

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

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

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)方法的結構:
修飾符 返回值類型 方法名字(參數列表){
方法體(業務邏輯代碼)
}
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.jarjar -xvf ch01.jar

相關文章
相關標籤/搜索