Java複習,Java知識點以及Java面試題(一)

来源:https://www.cnblogs.com/AICROC/archive/2020/05/31/12928520.html
-Advertisement-
Play Games

J2SE(Java 2 Platform Standard Edition) J2ME(Java 2 Platform Micro Edtion) J2EE(Java 2 Platform Enterprise Edition) Java語言特點:開源 跨平臺(JVM) 面向對象等 JRE與JDK ...


J2SE(Java 2 Platform Standard Edition)

J2ME(Java 2 Platform Micro Edtion)

J2EE(Java 2 Platform Enterprise Edition)

 

Java語言特點:開源 跨平臺(JVM) 面向對象等

 

JRE與JDK

JRE(JVM和jJava類庫) 

JDK包含JDK,以及其他開發工具

 

Java源代碼----->javac編譯------>Java位元組碼文件------->java執行----->運行結果

 

path環境變數裡面記錄的是可執行性文件,如exe,對可執行文件先在當前路徑去找,如果沒有找到就去path環境變數中配置的路徑去找

classpath環境變數里記錄的是java類的運行文件所在的目錄

------------------------------------------------------------------------------------------------------------------------------------------------------------

Java語言基礎

關鍵字:全小寫 在IDE中以不同顏色顯示,goto和const作為保留字存在

標識符:就是給變數,類,介面,方法等起名字 (英文大小寫,數字,$ 和 _)以及命名法

  類或介面:首字母大寫

  方法或變數:首字母小寫

  常量:全大寫,單詞之間用“_”隔開

註釋://     /* */      /** */

常量:字面值常量:1.字元串常量 2.整數常量 3.小數常量 4.字元常量 5.布爾常量 6. 空常量

進位相關:

  1byte = 8bit;1k = 1024byte; 1m = 1024k; 1g = 1024m;1t = 1024g

  二進位(以0b開頭),八進位(以0開頭),十進位,十六進位(以0x開頭)的相互轉換

  8421BCD碼四位表示一個十進位碼,十進位157 = 0001 0101 0111

  原碼,反碼,補碼(電腦都是使用補碼來計算的)

    原碼:最高位符號位0正1負,其餘為數值位

    反碼:正數反碼與原碼相同,負數反碼與符號位相同,數值位取反

    補碼:正數補碼與原碼相同,負數補碼為反碼末位加一

變數:數據類型 變數名 = 初始化值

數據類型:

  八種基本數據類型:

  byte:八位,一個位元組,有符號,以二進位補碼表示的整數,最小值:-128(-2^7)最大值:127(2^7-1)

  short:16位,兩個位元組,有符號,以二進位補碼表示的整數,最小值:-32768(-2^15)最大值:32767(2^15-1)

  int:  32位,四個位元組,有符號,以二進位補碼表示的整數,最小值:-2^31  最大值:2^31-1

  long:  64位,八個位元組,有符號,以二進位補碼表示的整數,最小值:-2^63  最大值: 2^63-1 預設值:0L

  float:單精度 32位 四個位元組 浮點數 預設值:0.0f

  double: 雙精度 64位 八個位元組 浮點數  預設值0.0d 浮點數的預設類型位double類型

  boolean:true/false 一個位元組

  char:單一的 16 位 Unicode 字元,占兩個位元組,最小值是 \u0000(即為0);最大值是 \uffff(即為65,535),char 數據類型可以儲存任何字元;(可以儲存漢字)

  整數預設int類型,浮點數預設double類型

  級別從低到高為:byte,char,short(這三個平級)–>int–>float–>long–>double

  自動類型轉換(預設轉換):從低級別到高級別,系統自動轉的;

  強制類型轉換:什麼情況下使用?把一個高級別的數賦給一個比該數的級別低的變數;目標數據類型 變數 = (目標數據類型)(被轉換的數據)

  float雖然占4個位元組,long占八個位元組,但是float表示範圍比long大(原因:略,可自行Google)

//面試題:以下語句會報錯嗎s's's's
byte a = 1 , b;fo
b = a + a;     //會報錯,無法編譯,因為預設轉換a為int,再從int到byte需要強制轉換
//面試題,下列輸出是多少:
byte a = (byte) 214;
System.out.println(a);
//因為強制轉換,只截最後一個位元組,並且這個位元組為補碼,所要做的就是把補碼轉為原碼即可
System.out.println('a'+1);
//輸出98,因為‘a’為char類型,根據ACSII表轉為int 97
System.out.println('a'+1);   // 98
System.out.println("a"+1);  // a1
System.out.println('a'+1+"a"); //98a
//字元串後的+為字元串拼接操作

運算符:

  算數運算符:“/”為除法,整數相除只能得到整數,如果想要小數,需要加小數點.0

        "%"為取餘

        ++和--,放在變數前後效果不同,前面是先自增或自減再參與運算,後面是先參運算再自增或自減

        註意:算數運算符的優先順序

  賦值運算符:= += -= *= /= %=

short f = 1;
f = f+1;
//會報錯cannot convert from int to short,因為會先預設轉成int類型
short f = 1;
f +=1//不會報錯,因為擴展運算符包含強制類型轉換,相當於f = (f的數據類型)(f+1)

  關係運算符:==  != > >= < <=

  邏輯運算符:&(與) |(或) ^(異或) !(非) &&(短路與) ||(短路或)

      & :無論左邊結果是什麼,右邊都參與運算。 &&:短路與,如果左邊為false,那麼右邊不參數與運算。

      |:兩邊都運算。 ||:短路或,如果左邊為true,那麼右邊不參與運算。

  位運算符: &(與運算) |(或運算) ^(異或運算) ~(按位取反)  <<(左移) >>(右移) >>>(無符號右移)

int a =1,b =2;
//java實現兩個整數變數的交換:
//  方式一:採用一個中間變數 優點:最簡單最好理解的方式
//  方式二:可以用兩個數求和然後相減的方式 缺點:如果 x 和 y 的數值過大的話,超出 int 的值會損失精度。
a = a + b;
b = a - b;
a = a - b;
//  方式三:利用位運算的方式進行數據的交換,思想原理是:一個數異或同一個數兩次,結果還是那個數,而且不會超出int範圍(最佳實現)
a = a^b;
b = a^b;
a = a^b;
//  方式四:利用反射 最為麻煩,切效率低。完全炫技使用
//最有效的方法算出2乘以8等於幾?
//  2<<3; 表示 2向左移 3位:2 * 2^3(2的3次方) = 2 * 8;
//  因為一個數左移 n位,就相當於 2的 n次方,那麼一個數乘以 8只要將其左移 3位即可,而為運算符的效率最高,所以 2乘以 8等於幾的最有效方法是 2<<3。

  三目運算符:  比較表達式?表達式1:表達式2;

if語句:if(判斷語句){執行語句}else if(判斷語句){執行語句}else{執行語句}

switch語句: switch表達式支持的數據類型:基本數據類型:byte, short, char, int;包裝數據類型:Byte, Short, Character, Integer;枚舉類型:Enum;字元串類型:String(Jdk 7+ 開始支持)

      註意:case 裡面必須跟 break,不然程式會一個個 case 執行下去,直到最後一個 break 的 case 或者 default 出現。

         case後面的值只能是常量,不能是變數,而且,多個case後面的值不能重覆

for迴圈語句:for(初始化語句;判斷語句;控制語句){執行語句;}

while迴圈語句:初始化語句 while(判斷語句){執行語句;控制語句;}   

    能用for儘量用for,因為for中初始化語句中的變數可以儘早在記憶體中消失,使用while迴圈可以繼續使用控制語句中的變數

do...while迴圈語句:初始化語句 do{執行 語句;控制語句;}while(判斷語句); do...while迴圈至少執行一次迴圈體

控制跳轉語句:break  跳出單層迴圈;跳出指定迴圈,使用標簽名(不常用)

       continue 跳出一次迴圈,進入下一次

方法:格式: 修飾符 返回值類型 方法名 (參數類型 參數名,......){執行語句; return 返回值;}

      實際參數:實際參與運算的參數;形式參數:方法定義的,用於接收實際參數

   方法重載:方法名相同,參數個數以及參數類型不同;與返回值類型無關,只看方法名和參數列表;調用時虛擬機通過參數列表的不同來區分同方法名

數組:存儲基本數據類型,也可以存儲引用數據類型。

   格式:數據類型[] 數組名;

      數組類型[][] 數組名 = new 數據類型[m][n]; 數據類型[][] 變數名 = new 數據類型[m][]; 數據類型[][] 變數名 = {{1,2,3},{1},{1,2}};

   初始化:動態初始化:指定數組長度,由系統分配初始值:數據類型[] 數組名 = new 數據類型][數組長度]

       靜態初始化:指定每個元素的初始值,由系統判斷數組長度:數組類型[] 數組名 = {1,2,3}、

   遍曆數組:

   獲取最值:

   數組逆序:

   查找元素:

Java中的參數傳遞問題:

  基本類型:形式參數的改變對實際參數沒有影響。

  引用類型:形式參數的改變直接影響實際參數。因為引用類型做形參,調用的是地址值,對同一塊記憶體進行修改。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Java中的記憶體分配:

棧:存儲局部變數;用完就釋放;棧記憶體的兩個引用指向同一個堆記憶體空間,無論哪個棧記憶體中的變數的操作都是針對堆內的同一個地方

堆:new出來的東西;每個new出來的東西都有地址值;每個變數都有預設值byte,short, int,long 0;float,double 0.0; char '\u0000'; boolean false; 引用類型 null; 使用完畢就成了垃圾,沒有立即回收,等GC空閑時回收

方法區:

本地方法區:

寄存器:


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 上午下午晚上分別顯示不同的問候語 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> ...
  • 一、前言 在vue的視圖層與modal層進行數據交互的時,視圖層的數據傳入到modal層,modal層通過defineProperty來劫持每個元素,並綁定監聽事件進行監聽,一旦監聽到數據變化,就通過defineProperty的set函數重新更新視圖層。 二、使用Object.defineProp ...
  • 一、當用戶在瀏覽器地址欄中輸入網址,到看到頁面,經歷的步驟 tips:hexo自己搭一個博客 1.解析輸入的URL地址 傳輸協議(把信息在客戶端和伺服器端進行傳遞,類似於快遞小哥) http 超文本傳輸協議(傳輸的內容除了文本,還有可能是其它類型:二進位編碼、BASE64碼、文件流等等) https ...
  • 不管你是做哪個語言的,只要是個程式員都懂: 哈哈啥哈哈哈 來跟我一起學習java吧,做個牛b的程式員。我們一起來敲bug吧 “大清亡於閉關鎖國,學習技術需要交流和資料”。 在這裡我給大家準備了很多的學習資料免費獲取,包括但不限於技術乾貨、大廠面試題系列、技術動向、職業生涯等一切有關程式員的分享. w ...
  • # 5.Utilities:工具 - 1. 邊框 中文網站邊框部分:http://bs4.vx.link/index.html?tmpui_page=/pages/utilities - 2. 清除浮動 - 3. 關閉圖標 - 4. 顏色 - 5. 顯示 3.x版本顯示只有三種:block, inl ...
  • 一、 1、打開方式 打開Chrome瀏覽器,按下F12或者右擊空白處然後點擊檢查 最左邊是顯示效果,中間是html代碼,右邊是html樣式。 2、樣式的修改 點擊中間代碼框,左上角的小箭頭,然後點擊css樣式,可以直接修改屬性的值。也可以點擊鍵盤上的上下箭頭,對屬性的值進行修改 需要註意的是,調試工 ...
  • 平時常用的一些功能性函數 關於原生JS 文件大小單位轉換 /** * @desc bytesToSize 位元組單位換算 * @param bytes 傳入以bit為單位的數據 */ const bytesToSize = function (bytes) { const k = 1024; if ( ...
  • Command模式屬於行為模式,作為大名鼎鼎的23個設計模式之一,Command模式理解起來不如工廠模式,單例模式等那麼簡單直白。究其原因,行為模式著重於使用,如果沒有編程實踐,確實不如創造模式那麼直白。我們先看看UML類圖。 估計很多同學看著圖就暈了,那麼多東西,Command和Concrete ...
一周排行
    -Advertisement-
    Play Games
  • 基於.NET Framework 4.8 開發的深度學習模型部署測試平臺,提供了YOLO框架的主流系列模型,包括YOLOv8~v9,以及其系列下的Det、Seg、Pose、Obb、Cls等應用場景,同時支持圖像與視頻檢測。模型部署引擎使用的是OpenVINO™、TensorRT、ONNX runti... ...
  • 十年沉澱,重啟開發之路 十年前,我沉浸在開發的海洋中,每日與代碼為伍,與演算法共舞。那時的我,滿懷激情,對技術的追求近乎狂熱。然而,隨著歲月的流逝,生活的忙碌逐漸占據了我的大部分時間,讓我無暇顧及技術的沉澱與積累。 十年間,我經歷了職業生涯的起伏和變遷。從初出茅廬的菜鳥到逐漸嶄露頭角的開發者,我見證了 ...
  • C# 是一種簡單、現代、面向對象和類型安全的編程語言。.NET 是由 Microsoft 創建的開發平臺,平臺包含了語言規範、工具、運行,支持開發各種應用,如Web、移動、桌面等。.NET框架有多個實現,如.NET Framework、.NET Core(及後續的.NET 5+版本),以及社區版本M... ...
  • 前言 本文介紹瞭如何使用三菱提供的MX Component插件實現對三菱PLC軟元件數據的讀寫,記錄了使用電腦模擬,模擬PLC,直至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1. PLC開發編程環境GX Works2,GX Works2下載鏈接 https:// ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • 1、jQuery介紹 jQuery是什麼 jQuery是一個快速、簡潔的JavaScript框架,是繼Prototype之後又一個優秀的JavaScript代碼庫(或JavaScript框架)。jQuery設計的宗旨是“write Less,Do More”,即倡導寫更少的代碼,做更多的事情。它封裝 ...
  • 前言 之前的文章把js引擎(aardio封裝庫) 微軟開源的js引擎(ChakraCore))寫好了,這篇文章整點js代碼來測一下bug。測試網站:https://fanyi.youdao.com/index.html#/ 逆向思路 逆向思路可以看有道翻譯js逆向(MD5加密,AES加密)附完整源碼 ...
  • 引言 現代的操作系統(Windows,Linux,Mac OS)等都可以同時打開多個軟體(任務),這些軟體在我們的感知上是同時運行的,例如我們可以一邊瀏覽網頁,一邊聽音樂。而CPU執行代碼同一時間只能執行一條,但即使我們的電腦是單核CPU也可以同時運行多個任務,如下圖所示,這是因為我們的 CPU 的 ...
  • 掌握使用Python進行文本英文統計的基本方法,並瞭解如何進一步優化和擴展這些方法,以應對更複雜的文本分析任務。 ...
  • 背景 Redis多數據源常見的場景: 分區數據處理:當數據量增長時,單個Redis實例可能無法處理所有的數據。通過使用多個Redis數據源,可以將數據分區存儲在不同的實例中,使得數據處理更加高效。 多租戶應用程式:對於多租戶應用程式,每個租戶可以擁有自己的Redis數據源,以確保數據隔離和安全性。 ...