javaEE java基礎 基礎知識查缺補漏

  1. 十進制轉換成任意進制數值 ( 除基倒取餘)

例如 十進制數字 83 裝換成 八進制數是多少?
先用83 除以8 商10 餘 3
再用10 除以8 商 1 餘 2
再用 1 除以8 商 0 餘 1
所以 83 轉換成八進制數爲 123
總結: 不斷除以基數(例如這裏的8),直到商爲零爲止, 然後倒敘取餘數拼湊起來

  1. java 裏面二進制的原碼/ 反碼/補碼 ( 一定要記住, 之所以出現補碼 是爲了讓計算機 計算簡單)

首先這只是針對負數而言的 , 因爲正數的原碼/反碼/補碼 都是本身
負數的反碼就是他的原碼 除符號位外,按位取反。
負數的補碼就是他的反碼 +1。
補碼是用來做什麼的呢?
補碼是用來做有負數的計算.
例如 我們byte 類型的 -1 加1 計算機怎麼計算呢
首先計算機會把 -1 和1 轉換成 二進制數 然後開始計算, 因爲高位作爲符號位,所以
-1 =1000 0001 — 1 = 0000 0001 如果將將這個兩個數的二進制數 直接相加 得到的是 1000 0010
也就是 -2 肯定不是正確答案. 爲了能夠將十進制數轉換成的二進制數,相加得到正確答案, 所以我們通過各種計算驗證後發現, 將負數轉換成補碼再相加 的計算方式 計算機的工作量最小.即:
-1 原碼 1000 0001 反碼 1111 1110 補碼 1111 1111
1 原反補碼相同 0000 0001
(-1) + 1 = 1111 1111 + 0000 0001 = 1 0000 0000 最高位第九位 超出取值範圍 捨去

  1. java的數據類型轉換

1 整數變量 默認爲INt 類型 小數變量默認爲 double 類型
2 不同數據類型進行混合運算時, 默認小的數據類型 轉化爲大的數據類型 byte char short 直接提升爲int
3 任何數據類型用 加號與字符串相連接 都會產生新的 字符串
4 java 中 char能存儲 中文的 因爲java 種的中文是Unicode 編碼 都是佔兩個字節
byte char short–>int–>long–>float–>double
例一:
byte b1 = 3;
byte b2 = 4;
byte b3 = b1 + b2; (錯誤 編譯不過 認爲變量是 int 類型 )
byte b4 = 3 + 4; ( 正確 java編譯器 常量優化機制)
byte b5 = 126 + 4; ( 錯誤 超出範圍)
char c1 = ‘a’ + 1; ( 錯誤 )
例二:
float f = 12.2; ( 錯誤, 默認12.2 是double 類型)
float f = 12.2F;(正確)
例三
char c1 = ‘a’;
char c2 = 97; ( 正確)

  1. 那麼爲什麼 8個字節的 Long 比 四個字節的float 標識範圍要大呢

float佔的4個字節,也就是32位二進制中,
第一位(最高位)是符號位,
第2-9位 是指數位
剩下的後23位是尾數位,
重點 指數位的 8位能標識0 - 255,根據IEEE 754規定,0代表0,255代表無窮大,剩下1 - 254,每個減去127,代表-126~127這個指數範圍,
也就是說float的冪級數大致範圍是2的-126次冪到127次冪之間,
而long是8個字節,也就是64位,除去符號位,範圍在只有2的63次冪,遠遠小於float。

  1. java 中不同進制的書寫規範

二進制 0B100001 (以 0B 開頭)
八進制 041 (以 0 開頭)
十進制 31
十六進制 0X21 (以 0X 開頭)

  1. 局部變量被使用前 需要被賦值
// 錯誤案例 編譯不通過
class demo{
// 編譯不通過
	public static void main(String[] args){
		byte b = 0b00100001;
		short s ;
		short s1 =(short) (b + s); 
	}
}
  1. ++ a 和 a ++

a++ 是先賦值 後運算
int a = 1;
int b = (a ++) +1; 其實這裏的兩步是 a = 1 b = a +1 =2 然後 a= a+1= 2 b =2
++a 是先運算後賦值
int a = 2;
int b = (++a )+2 其實這裏運行了兩步 a= a+1 = 3 然後 a =3 b = a +2 =5

例如

short s1 = 1 s1 = s + 1; (編譯不過)
short s2 = 1 s2 ++ ; (編譯通過 這裏會自動強轉的 )

  1. 賦值運算符 (擴展運算符)

+= , -+ , *=, /= ,%=(模等)
解釋 += 辦左右兩邊相加 然後賦值給左邊
例一
int a = 3;
int a += 4; 此時 a =7
例二
short s1 = 1 s1 = s + 1; (編譯不過)
short s2 = 1 s2 += 1 ; (編譯通過 這裏會自動強轉的 )

  1. 位 運算符 (只要是計算機 運算肯定是轉換成補碼 再計算 )

,* ,& , | , ^(異或) , ~(取反) . >>(有符號右移), >>>(無符號右移), <<(左移)

 class jinzhi{
	public static void main(String[] args){
		System.out.println(6 & 2); // 位運算
		System.out.println(true & 2); //   編譯錯誤 認爲是位運算  所以true 不合法
		System.out.println(true & true); // 邏輯運算
		System.out.println(~6); // 輸出爲 -7
	}
}

int  a = 10 ;
int b = 5;
a = a ^ b;
b = a ^ b; // b = 10
a = a ^ b // a = 5
  1. switch case

1 switch 能接受的表達式 String 枚舉 和 (byte short char int )
2 case 只能放常量
3. case 不能重複

  1. java 口直語句 跳轉標號 以下代碼輸出值爲-1 沒有一點錯誤
	public static void main(String[] args){
		http://wwww.baidu.com
		while(true){
			b:	for(;;){
				System.out.println(-2>>1); // 二進制
				break http;
			}	
		}
	}
  1. 參數傳值問題

基本數據類型的傳值 不改變原值 因爲調用後就會彈棧 局部變量隨之消失

// 輸入值  爲 10 -- 20  
class demo {
	public static void main(String[] arg){
		int a = 10;
		int b = 20;
		change(10,20);
		System.out.println(a +"--"+b);
	}
	public static void change(int a ,int b){
		a =b;
		b =a+b;
	}
}

引用數據類型傳值 改變值

// 輸出值爲 100
class demo {
	public static void main(String[] arg){
		int[] arr = {1,2,3};
		change(arr);
		System.out.println(arr[0]);
	}
	public static void change(int[] arr){
		arr[0] = 100;
	}
}

java 是傳值的 因爲地址也是值

  1. static 的特點

a. 隨着類的加載而加載
b. 優先於對象存在
c. 被類的所有對象共享
d. 注意事項 ,
在這裏插入圖片描述

  1. 接口與接口之間可以單繼承 也可以多繼承
  2. 類與類之間 可以單繼承 不可以多繼承
  3. 多態的成員變量和方法運行結果

成員變量: 編譯看左邊(父類), 運行看左邊(父類) 堆內存中子類的空間有一塊 super空間 存儲成員變量
成員方法: 編譯看左邊(父類), 運行看右邊(子類) 也就是編譯的時候 父類看有這個方法嗎 , 運行的時候則運行子類的方法, 多態又稱爲動態綁定
靜態方法: 編譯看左邊(父類) , 運行看左邊(父類) 只有 靜態的方法與類有關係, 這叫靜態綁定

多態在 內存中的存儲過程 圖解
多態在 內存中的存儲過程 圖解

class  intface{
	public static void main(String[] args) {
		Father f = new Son();
		System.out.println(f.age);
		f.renwu();
	}
}
class Father {
	int age = 50;
	public void renwu(){
		System.out.println("工作");
	}
}
class Son extends Father {
	int age = 20;
		public void renwu(){
		System.out.println("學習");
	}
}

在這裏插入圖片描述

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