Java學習_基礎入門篇知識問題整理

  1. java的核心優勢:
    跨平臺,由於提供不同系統的jvm可以讓javaapp通過jvm面對不同的操作系統
  2. java各個版本的含義:
    javaSE:JAVA STANDARD Edition:標準版:定位個人計算機,java平臺的核心,提供豐富的API包含AWT及Swing,此外Applet被FLASH、HTML5取代;必學
    javaEE:JAVA ENTERPRISE EDITION: 企業版,定位服務器,SE的擴展,增加用於服務器開發的類庫。如JDBC、Servlet、Request-Response、JSP
    JAVEME:JAVE MICRO EDITION: 微型版,定位消費電子產品,含J2SE一部分核心類,SE的內伸。被Android取代
  3. java的特性和優勢:
    ①跨平臺/可移植性:如int永遠32位
    ②安全性:爲網絡/分佈式環境構建了防病毒,防篡改的系統
    ③面向對象:比C++(兼容C)更徹底,完全面向對象。
    ④簡單性:C+±,去除頭文件,指針運算,結構,聯合,操作符重載,虛基類,基於C易學習
    ⑤高性能:初期性能低,後期優化jvm加入JIT(即時編譯技術),通過編譯本地化“熱點”代碼,並緩存起來,提高編譯效率。
    ⑥分佈式:爲Internet分佈式環境設計,可處理TCP/IP協議,可通過URL訪問網絡資源和訪問本地文件相似,支持遠程方法調用(RMI,Remote Method Invocation),使程序可通過網絡方法調用。
    ⑦多線程:帶來更好的交互和實時行爲。也是成爲主流服務端開發語言原因之一。
    ⑧健壯性:去除指針,內存申請和釋放等。自帶GC;出色的異常機制避免了計算機崩潰和程序崩潰。
  4. java的運行機制:
    源文件.java,通過jdk編譯器編譯成.class文件,通過JRE的類裝載器,字節碼校驗器,解釋器以及JIT進行解釋執行,系統運行app
  5. JVM、JRE、JDK區別
    JVM:java virtual machine:虛擬機,執行bytecode字節碼的虛擬計算機,定義了:指令集,寄存器集,結構棧,垃圾收集堆,內存區域。負責將java字節碼解釋運行,解釋邊運行。
    JRE:java runtime environment:含JVM、庫函數、運行java程序必須的文件(只運行javaapp只需要jre)
    JDK:java development kit:含JRE,以及增加編譯器和調試器等用於程序開發的文件(開發必備);
    JDK(javac,jar,debugging,tools,javap)》JRE(Java,javaw,libraries,rt,jar)》JVM(JIT)
  6. 標識符的概念及規則、規範:
    概念:用於命名:變量、類、方法名
    規則:用字母、數字、下劃線_、開頭 由字母、數字、下劃線、、數字組成
    大小寫敏感,無長度限制
    不可以爲關鍵字;
    規範:類名:每個單詞首字母大寫
    方法名、變量:第一個單詞首字母小寫,其餘單詞首字母大寫,“駝峯原則”
  7. 變量的本質:
    是可操作的連續空間,空間位置確定,內容不定,可通過變量名訪問“存儲空間”,並進行操作。
    包含:變量名,變量類型,作用域;先聲明分配相應長度存儲空間,[初始化]後使用;
  8. 變量類型:
    基本類型,引用類型
  9. 變量分類:
    局部變量local variable:聲明在語句塊活方法內,從屬方法或語句塊,週期跟隨方法活語句塊,必須初始化使用;
    成員變量member variable(實例變量):聲明於類內部方法外部,叢書對象,週期跟隨對象,可默認初始化,
    靜態變量static variable(類變量):聲明於類內部,static修飾,從屬類,週期跟隨類加載、卸載、消失,可被更改,所有類對象公用一個。
  10. 常量定義,分類:
    定義:固定的值,(符號常量)用final修飾,一旦初始化不能修改,(靜態變量通行不可更改,故而用加上final變成靜態常量且需要手動初始化)
    分類:字面常量:1,2,true,’b’,”hello”
    符號常量:用final修飾定義。final double PI = 3.14;
  11. 變量和常量命名規範:
    所有變量、方法、類名:見名知意
    類成員變量:首字母小寫,駝峯原則
    局部變量:首字母小寫駝峯原則
    常量:大寫字母和下劃線組合:MAX_VALUE
    類名:首字母大寫和駝峯原則:GoodMan
    方法名:首字母小寫和駝峯原則
  12. 數據類型分類,詳細分類
    基本數據類型(primitive data type):
    數值型:
    整數類型:byte 1byte,short 2byte,int 4byte,long 8byte
    浮點類型:float 4byte,double 8byte
    字符型:char 2byte
    布爾型:boolean 1bit
    引用數據類型(reference data type):(記錄的是對象的地址)
    類:class 4byte
    接口:interface 4byte
    數組:array[] 4byte
  13. 整數變量各個類型的範圍,表現形式:
    byte 1byte -128-127 (二進制8位,正負各分一半)
    short 2byte -32768-32767
    int 4byte -21億-21億
    long 8byte -263-263-1
  14. 整數常量的四種進制表現形式:
    十進制:99,
    八進制:0開頭
    十六進制:0X或0x開頭
    二進制:0b或0B開頭
  15. Java 默認整數(字面)常數類型:
    int ,如果聲明long型字面常量可後加L或l(不加可能導致超過int範圍,沒出錯是在範圍內的自動轉型)
  16. 浮點變量的各個類型和範圍
    float 4byte -3.4E38-3.4E38
    double 8byte -3.4E308-3.4E308
    float可精確7位尾數,單常用的是double,精度是float的兩倍,
  17. 浮點字面常量的默認類型:
    double
  18. 浮點型字面常量的各進制表現形式:
    十進制:3.14
    科學計數法:314e2,314E-2
    float的字面數值後要加F或f,沒有的默認爲double類型,可在double後加D或d
  19. 精確的無誤差數字計算使用的類:
    java.math.BigDecimal類用於浮點運算,常用於金融領域。
    java.math.BigInteger類常用於整數運算。
  20. 浮點數比較方式:
    通過BigDecimal;
  21. BigDecimal的常用方法:
    BigDecimal.valueOf(double):用於獲取精確的浮點值
    subtract(BigDecimal):用於減法。
    multiply(BigDecimal):乘法
    add(BigDecimal):加法
    divide(BigDecimal):除法
    abs(BigDecimal):絕對值
    compareTo(BigDecimal):比較,等爲0,大爲1,小爲-1
    在這裏插入圖片描述
  22. ‘A’ == “A”的結果,爲什麼?
    結果是不能比較,編譯出錯;一個是字符一個是字符串。
  23. char使用的字符集,佔空間大小,範圍
    Unicode編碼表中的字符,佔2字節,允許0-65536個字符;編碼從‘\u000’到‘\uFFFF’
    u表示Unicode,後加四位16進制。注意‘One’是錯的,他是無效字符
  24. char字面常量的表現形式
    char可以用16進制方式也可以直接用字符來表示。
  25. char常用的轉義字符\搭配
    \b退格 \u0008
    \n換行 \u000a
    \r回車 \u000d
    \t製表符tab \u0009
    \”雙引號 \u0022
    \’單引號 \u0027
    \反斜槓 \u005c
  26. String的本質:
    字符序列:char sequence
  27. boolean常量值true/false在內存中佔空間?
    1位
  28. 運算符的分類:8種
    算數運算符(一元,二元)
    賦值運算符
    擴展運算符
    關係運算符(除去大小等等,還有instanceof用於實例相同比較)
    邏輯運算符
    位運算符
    條件運算符
    字符串連接符
  29. %的作用:
    取模,取餘數
  30. 二元運算符的運算規則:
    整數運算:
    兩個整數字面量爲操作數,存在一個爲Long,結果也爲Long
    沒有Long時,都爲int,無論操作數是byte和short
    浮點運算:
    有double,結果爲double
    兩個都爲float則結果爲float。
    取模運算:
    操作數可爲浮點數,一般用整數,結果爲“餘數”,符號與左邊操作數相同。
  31. 一元運算符運算規則:“++/–”自增運算符
    i++:先用後自增
    ++i:後用後自增
    看自增運算符是先是後,在前就先自增。
  32. 關係運算符的操作數類型,結果類型
    =不是關係運算符;
    ==,!= 是所有(基本和引用)數據類型都可以使用;當爲引用(如String)時比對的是引用地址。
    '>、>=、<、<='僅針對數值類型(byte/short/int/long,float/double,char)
  33. 邏輯運算符的操作數類型,運算結果類型,&和&&,|和||的區別,邏輯異或^的判斷方式:
    操作數和結果類型:boolean值。
    &&是短路與,一旦左邊第一個條件爲false則直接返回false,&則需要判斷所有操作數,此外&的操作數爲非boolean時則是位運算與。
    ||是短路與,一旦左邊第一個條件爲true則直接返回true,|則需要判斷所有操作數,此外|的操作數爲非boolean時則是位運算非
    短路常用於空指針的預防。
    ^:兩個操作數相相爲false,不同爲true;此外|的操作數爲非boolean時則是位運算異或
  34. '3<<2’的值,'12>>3’的值,~3的值:
    3爲0b10100b0101:結果爲4
    ‘322’,2爲3的二進制左移兩位,結果爲12
    ‘12/2/2/2’,3爲12的2進制有右移動3位置.結果爲1,同理,'12>>4’結果爲0
  35. 字符串連接符“+”規則:
    只要兩個操作數中有一個時String類型,則系統將會將另一個操作數自動轉換爲字符串然後拼接。
  36. 運算符優先級:
    一般邏輯非》邏輯與》邏輯或
    A||B&&C的實際運算爲:A||(B&&C)
  37. 數據類型的自動轉換:
    在這裏插入圖片描述
    在這裏插入圖片描述
    注意字面常量數的範圍,如果爲默認時別超過int的範圍21億
  38. 強制類型轉換的概念:
    又稱造型(由大到小):用於顯示轉換一個數值的類型,可能會出現丟失信息,可能造成精度降低或溢出。
    (type)var
    當出現目標type的範圍時,會被截斷成不同的值(一般是範圍內的循環)
    不可以在布爾類型和任何數值類型之間做強制轉換。
  39. Java的鍵盤輸入常用類及方法:
Scanner   scanner =  new Scanner(System.in);
String   name =  scanner.nextLine();
int   age = scanner.nextInt();
  1. 流程控制語句的分類:
    順序結構,選擇結構,循環結構
  2. 程序的本質:
    變量,選擇語句,循環語句
  3. 算法的基本構成:
    變量,選擇結構,順序結構,循環結構共同支撐了算法的基本結構
  4. 選擇結構的分類:
    If選擇結構:if單選擇結構,if-else雙選擇結構,if-else if-else多選擇結構
    Switch選擇結構。
  5. 獲取0-1之間的隨機數,
    Java.lang.Math.ramdom();可以生成[0,1)之間的隨機數。
  6. If單分支如果不寫{}後續代碼的執行效果:
    會執行後面的第一條語句。
  7. If-else有時候可以通過那種方式替換:
    1>2?”假的”:”真的”;條件運算符。
  8. If-else if-else多選擇結構的執行順序,以及編寫建議:
    執行順序:從上到下,遇真進入執行並返回
    編寫建議:後續分支的條件不要和先序條件有交集。逐層遞進,需要理清先後順序。
  9. switch多選擇結構的語法,執行原理:
switch (表達式) {
case 值1: 
語句序列1;
[break];
case 值2:
 語句序列2;
[break];
     … … …      … …
[default:
 默認語句;]
}

根據表達式的值,從相匹配的case標籤處開始執行,一直執行到break語句處,或是語句末尾。如果一直不匹配,則進入default(當default存在時)
50. switch中表達式的可用類型:
jdk1.5前:必須是整數,long除外;或者是枚舉,不可以爲字符串
jdk1.7之後:可以爲String
當前表達式可以爲:byte,short,int,char,枚舉;Stirng(1.7以上)
51. if多分枝和switch多分枝的使用區分:
任何switch多分枝可以通過if多分枝替換;
表區間判斷的時候,只能夠用if多分枝;
當是對明確值做等值判斷時建議使用switch分支,明確。
52. 循環結構的分類:
當型:當布爾表達式條件爲true時,反覆執行某語句塊,當表達式爲false時才停止循環。While/for
直到型:先執行某語句,再判斷布爾表達式。如果爲true,再次執行。反覆,直到布爾表達式爲false停止。Do-while
53. While循環的使用注意點:
循環開始即判斷布爾表達式。先執行先判斷
語句中應該有是循環趨向結束的語句,否則陷入死循環。
54. do-while循環的使用注意點:
先執行一次語句,再判斷布爾表達式。後執行後判斷
語句中應該有是循環趨向結束的語句,否則陷入死循環。
55. for循環的語法,語句執行順序:
for(初始表達式;布爾表達式;迭代因子){
循環體;
}
A. 初始化部分設置循環變量的初值
B. 條件判斷部分爲任意布爾表達式
C. 循環語句(可能跳過)
D. 迭代因子控制循環變量的增減
B.。。。。。
56. for循環和while,dowhile的區別:
for循環:支持迭代的通用結構,有效靈活,第一次反覆之前,需要執行初始化,再進行布爾表達式的判斷;之後執行語句;執行完之後,會執行迭代因子的步進;(先初始化,再判斷,後執行,最後迭代)
while:不支持迭代,手動迭代,先判斷後執行;
do-while:不支持迭代,手動迭代,先執行後判斷。
57. java中逗號分隔符常用於何處:
多個變量聲明;for循環初始表達式;布爾表達式;迭代因子的多個分割;多個接口實現;形式參數和實際參數列表分割
58. for循環的循環部分是否可以爲空:
可以,但是要用兩個分號分隔,表示進入死循環
59. 雙層for循環的嵌套方式理解:
外層控制行數,內層控制列數
60. Continue和break的區別
Break:用於控制循環的流程,強行退出循環,不執行循環中剩餘的語句;此外,switch多分枝語句中break用於中斷分支。不在進行下面的語句
Continue:用於終止某次循環過程,跳過該次循環中的剩餘語句,開啓下一次循環,for語句中還需要執行迭代因子的步進,在while和dowhile中直接跳回到循環首部。
61. 帶標籤的break和continue的用法:
由於goto是java的保留字,當前要跳出多層循環需要使用帶標籤的break和continue
用法:
(只有)在循環語句前,加上 “標籤名:”形式聲明跳出位置;在循環中通過使用:braek 標籤名或者continue 標籤名的形式做跳出。
62. 語句塊的定義,嵌套的語句塊中能聲明相同名稱的變量嗎:
又稱複合語句,用{}擴起來的任意數量的簡單java語句,決定了局部變量的作用域,塊中的程序代碼作爲整體被執行。且塊可以嵌套。
不能。
63. 方法的定義:
用來完成特定功能的代碼片段;
用於定義類及類對象的行爲特徵和功能實現。
方法是類和對象行爲特徵的抽象。
類是java程序的基本單位,方法從屬於類和對象。
64. 方法的調用方式:
對象名.方法名(實參列表);這裏的對象名實際是實例引用地址
靜態方也法可以直接通過類名調用。非靜態方法必須通過實例調用,常見的看到的類內部的沒有加對象是因爲默認有this指針表示當前創建的對象。
65. 方法使用的注意事項:
實參數目、數據類型、次序必須和方法聲明的形式參數一致。
Return語句終止犯法的運行並返回需要類型的數據。無返回值時要用void做返回類型。
Java中方法調用傳參,遵循值傳遞(傳遞的都是數據的副本,引用類型數據是地址的副本)
基本類型傳遞的是該數據值的copy值
引用類型傳遞的是該對象應用的copy值,但指向的是同一個對象。
在這裏插入圖片描述
66. 方法的重載:overload定義:
指一個類中可以定義多方法名相同,但參數不同的方法。調用時,根據不同的參數自動匹配對應的方法。
67. 構成方法重載的條件:
重載的方法,實際是完全不同的方法,只是名稱不一樣而已!
不同:形式參數類型,形式參數個數,形式參數順序
只有返回值不同,不構成方法的重載,會報異常。(不提供根據返回值判斷依據)
只有形式參數的名稱不同,不構成方法的重載。(無意義)
在這裏插入圖片描述
注意自動轉換類型。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
68. 調用方法,涉及到重載時的匹配方式:
通過調用方法的實際參數的類型,先經行原類型匹配,如果沒有,則遵循自動轉換類型規則進行匹配,且遵循少跨級原則。如果沒有則爲異常。
在這裏插入圖片描述
69. 遞歸算法的基本思想,內容組成:
自己調用自己
70. 定義遞歸頭:告訴什麼時候不再調用方法自身。如果沒有盡頭則會陷入死循環。
71. 定義遞歸體:用於實際需要遞歸處理的具體處理方法,業務處理語句,同時展現進行遞歸調用。
求n!;

public class TestRecursion{
		public static void main(String[] args){
				long n = 100;
				System.out.printf("%d階乘的結果:%s%n", n, factorial(n))
		}
		static long factorial(long n){
			if(n==1){//遞歸頭(盡頭)
				return n;
			}else{
					return n*factorial(n-1);//遞歸體  //實際就是  n * (n-1) 這裏的n-1就是//需要通過遞歸求取的  
			)
}
}

調用原理:
在這裏插入圖片描述
72. 遞歸的優缺點:
有點:程序簡單易懂,易於理解和調試,不強調效率時,用遞歸。
缺點:(耗時耗內存)大量佔用系統堆棧;內存消耗多;當調用層次多時,速度明顯慢於循環。此外任何用遞歸解決的問題,使用循環迭代都能解決。當性能要求高時,用循環。

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