好程序員Java培訓分享Java基礎知識總結java
1,JDK:Java Development Kit,java的開發和運行環境,java的開發工具和jre。c++
2,JRE:Java Runtime Environment,java程序的運行環境,java運行的所需的類庫+JVM(java虛擬機)。程序員
3,配置環境變量:讓java jdk\bin目錄下的工具,能夠在任意目錄下運行,緣由是,將該工具所在目錄告訴了系統,當使用該工具時,由系統幫咱們去找指定的目錄。jvm
環境變量的配置:函數
1)永久配置方式:JAVA_HOME=%安裝路徑%\Java\jdk工具
path=%JAVA_HOME%\bin開發工具
2)臨時配置方式:set path=%path%;C:\Program Files\Java\jdk\binspa
特色:系統默認先去當前路徑下找要執行的程序,若是沒有,再去path中設置的路徑下找。命令行
classpath的配置:對象
1)永久配置方式:classpath=.;c:\;e:\
2)臨時配置方式:set classpath=.;c:\;e:\
注意:在定義classpath環境變量時,須要注意的狀況
若是沒有定義環境變量classpath,java啓動jvm後,會在當前目錄下查找要運行的類文件;
若是指定了classpath,那麼會在指定的目錄下查找要運行的類文件。
還會在當前目錄找嗎?兩種狀況:
CLASSPATH是什麼?它的做用是什麼?
它是javac編譯器的一個環境變量。它的做用與import、package關鍵字有關。當你寫下improt java.util.*時,編譯器面對import關鍵字時,就知道你要引入java.util這個package中的類;可是編譯器如何知道你把這個package放在哪裏了呢?因此你首先得告訴編譯器這個package的所在位置;如何告訴它呢?就是設置CLASSPATH啦 :) 若是java.util這個package在c:/jdk/ 目錄下,你得把c:/jdk/這個路徑設置到CLASSPATH中去!當編譯器面對import java.util.*這個語句時,它先會查找CLASSPATH所指定的目錄,並檢視子目錄java/util是否存在,而後找出名稱吻合的已編譯文件(.class文件)。若是沒有找到就會報錯!CLASSPATH有點像c/c++編譯器中的INCLUDE路徑的設置哦,是否是?當c/c++編譯器遇到include 這樣的語句,它是如何運做的?哦,其實道理都差很少!搜索INCLUDE路徑,檢視文件!當你本身開發一個package時,而後想要用這個package中的類;天然,你也得把這個package所在的目錄設置到CLASSPATH中去!CLASSPATH的設定,對JAVA的初學者而言是一件棘手的事。因此Sun讓JAVA2的JDK更聰明一些。你會發現,在你安裝以後,即便徹底沒有設定CLASSPATH,你仍然可以編譯基本的JAVA程序,而且加以執行。
PATH環境變量
PATH環境變量。做用是指定命令搜索路徑,在命令行下面執行命令如javac編譯java程序時,它會到PATH變量所指定的路徑中查找看是否能找到相應的命令程序。咱們須要把jdk安裝目錄下的bin目錄增長到現有的PATH變量中,bin目錄中包含常常要用到的可執行文件如javac/java/javadoc等待,設置好PATH變量後,就能夠在任何目錄下執行javac/java等工具了。
4,javac命令和java命令作什麼事情呢?
要知道java是分兩部分的:一個是編譯,一個是運行。
javac:負責的是編譯的部分,當執行javac時,會啓動java的編譯器程序。對指定擴展名的.java文件進行編譯。生成了jvm能夠識別的字節碼文件。也就是class文件,也就是java的運行程序。
java:負責運行的部分.會啓動jvm.加載運行時所需的類庫,並對class文件進行執行.
一個文件要被執行,必需要有一個執行的起始點,這個起始點就是main函數.
標示符:
1),數字不能夠開頭。
2),不可使用關鍵字。
變量的做用域和生存期:
生命週期:變量從定義的位置開始就在內存中活了;
變量到達它所在的做用域的時候就在內存中消失了;
數據類型:
1):基本數據類型:byte、short、int、long、float、double、char、boolean
運算符號:
4)、邏輯運算符。
& | ^ ! && ||
邏輯運算符除了 ! 外都是用於鏈接兩個boolean類型表達式。
&: 只有兩邊都爲true結果是true。不然就是false。
|:只要兩邊都爲false結果是false,不然就是true
^:異或:和或有點不同。
兩邊結果同樣,就爲false。
兩邊結果不同,就爲true.
& 和 &&區別: & :不管左邊結果是什麼,右邊都參與運算。
&&:短路與,若是左邊爲false,那麼右邊不參數與運算。
| 和|| 區別:|:兩邊都運算。
||:短路或,若是左邊爲true,那麼右邊不參與運算。
5)、位運算符:用於操做二進制位的運算符。
& | ^
<< >> >>>(無符號右移)
練習:對兩個變量的數據進行互換。不須要第三方變量。
int a = 3,b = 5;-->b = 3,a = 5;
方法一:
a = a + b; a = 8;
b = a - b; b = 3;
a = a - b; a = 5;
方法二:
a = a ^ b;//
b = a ^ b;//b = a ^ b ^ b = a
a = a ^ b;//a = a ^ b ^ a = b;
練習:高效的算出 2*8 = 2<<3;
重載的定義是:在一個類中,若是出現了兩個或者兩個以上的同名函數,只要它們的參數的個數,或者參數的類型不一樣,便可稱之爲該函數重載了。
如何區分重載:當函數同名時,只看參數列表。和返回值類型不要緊。
重寫:父類與子類之間的多態性,對父類的函數進行從新定義。若是在子類中定義某方法與其父類有相同的名稱和參數,咱們說該方法被重寫 (Overriding)。
Java內存管理
Java內存管理:深刻Java內存區域
Java與C++之間有一堵由內存動態分配和垃圾收集技術所圍成的高牆,牆外面的人想進去,牆裏面的人卻想出來。
概述:
對於從事C和C++程序開發的開發人員來講,在內存管理領域,他們既是擁有最高權力的皇帝,又是從事最基礎工做的勞動人民—既擁有每個對象的"全部權",又擔負着每個對象生命開始到終結的維護責任。
對於Java程序員來講,在虛擬機的自動內存管理機制的幫助下,再也不須要爲每個new操做去寫配對的delete/free代碼,並且不容易出現內存泄漏和內存溢出問題,看起來由虛擬機管理內存一切都很美好。不過,也正是由於Java程序員把內存控制的權力交給了Java虛擬機,一旦出現內存泄漏和溢出方面的問題,若是不瞭解虛擬機是怎樣使用內存的,那排查錯誤將會成爲一項異常艱難的工做。