最稳的pk10计划iphone 北京pk10计划手机软件 北京pk10数字的规律 超神手机版pk10软件 pk10北京赛车9码技巧 pk10四期倍投计划表 pk10极速赛车论坛 北京赛车冠军怎样选5码 北京赛车系统下载安装 pk10教程视频 北京pk10选号公式 北京赛车pk10赚钱技巧 北京赛车怎么提升概率 pk10技巧北京快三 北京pk10大小计划
VB.net 2010 視頻教程 VB.net 2010 視頻教程 python基礎視頻教程
SQL Server 2008 視頻教程 c#入門經典教程 Visual Basic從門到精通視頻教程
當前位置:
首頁 > 編程開發 > Java教程 >
  • java教程之javaSE面試題總結

  • 2019-06-10 22:05 來源:未知
第一章 初識Java
Java跨平臺原理(字節碼文件、虛擬機)
  1. C/C++語言都直接編譯成針對特定平臺機器碼。如果要跨平臺,需要使用相應的編譯器重新編譯。
  2. Java源程序(.java)要先編譯成與平臺無關的字節碼文件(.class),然后字節碼文件再解釋成機器碼運行。解釋是通過Java虛擬機來執行的。
  3. 字節碼文件不面向任何具體平臺,只面向虛擬機。
  4. Java虛擬機是可運行Java字節碼文件的虛擬計算機。不同平臺的虛擬機是不同的,但它們都提供了相同的接口。
  5. Java語言具有一次編譯,到處運行的特點。就是說編譯后的.class可以跨平臺運行,前提是該平臺具有相應的Java虛擬機。但是性能比C/C++要低。
  6. Java的跨平臺原理決定了其性能沒有C/C++高
Java的安全性
語言層次的安全性主要體現在:
  1. Java取消了強大但又危險的指針,而代之以引用。由于指針可進行移動運算,指針可隨便指向一個內存區域,而不管這個區域是否可用,這樣做是危險的,因為原來這個內存地址可能存儲著重要數據或者是其他程序運行所占用的,并且使用指針也容易數組越界。
  2. 垃圾回收機制:不需要程序員直接控制內存回收,由垃圾回收器在后臺自動回收不再使用的內存。避免程序忘記及時回收,導致內存泄露。避免程序錯誤回收程序核心類庫的內存,導致系統崩潰。
  3. 異常處理機制:Java異常機制主要依賴于try、catch、finally、throw、throws五個關鍵字。
  4. 強制類型轉換:只有在滿足強制轉換規則的情況下才能強轉成功。
底層的安全性可以從以下方面來說明
Java在字節碼的傳輸過程中使用了公開密鑰加密機制(PKC)。
在運行環境提供了四級安全性保障機制:
字節碼校驗器 -類裝載器 -運行時內存布局 -文件訪問限制
 
 
Java三大版本
Java2平臺包括標準版(J2SE)、企業版(J2EE)和微縮版(J2ME)三個版本:
Standard Edition(標準版) J2SE 包含那些構成Java語言核心的類。
比如:數據庫連接、接口定義、輸入/輸出、網絡編程
Enterprise Edition(企業版) J2EE 包含J2SE 中的類,并且還包含用于開發企業級應用的類。
比如:EJB、servlet、JSP、XML、事務控制
Micro Edition(微縮版) J2ME 包含J2SE中一部分類,用于消費類電子產品的軟件開發。
比如:呼機、智能卡、手機、PDA、機頂盒
他們的范圍是:J2SE包含于J2EE中,J2ME包含了J2SE的核心類,但新添加了一些專有類
應用場合,API的覆蓋范圍各不相同。
Java開發運行過程
在安裝好JDK并配置好path、classpath后開發運行步驟如下:
1、可以用任何文本編輯器創建并編輯Java源程序,Java源程序用“.java”作為文件擴展名
2、編譯Java源程序編譯器,使用命令“javac”編譯“java源程序文件名.java”。最后編譯成Java虛擬機能夠明白的指令集合,且以字節碼的形式保存在文件中。通常,字節碼文件以“.class”作為擴展名。
3、執行java程序,使用“java”命令運行class(字節碼)文件“java文件名”,Java解釋器會讀取字節碼,取出指令并且翻譯成計算機能執行的機器碼,完成運行過程。
Java開發環境配置
具體配置步驟如下:
0)找到自己的jdk安裝路徑,如:C:\Java\jdk1.7.0_60\bin
1)右擊桌面“我的電腦”,選擇“屬性”
2)選中“高級系統設置”-->高級-->環境變量設置
3)在系統變量中找到“path”并選中,點擊“編輯”,
4)變量值欄按鍵盤“home”鍵,輸入英文的“;”
5)將第0)步準備的路徑復制過來就行。點一些列“確定”完成配置
什么是JVM?什么是JDK? 什么是JRE?
  1. JVM :JVM是Java Virtual Machine(Java虛擬機)的縮寫,它是整個java實現跨平臺的最核心的部分,所有的java程序會首先被編譯為.class的類文件,這種類文件可以在虛擬機上執行,也就是說class并不直接與機器的操作系統相對應,而是經過虛擬機間接與操作系統交互,由虛擬機將程序解釋給本地系統執行。JVM是Java平臺的基礎,和實際的機器一樣,它也有自己的指令集,并且在運行時操作不同的內存區域。 JVM通過抽象操作系統和CPU結構,提供了一種與平臺無關的代碼執行方法,即與特殊的實現方法、主機硬件、主機操作系統無關。JVM的主要工作是解釋自己的指令集(即字節碼)到CPU的指令集或對應的系統調用,保護用戶免被惡意程序騷擾。 JVM對上層的Java源文件是不關心的,它關注的只是由源文件生成的類文件(.class文件)。
  2. JRE:JRE是java runtime environment(java運行環境)的縮寫。光有JVM還不能讓class文件執行,因為在解釋class的時候JVM需要調用解釋所需要的類庫lib。在JDK的安裝目錄里你可以找到jre目錄,里面有兩個文件夾bin和lib,在這里可以認為bin里的就是jvm,lib中則是jvm工作所需要的類庫,而jvm和lib和起來就稱為jre。所以,在你寫完java程序編譯成.class之后,你可以把這個.class文件和jre一起打包發給朋友,這樣你的朋友就可以運行你寫程序了(jre里有運行.class的java.exe)。JRE是Sun公司發布的一個更大的系統,它里面就有一個JVM。JRE就與具體的CPU結構和操作系統有關,是運行Java程序必不可少的(除非用其他一些編譯環境編譯成.exe可執行文件……),JRE的地位就象一臺PC機一樣,我們寫好的Win32應用程序需要操作系統幫我們運行,同樣的,我們編寫的Java程序也必須要JRE才能運行。 
  3. JDK:JDK是java development kit(java開發工具包)的縮寫。每個學java的人都會先在機器上裝一個JDK,那 讓我們看一下JDK的安裝目錄。在目錄下面有六個文件夾、一個src類庫源碼壓縮包、和其他幾個聲明文件。其中,真正在運行java時起作用的是以下四個文件夾:bin、include、lib、jre。現在我們可以看出這樣一個關系,JDK包含JRE,而JRE包含JVM。
bin:最主要的是編譯器(javac.exe)
include:java和JVM交互用的頭文件
lib:類庫      
jre:java運行環境 
(注意:這里的bin、lib文件夾和jre里的bin、lib是不同的)總的來說JDK是用于java程序的開發,而jre則是只能運行class而沒有編譯的功能。eclipse、idea等其他IDE有自己的編譯器而不是用JDK bin目錄中自帶的,所以在安裝時你會發現他們只要求你選jre路徑就ok了。
4、JDK,JRE,JVM三者關系概括如下:
jdk是JAVA程序開發時用的開發工具包,其內部也有JRE運行環境JRE。JRE是JAVA程序運行時需要的運行環境,就是說如果你光是運行JAVA程序而不是去搞開發的話,只安裝JRE就能運行已經存在的JAVA程序了。JDk、JRE內部都包含JAVA虛擬機JVM,JAVA虛擬機內部包含許多應用程序的類的解釋器和類加載器等等。
Java三種注釋類型
共有單行注釋、多行注釋、文檔注釋3種注釋類型。使用如下:
  1. 單行注釋,采用“//”方式.只能注釋一行代碼。如://類成員變量
  2. 多行注釋,采用“/*...*/”方式,可注釋多行代碼,其中不允許出現嵌套。如:
/*System.out.println("a");
System.out.println("b");
System.out.println("c");*/
  1. 文檔注釋,采用“/**...*/”方式。如:
/**
* 類 Dog
* @author Administrator
*
*/
public class Dog extends Animal{}
 
數據類型和運算符
8種基本數據類型及其字節數
數據類型
關鍵字
字節數
數值型
整數型
byte
1
   
short
2
   
int
4
   
long
8
 
浮點型
float
4
   
double
8
布爾型
 
boolean
1(位)
字符型
 
char
2
 
i++和++i的異同之處
共同點:
1、i++和++i都是變量自增1,都等價于i=i+1
2、如果i++,++i是一條單獨的語句,兩者沒有任何區別
3、i++和++i的使用僅僅針對變量。 5++和++5會報錯,因為5不是變量。
不同點:
如果i++,++i不是一條單獨的語句,他們就有區別
i++ :先運算后增1。如:
 
int x=5;
int y=x++;
System.out.println("x="+x+", y="+y);
//以上代碼運行后輸出結果為:x=6, y=5
 
++i : 先增1后運算。如:
 
int x=5;
int y=++x;
System.out.println("x="+x+", y="+y);
//以上代碼運行后輸出結果為:x=6, y=6
&和&&的區別和聯系,|和||的區別和聯系
&和&&的聯系(共同點):
&和&&都可以用作邏輯與運算符,但是要看使用時的具體條件來決定。
操作數1&操作數2,操作數1&&操作數2,
表達式1&表達式2,表達式1&&表達式2,
情況1:當上述的操作數是boolean類型變量時,&和&&都可以用作邏輯與運算符。
情況2:當上述的表達式結果是boolean類型變量時,&和&&都可以用作邏輯與運算符。
表示邏輯與(and),當運算符兩邊的表達式的結果或操作數都為true時,整個運算結果才為true,否則,只要有一方為false,結果都為false。
&和&&的區別(不同點):
(1)、&邏輯運算符稱為邏輯與運算符,&&邏輯運算符稱為短路與運算符,也可叫邏輯與運算符。
對于&:無論任何情況,&兩邊的操作數或表達式都會參與計算。
對于&&:當&&左邊的操作數為false或左邊表達式結果為false時,&&右邊的操作數或表達式將不參與計算,此時最終結果都為false。
綜上所述,如果邏輯與運算的第一個操作數是false或第一個表達式的結果為false時,對于第二個操作數或表達式是否進行運算,對最終的結果沒有影響,結果肯定是false。推介平時多使用&&,因為它效率更高些。
  1. 、&還可以用作位運算符。當&兩邊操作數或兩邊表達式的結果不是boolean類型時,&用于按位與運算符的操作。
|和||的區別和聯系與&和&&的區別和聯系類似
用最有效率的方法算出2乘以8等于多少
使用位運算來實現效率最高。位運算符是對操作數以二進制比特位為單位進行操作和運算,操作數和結果都是整型數。對于位運算符“<<”, 是將一個數左移n位,就相當于乘以了2的n次方,那么,一個數乘以8只要將其左移3位即可,位運算cpu直接支持的,效率最高。所以,2乘以8等于幾的最效率的方法是2 << 3。
基本數據類型的類型轉換規則
基本類型轉換分為自動轉換和強制轉換。
自動轉換規則:容量小的數據類型可以自動轉換成容量大的數據類型,也可以說低級自動向高級轉換。這兒的容量指的不是字節數,而是指類型表述的范圍。
強制轉換規則:高級變為低級需要強制轉換。
如何轉換:
(1)、賦值運算符“=”右邊的轉換,先自動轉換成表達式中級別最高的數據類型,再進行運算。
(2)、賦值運算符“=”兩側的轉換,若左邊級別>右邊級別,會自動轉換;若左邊級別 == 右邊級別,不用轉換;若左邊級別 < 右邊級別,需強制轉換。
(3)、可以將整型常量直接賦值給byte, short, char等類型變量,而不需要進行強制類型轉換,前提是不超出其表述范圍,否則必須進行強制轉換。
 
第三章 流程控制
三種流程控制結構
其流程控制方式采用結構化程序設計中規定的三種基本流程結構,即:順序結構、分支結構和循環結構
 
if多分支語句和switch多分支語句的異同之處
相同之處:都是分支語句,多超過一種的情況進行判斷處理。
不同之處:
  1. SWITCH更適合用于多分支情況,就是有很多種情況需要判斷處理,判斷條件類型單一,只有一個入口,在分支執行完后(如果沒有break跳出),不加判斷地執行下去;而if—elseif---else多分枝主要適用于分支較少的分支結構,判斷類型不是單一,只要一個分支被執行后,后邊的分支不再執行。
  2. switch為等值判斷(不允許比如>= <=),而if為等值和區間都可以,if的使用范圍大。
while和do-while循環的區別
while先判斷后執行,第一次判斷為false,循環體一次都不執行
do while先執行 后判斷,最少執行1次。
如果while循環第一次判斷為true, 則兩種循環沒有區別。
break和continue的作用
break: 結束當前循環并退出當前循環體。
break還可以退出switch語句
continue: 循環體中后續的語句不執行,但是循環沒有結束,繼續進行循環條件的判斷(for循環還會i++)。continue只是結束本次循環。
請使用遞歸算法計算n!
public class Test {
public int factorial(int n) {
if (n == 1 || n == 0){
return n;
}else{
return n * factorial(n - 1);
}
}
public static void main(String[] args) {
Test test = new Test();
System.out.println(test.factorial(6));
}
}
遞歸的定義和優缺點
遞歸算法是一種直接或者間接地調用自身算法的過程。在計算機編寫程序中,遞歸算法對解決一大類問題是十分有效的,它往往使算法的描述簡潔而且易于理解。
遞歸算法解決問題的特點:
(1) 遞歸就是在過程或函數里調用自身。
(2) 在使用遞歸策略時,必須有一個明確的遞歸結束條件,稱為遞歸出口。
(3) 遞歸算法解題通常顯得很簡潔,但運行效率較低。所以一般不提倡用遞歸算法設計程序。
(4) 在遞歸調用的過程當中系統為每一層的返回點、局部量等開辟了棧來存儲。遞歸次數過多容易造成棧溢出等。所以一般不提倡用遞歸算法設計程序。
第四章 數
數組的特征
  1. 數組是(相同類型數據)的(有序)(集合)
  2. 數組會在內存中開辟一塊連續的空間,每個空間相當于之前的一個變量,稱為數組的元素element
  3. 元素的表示 數組名[下標或者索引] scores[7] scores[0] scores[9]
  4. 索引從0開始
  5. 每個數組元素有默認值 double 0.0 boolean false int 0
  6. 數組元素有序的,不是大小順序,是索引 的順序
  7. 數組中可以存儲基本數據類型,可以存儲引用數據類型;但是對于一個數組而言,數組的類型是固定的,只能是一個
  8. length:數組的長度
  9. 數組的長度是固定的,一經定義,不能再發生變化(數組的擴容)
請寫出冒泡排序代碼
  1. 冒泡排序算法
public class TestBubbleSort {
public static void sort(int[] a) {
int temp = 0;
// 外層循環,它決定一共走幾趟
for (int i = 0; i <a.length-1; ++i) {
//內層循環,它決定每趟走一次
pk10赛车冠军技巧
最稳的pk10计划iphone 北京pk10计划手机软件 北京pk10数字的规律 超神手机版pk10软件 pk10北京赛车9码技巧 pk10四期倍投计划表 pk10极速赛车论坛 北京赛车冠军怎样选5码 北京赛车系统下载安装 pk10教程视频 北京pk10选号公式 北京赛车pk10赚钱技巧 北京赛车怎么提升概率 pk10技巧北京快三 北京pk10大小计划
辰龙棋牌手游下载 网上唱歌赚钱的软件有哪些 狗币钱包 不能挖矿 建行卡能往工行卡赚钱吗 七星彩赚钱骗局 抖音一百万粉丝怎么赚钱 捕鱼达人3攻略技巧攻略汇总 赚钱企业家贪欲 塑胶贸易 赚钱吗