Java基礎之——Java概述與基礎知識
1、何為編程?
編程就是讓計算機為解決某個問題而使用某種程序設計語言編寫程序代碼,並最終得到結果的過程。
為了使計算機能夠理解人的意圖,人類就必須要將需解決的問題的思路、方法、和手段通過計算機能夠理解的形式告訴計算機,使得計算機能夠根據人的指令一步一步去工作,完成某種特定的任務。
這種人和計算機之間交流的過程就是編程。
2、Java語言概述,歷史、特點
是SUN(Stanford University Network,斯坦福大學網絡公司)1995年推出的一門高級語言。
是一種面向Internet的編程語言。
隨著Java技術在web方面的不斷成熟,已經成為Web應用程序的首選開發語言。
是簡單易學,完全面向對象,安全可靠,與平臺無關
java5.0之後的三大技術框架
J2EE(Java 2 Platform Enterprise Edition)企業版
在jdk5.0版本後稱為JAVAEE,是為開發企業環境下的應用程序提供的一套解決方案。該技術體系中包含的技術如Servlet Jsp等,主要針對於Web應用程序開發。是傳智播客就業班和黑馬訓練營的主要學習內容之一.。
J2SE(Java 2 Platform Standard Edition)標準版
在jdk5.0版本後稱為JAVASE,這是在java基礎階段主要學習的內容,也是java的基礎,以後不管從事Android開發或者是物聯網+雲計算的開發,等是建立在JSE
J2ME(Java 2 Platform Micro Edition)小型版
在jdk5.0版本以後稱為JAVAME,該技術多應用於一些電子產品的嵌入式開發,以前在手機開發上應用的也比較多,但是隨著智能手機的發展,現在手機應用程序(比如Android程序)的開發已經不再使用該技術。
3、什麽是跨平臺性?原理是什麽?JVM
所謂跨平臺性,是指java語言編寫的程序,一次編譯後,可以在多個系統平臺上運行。
實現原理:Java程序是通過java虛擬機在系統平臺上運行的,只要該系統可以安裝相應的java虛擬機,該系統就可以運行
我的總結:Java程序之所以能夠實現跨平臺運行,是因為它根本就不直接運行在任何底層平臺上,而是需要在哪裏運行,就在哪裏(如Windows平臺)事先準備好自己的Java平臺,而這只是僅僅是安裝和配置一個軟件而已
4、Jre和Jdk的區別?
JRE:(Java Runtime Environment),java運行環境。包括Java虛擬機(JVM Java Virtual Machine)和Java程序所需的核心類庫等,如果想要運行一個開發好的Java程序,計算機中只需要安裝JRE 即可。
JDK:(Java Development Kit Java)開發工具包。JDK是提供給Java開發人員使用的,其中包含了java的開發工具,也包括了JRE。所以安裝了JDK,就不用在單獨安裝JRE了。
其中的開發工具:編譯工具(javac.exe) 打包工具(jar.exe)等
簡單而言:使用JDK開發完成的java程序,交給JRE去運行。
我的總結:必須熟練的記憶,核心類庫,開發工具!
5、java虛擬機JVM
1.Java Virtual Machine ,簡稱JVM;
2.Java虛擬機屏蔽了與具體操作系統平臺相關的信息,使得Java程序只需生成在Java虛擬機上運行的目標代碼(字節碼),就可以在多種平臺上不加修改地運行
3.它是運行所有Java程序的抽象計算機,是Java語言的運行環境,它是Java 最具吸引力的特性之一,JVM讀取並處理編譯過的與平臺無關的字節碼(class)文件。
4.Java編譯器針對JVM產生class文件,因此是獨立於平臺的。
5.Java解釋器負責將JVM的代碼在特定的平臺上運行。
6.Java虛擬機是不跨平臺的.
6、Java程序運行機制
編譯: javac 文件名.文件後綴名
運行: java 類名
我的總結:Java程序的組成:Java源文件,字節碼文件。
7、學習java註意的地方
Java語言拼寫上嚴格區分大小寫;
一個Java源文件裏可以定義多個Java類,但其中最多只能有一個類被定義成public類;
若源文件中包括了public類,源文件必須和該public類同名;
一個源文件中包含N個Java類時,編譯後會生成N份字節碼文件,即每個類都會生成一份單獨的class文件,且字節碼文件名和其對應的類名相同;
我的總結:一個Java源文件只定義一個類,不同的類使用不同的源文件定義;
將每個源文件中單獨定義的類都定義成public的;
保持Java源文件的主文件名與源文件中的類名一致;
8、Java語法格式
任何一種語言都有自己的語法規則,Java也一樣,既然是規則,那麽知道其如何使用就可以了。
代碼都定義在類中,類由class來定義,區分 public class 和 class;
代碼嚴格區分大小寫,如main 和 Main 是不一樣的;
Java中的標識符與關鍵字;
註釋;
main方法的作用:
程序的入口
保證程序的獨立運行
被JVM調用
9、代碼註釋:單行//,多行/* */,文檔註釋/** */
1.單行註釋 //:
//後到本行結束的所有字符會被編譯器忽略;
2.多行註釋 /* */:
/* */之間的所有字符會被編譯器忽略
3.文檔註釋 /** */:
在/** */之間的所有字符會被編譯器忽略,java特有的(用於生成文檔);
/** 一個類註釋 */
public class docTest {
/** 一個變量註釋 */
public int i;
/** 一個方法註釋 */
public void f() {}
}
我的總結:多行和文檔註釋都不能嵌套使用。
10、Java中的標識符
可簡單理解為在Java程序中為了增強閱讀性自定義的名稱。比如:類名,方法名,變量名等。
命名規則:
(1) 由字母、數字、下劃線、$組成,不能以數字開頭
註意:此處的字母還可以是中文,日文等;
(2) 大小寫敏感
(3) 不得使用java中的關鍵字和保留字
(4) 別用Java API裏面的類名作為自己的類名。
11、java中的常量和變量
變量的概念:
占據著內存中的某一個存儲區域;
該區域有自己的名稱(變量名)和類型(數據類型);
該區域的數據可以在同一類型範圍內不斷變化;
為什麽要定義變量:
用來不斷的存放同一類型的常量,並可以重復使用;
使用變量註意:
變量的作用範圍, 初始化值
定義變量的格式:
數據類型 變量名 = 初始化值;
註:格式是固定的,記住格式,以不變應萬變。
作用範圍:定義開始到定義它的代碼塊結束;
同一範圍內,不允許多個個局部變量命名沖突
12、Java成員變量和局部變量
局部變量:不是聲明在類體括號裏面的變量;
局部變量使用前必須初始化值;
局部變量沒有默認初始化值;
局部變量的作用域是從定義開始到定義它的代碼塊結束;
成員變量:在方法體外,類體內聲明的變量,又稱字段(Field)或全局變量;(其實Java中沒有全局變量,由於Java是面向對象語言,所有變量都是類成員)
成員變量的作用域是整個類中;
我的總結:註意成員變量和局部變量的區別
package reviewDemo;
public class Demo2 {
public static void main(String[] args) {
int i;
System.out.println(i);
}
}
備註:局部變量調用前沒有初始化,所以編譯的時候就會報錯!
package reviewDemo;
public class Demo2 {
static int i;
public static void main(String[] args) {
System.out.println(i);
}
}
備註:此時i為全局變量,未初始化會被賦予默認的初始化值!程序正確!
我的總結:
局部變量是定義在方法中的變量,,,出了該方法就不能訪問該變量了....
成員變量是在類中定義,,,,並且在類的成員方法中都能訪問的變量..
13、基本數據類型
在數據類型中,最常用也是最基礎的數據類型,被稱作基本數據類型。可以使用這些類型的值來代表一些簡單的狀態。
Java 語言的基本數據類型總共有以下8 種,下面是按照用途劃分出的4 個類別
定點類型:
整數型是一類代表整數值的類型。當需要代表一個整數的值時,可以根據需要從4 種類型中挑選合適的,如果沒有特殊要求的話,一般選擇int 類型。4 種整數型區別主要在每個數據在內存中占用的空間大小和代表的數值的範圍。
浮點類型:
小數型是一類代表小數值的類型。當需要代表一個小數的值時,可以根據需要從以下2 種類型中挑選合適的。如果沒有特殊要求,一般選擇double類型。
由於小數的存儲方式和整數不同,所以小數都有一定的精度,所以在計算機中運算時不夠精確。根據精度和存儲區間的不同,設計了兩種小數類型。
字符型:
字符型代表特定的某個字符,按照前面介紹的知識,計算機中都是以字符集的形式來保存字符的,所以字符型的值實際只是字符集中的編號,而不是實際代表的字符,由計算機完成從編號轉換成對應字符的工作。Java 語言中為了更加方便國際化,使用Unicode 字符集作為默認的字符集,該字符集包含各種語言中常見的字符。在程序代碼中,字符使用一對單引號加上需要表達的字符來標識,例
如’A’、’a’等,當然也可以直接使用字符編碼,也就是一個非負整數進行表示。
布爾型:
布爾型代表邏輯中的成立和不成立。Java 語言中使用關鍵字true 代表成立,false 代表不成立。布爾型是存儲邏輯值的類型,其實很多程序中都有邏輯值的概念,Java 把邏輯的值用布爾型來進行表達。
14、基本數據類型轉換之向上轉型和向下轉換
向上轉換:
整型,字符型,浮點型的數據在混合運算中相互轉換,轉換時遵循以下原則:
容量小的類型可自動轉換為容量大的數據類型;
byte,short,char → int → long → float → double
byte,short,char之間不會相互轉換,他們在計算時首先會轉換為int類型。
boolean 類型是不可以轉換為其他基本數據類型。
Eg:
int i = 123;
long l = i; //自動轉換,不需強轉
float f = 3.14F;
double d = f;
向下轉換:
整型,字符型,浮點型的數據在混合運算中相互轉換,轉換時遵循以下原則:
容量小的類型可自動轉換為容量大的數據類型;
byte,short,char → int → long → float → double
byte,short,char之間不會相互轉換,他們在計算時首先會轉換為int類型。
boolean 類型是不可以轉換為其他基本數據類型。
Eg:
long l = 123L;
int i = (int) l;//必須強轉
double d = 3.14;
float f = (float) d;
我的總結:類型轉化
小轉大,自動!自動類型轉換(也叫隱式類型轉換)
大轉小,強轉!強制類型轉換(也叫顯式類型轉換)
15、Java的運算符
運算符是一種特殊符號,用以表示數據的運算、賦值和比較等共分以下幾種:
算術運算符(+ 、— 、* 、/ 、%)
賦值運算符(= 、+=、-=、*=、/=,、%=)
關系運算符(>、>=、<、<=、!=)
條件運算符(&&、||、!&、|、^)
位運算符(&、|、^、~、>>、<<、<<<、>>>)
我的總結:
邏輯運算符用於連接布爾型表達式,在Java中不可以寫成3<x<6,應該寫成x>3 & x<6 。
“&”和“&&”的區別:單與時,左邊無論真假,右邊都進行運算;雙與時,如果左邊為真,右邊參與運算,如果左邊為假,那麽右邊不參與運算。
“|”和“||”的區別同理,雙或時,左邊為真,右邊不參與運算。
“ ^ ”與“|”不同之處是:當左右都為true時,"^"結果為false。
16、表達式和三目運算符
是由數字、運算符、數字分組符號(括號)等以能求得數值的有意義排列的序列;
a + b
3.14 + a
(x + y) * z + 100
boolean b= i < 10 && (i%10 != 0)
表達式的類型和值:
對表達式中操作數進行運算得到的結果是表達式的值。
表達式值的數據類型即為表達式的類型。
表達式的運算順序
應按照運算符的優先級從高到低的順序進行;
優先級相同的運算符按照事先約定的結合方向進行;
“三目運算符”,語法格式:
x ? y : z;
其中x為boolean類型表達式,先計算x的值,若為true,則整個三目運算符的結果是表達式y的值,否則就是z的值。
package reviewDemo;
public class Demo2 {
public static void main(String[] args) {
String s = "lz";
s = (s == "lz" ? "正確" : "錯誤");
System.out.println(s);
}
}
輸出:正確
17、程序流程控制
順序結構
分支結構(條件結構)
循環結構
控制循環結構
順序結構:
如果代碼裏沒有流程控制,程序是至上而下一行一行執行的,一條語句執行完之後繼續執行下一條語句,直到程序的最後。
if語句:
基本語法:if(表達式){方法體}else if(表達式){方法體}else(方法體)
幾種形式:
三種格式:
if(條件表達式){執行語句;}
if(條件表達式){執行語句;}else{執行語句;}
if(條件表達式){執行語句;}else if (條件表達式){執行語句;}……else{執行語句;}
public class If3
{
public static void main(String args[])
{
int i = 3;
if (i > 5)
{
System.out.println("變量i大於5");
}
else if (i > 4)
{
System.out.println("變量i小於4");
}
else
{
System.out.println("其他");
}
}
}
switch控制語句
格式:
switch(表達式)
{
case 表達式可能的結果值1:
執行語句;
break;
case 表達式可能的結果值2:
執行語句;
break;
...
default:
執行語句;
break;//最後這個一般不寫
}
備註:
case之間與default沒有順序。先執行第一個case,都沒有匹配的case值執行default。
結束switch語句的兩種情況:遇到break,switch語句執行結束。
如果匹配的case或者default沒有對應的break,那麽程序會從第一次匹配的case語句開始繼續向下執行,運行可以執行的語句,直到遇到break或者switch結束為止。
class switch2
{
public static void main(String[] args)
{
int a = 7,b = 5;
switch(a-b)
{
case 3://表達式可能的值;
{
System.out.println("33!");
}
break;
case 4:
{
System.out.println("44!");
}
break;
default://都沒有執行則 執行該語句!
System.out.println("其它的");
}
}
}
18、三大循環結構:
用於處理需要重復執行的操作;
根據判斷條件的成立與否,決定程序段落的執行次數,而這個程序段落我們稱為循環體;
while:事先不需要知道循環執行多少次;
do while:同上,只是至少要執行一次(先做,後判斷);
for:需要知道循環次數;
循環結構(while & do while)
while語句
格式:
while(條件表達式值為true)
{
執行語句;
}
do while語句
格式:
do
{
執行語句;
}
while(條件表達式值為true);
我的總結:do while特點是無論條件是否滿足,循環體至少被執行一次。
循環裏的條件表達式不能直接寫false或直接寫結果是false的表達式,不過可以使用變量來傳遞false值;
循環結構(for)
格式:
for(初始化表達式(1);循環條件表達式(2);循環後的操作表達式(3))
{
執行語句;(4)
}
執行順序:(1) → (2) → (4) → (3) → (2) → (4) → (3)
備註:
1, for裏面的3個表達式運行的順序,初始化表達式只讀一次,判斷循環條件,為真就執行循環體,然後再執行循環後的操作表達式,接著繼續判斷循環條件,重復找個過程,直到條件不滿足為止。
2, while與for可以互換,區別在於for為了循環而定義的變量在for循環結束就在內存中釋放。而while循環使用的變量在循環結束後還可以繼續使用。
3, 最簡單無限循環格式:while(true) , for(;;),無限循環存在的原因是並不知道循環多少次,而是根據某些條件,來控制循環。
Eg:
用三種循環控制求出100以內前5個3的倍數的數字;
class while
{
public static void main(String[] args)
{
int i = 1,k = 0;
while(i<=100)
{
if(i%3==0)
{
if(k<5)
System.out.println(i);
k++;
}
i++;
}
}
}
class dowhile
{
public static void main(String[] args)
{
int i = 1,k = 0;
do{
if(i%3==0)
{
if(k<5)
System.out.println(i);
k++;
}
i++;
}
while(i<=100);
}
}
class for
{
public static void main(String[] args)
{
int i = 1,k = 0;
for(;i<100;i++)
{
if(i%3==0&&k<5)
{
System.out.println(i);
k++;
}
}
}
}
19、嵌套循環與流程控制
嵌套循環:循環裏套循環
假設外循環的循環次數是m次,內循環的循環次數是n次,那麽內層循環的循環次數需要 m * n次。
Eg:利用for循環語句的嵌套打印出乘法口訣表
class break1
{
public static void main(String[] args)
{
for(int i=1;i<=10;i++)//定義i與j的值必須在for循環裏面,否則每次跳出循環重新執行就無法取值
{
for(int j=1;j<=10;j++)
{
if(j<=i)
System.out.print(j+"*"+i+"="+i*j+" ");//小註意:print()括號裏面
必須傳遞參數,println()無限制!
}
System.out.println();
}
}
}
流程控制
break語句、 continue語句;
break:終止該層循環;
continue:跳過該層循環
註:
①:若這兩個語句離開應用範圍,存在是沒有意義的。
②:這個兩個語句後面都不能有語句,因為執行不到。
③:continue語句是跳過本次循環,繼續下次循環。
④:標簽的出現,可以讓這兩個語句作用於指定的循環。
Eg:
package reviewDemo;
public class Demo2 {
public static void main(String[] args) {
int i = 1;
for (; i < 10; i++) {
System.out.println(i);
if(i == 8){
break;//流程控制,不會完全執行!
}
}
}
}
Java基礎之——Java概述與基礎知識