Java:面向對象的編程語言
分類:
1)J2SE JAVASE --桌面單機版程序
2)J2EE JAVAEE --web項目
3)J2ME JAVAME --嵌入式的手機程序
特點:
1)跨平臺的(一次編寫,處處運行)
原理:
前臺編寫的.Java文件經過編譯生成.class文件(字節碼文件),.class文件經過解釋在Java虛擬機(JVM)中運行.
Java虛擬機在操作系統之上,jre在Java虛擬機之上,.class文件運行在jre上.
2)半編譯半解釋
3)面向對象的編程語言(封裝,繼承,多態)
基於對象的編程語言(JavaScript),只滿足其中一兩個
4)簡單性
5)安全性:
6)健壯性:
7)分佈式:
8)多線程:
9)動態性:
JVM組成:
1)類加載器(ClassLoader):加載類
2)類型校驗器:進行編譯檢查
3)垃圾回收機制:
自動回收,人爲不可干預,優先級別比較低,CPU空閒時回收,當內存快滿時,優先級變爲最高,執行回收
jre:
Java的運行時環境
面向對象:Java C++
面向過程:C
環境變量:
Path:執行文件路徑(bin)
classpath: . 字節碼文件路徑
Java_home:
命令:
javac:編譯命令 javac 類名.java
java:執行命令 java 類名
Java的基本語法:
1)java的大小寫敏感
2)一句話結束加;
3)一個java文件可以有多個class,但是一個java文件只能有一個公開類,文件名必須與公開類同名
4)java註釋:
單行註釋://
多行註釋:/* */
文檔註釋:/** */ javadoc
標識符:
變量:
命名規範:
1)字母、_、$開頭,後面跟着字母、_、$、數字
2)不能是Java的關鍵字[或者保留字goto]
3)不能有空格
編碼規範:
1)類名、接口名:Pascal原則,每個單詞首字母大寫
2)方法名、變量名:Camel原則,第一個單詞首字母小寫,之後每個單詞首字母大寫
3)常量:全部大寫,單詞之間用_隔開
4)包名:全部小寫
變量聲明:[訪問修飾符] 數據類型 變量名[=初始值];
變量的分類:
按照位置來分:
局部變量:
在方法內部聲明,局部變量必須有初始值,局部變量的生命週期隨着方法的調用而產生,隨着方法調用結束而結束
全局變量(成員變量、實例變量等):
在方法的外部,類的內部聲明
數據類型:
基本數據類型(8種)
數值型
整數型:byte、short、int(默認)、long
浮點型:float、double(默認)
字符型:char:
2個字節,其值用'引起來,Unicode編碼 \u四位十六進制的數據
取值範圍: 0~65535
\:轉義符號
布爾型:boolean: true、false
引用數據類型
數組
類
接口
枚舉
註解
運算符:
算術運算符:+、-、*、/、%、++、--
運算符的結果:與表達式中操作數數據類型最大的相一致
%:結果的正負號與被除數的正負號一致
++(--):如果作爲表達式的一部分
前置(++i):先自加後運算
後置(i++):先運算後自加
+:
加法:+的左邊或者右邊都是數值型的數據
連接:+的左邊或者右邊至少有一個是字符串,則做連接運算,組成更大的字符串
比較運算符:==、!=、>、>=、<、<=
邏輯運算符:&、|、!、^、&&、||
操作數必須是boolean值
位運算符:&、|、~、^、>>、<<、>>>
賦值運算符:=、+=、-=、*=、/=等
優先級: () .
一元運算符>二元運算符>三元運算符
原碼、反碼、補碼:
1)計算機識別的是補碼
2)正數原碼反碼補碼都相同
3)負數反碼是原碼取反(1->0,0->1),補碼=反碼+1
基本數據類型數據類型轉換:取值範圍
自動轉換 小--->大
強制轉換 大--->小 (目標類型)
byte
char int long float double
short
算術運算符(+、-,+=、-=除外),byte、short進行操作的時候,結果自動提升爲int類型
順序語句:
控制語句:
條件判斷:
if語句:
1)if(布爾表達式){//表達式爲true時執行}
2)if。。。else<==>?:
3)if。。。else if。。else:只執行一種情況
4)以上三種句型嵌套;
if和else配對問題:就近原則
switch語句:用於多條件判斷
switch(表達式)
{
case 值1:
語句1;
break;
case 值2:
語句2;
break;
...
case 值n:
語句n;
break;
default:
語句;
break;
}
表達式:數據類型只能是byte/short/char/int/String
值:
1)數據類型只能是byte/short/char/int/String
2)只能是常量或者常量表達式
3)必須是唯一的不重複的
break:可有可無
有:滿足條件執行後退出switch語句
無:滿足條件(匹配成功)執行後,程序將一路往下執行,直到遇到break爲止
default:可有可無,位置任意的,通常在所有的case之後
有:當所有的case都不匹配則執行default的語句
循環語句:代碼重複執行
while:先判斷後循環,最少做0次循環
初始化部分;
while(條件部分){
循環體部分;//重複代碼
迭代部分;
}
do...while:先循環後判斷,至少做一次循環
初始化部分;
do{
循環體部分;
迭代部分;
}while(條件部分);
for:
for(初始化部分;條件部分;迭代部分){
循環體部分;
}
foreach:
多重循環:
break:中斷循環
break:中斷break所在的當前循環
break label(瞭解):中斷退出label處的循環
continue:結束本次循環,繼續下一次循環
continue:結束continue所在的本次循環,繼續continue所在循環的下一次循環
continue label(瞭解):結束label處的本次循環,繼續label處的下一次循環
SYstem.exit();//退出Java虛擬機,0是正常退出,-1是異常退出,正常程序運行結束後會自動執行正常退出.
****************************
short s1=12;
s1+=1; √
s1=s1+1; ×
short和byte在運算時會自動轉換成int型進行運算
原因:
1)+:在編譯器將右邊的表達式結果計算出來後,和左邊的變量類型比較精度,如果左邊的變量精度低於右邊的結果的精度,編譯器會顯式的報錯,告訴程序員去強制轉型.(所以s1=s1+1出錯)最後將表達式的結果複製到變量所在的內存區。
2)+=:編譯器自動隱式直接將+=運算符後面的操作數強制裝換爲前面變量的類型,然後在變量所在的內存區上直接根據右邊的操作數修改左邊變量內存存儲的二進制數值(所以s+=1不報錯)最後達到和賦值運算符相同的目的.與前者相比,由於後者是位操作,效率也較前者高.
boolean flag=true;
if(flag=false)
{
System.out.println("1");
}else
{
System.out.println("2");
} //結果輸出爲2,if條件裏先賦值再判斷
switch語句:用於多條件判斷
int n=5;
switch( n )
{
case 3:
System.out,println("3");
break;
case 5:
System.out,println("5");
case 4:
System.out,println("4");
break;
default:
System.out,println("default");
break;
}
執行以上代碼輸出的是5和4,注意case條件只會匹配一次,上面代碼case已經在 case 5處匹配過一次,那麼後面的case的條件不會再去匹配,但是case條件下的語句會被執行,知道遇到break或者該switch語句結束爲止;同理,如果將case 5用default代替,那麼會執行default之後的語句,直到遇到break或者switch結束爲止