【作者前言】:13年入圈,分享些本人工作中遇到的點點滴滴那些事兒,17年剛開始寫博客,高手勿噴!以分享交流為主,歡迎各路豪杰點評改進!
[1]
??知識點內(nèi)容
??1. JDK工具的使用 [2]
.class:字節(jié)碼文件
Javap反編譯
Javadoc 生成文檔:
Javadoc -d . 文件名稱.java :按照包結(jié)構(gòu)在當前目錄生成文檔
??2.如何注釋 [3]
不會顯示在執(zhí)行結(jié)果中,只是為了給開發(fā)者進行標注,說明一下 這個是誰做的 什么功能等等等
1、單行注釋://注釋內(nèi)容
2、多行注釋:/* 注釋內(nèi)容 */
3、文檔注釋:/** 文檔注釋內(nèi)容 */
??3.引用類型 [4]
在Java語言中,
除了上節(jié)學習到的8種基本數(shù)據(jù)類型,其他類型都是引用類型
;
也可以說,任何一個對象都是引用類型
;
image.png
引用類型使用=賦值
除了String、包裝器類(共8個)外,都需要使用new 關(guān)鍵字;
引用類型可以使用==、!=進行比較
,比較的是引用類型的地址
,不是內(nèi)容
;
引用類型不能使用>、>=、<=、<進行比較
;
當只聲明了一個引用類型變量,卻沒有為其賦值
,則此時該變量為null
;
引用類型的默認值是null 表示空 什么都沒有指向
一個字符串是null,與一個字符串是""是否一樣?有何區(qū)別?
完全不同。Null指的是根本沒有分配堆內(nèi)存,""是分配了堆內(nèi)存,存儲了一個""字符串,不過這個字符串是空的。
??4.枚舉 [5]
在JDK1.5之后,Java中多了一個新的類型 --- 枚舉;枚舉也是一種引用類型
image.png
枚舉在編譯后也會生成.class 文件,也是一種引用類型
??5. 注解 [6]
在JDK1.5之后,Java中增加了注解(Annotation);
注解也稱為元數(shù)據(jù),是和類、接口、枚舉,并列的一種引用類型;
image.png
除了直接使用API中的注解外,還可以自定義注解類型
??6. 運算符 [7]
從功能角度分,Java中的運算符可以分為
算術(shù)、關(guān)系、位、邏輯運算符
四類;
運算符既可以對變量進行運算,也可以對常量進行運算,被運算的數(shù)據(jù)稱作操作數(shù);
多數(shù)運算符的操作數(shù)只能是基本數(shù)據(jù)類型
,只有+、==、!=
例外,其中+不僅能對基本數(shù)據(jù)類型進行加運算,還能將字符串進行連接
;==、!=除了可以比較基本數(shù)據(jù)類型的二進制值外,還能比較基本數(shù)據(jù)類型的地址;【1】算數(shù)運算符
算術(shù)運算符用來對操作數(shù)進行數(shù)學運算;+比較特殊,除了能做加運算外,還能對兩個字符串進行連接;
image.png
a++
與++a
的意思都是讓a自增一個
a--
與--a
的意思都是讓a自減一個
區(qū)別:使用的時機(運算的時機)不一樣
int num = 10;
System.out.println(num++); // --- 10 先打印后自增1
System.out.println(++num); // --- 11 先自增1再打印
【自減同理】
【2】關(guān)系運算符
又叫比較運算符,用來運算兩個操作數(shù)額的大小關(guān)系,返回值是true或false
image.png
==
以及!=
也可以對引用類型進行運算,比較 是否為同一個對象;
【3】位運算符
針對操作數(shù)的二進制進行運算;
15的二進制數(shù)是0000 1111,6的二進制是0000 0110;
image.png
1:真 0:假
&
(位與):1111 & 0110 ---> 0110;全真為真(1-1 ---> 1) 有一個假結(jié)果就是假(1-0 ---> 0 ; 0-1 ---> 0)
|
(位或):1111 | 0110 ---> 1111;全假為假(0-0 ---> 0),只要有一個為真結(jié)果就是真(1-0 ---> 1 ; 0-1 ---> 1)
^
(異或):1111 ^ 0110 ---> 1001;兩個操作數(shù)不同則返回true(1-0 ---> 1 ; 0-1 ---> 1),兩個操作數(shù)相同則返回false(1-1 ---> 0 ; 0-0 ---> 0)
相當于把每個位的數(shù)直接+
~
(取反):~0110 ---> 1000 0000 0000 0000 0000 0000 0000 0111;高位為1 表示為一個負數(shù) 轉(zhuǎn)化成32位 原碼+1高位進行補位
!
(非):true 變 false,false 變 true
<<
(左移位):
①【2<<2 過程:0010 ---> 數(shù)向左移動兩位 ---> 1000
結(jié)果:8】
②【2<<3 過程:0010 ---> 數(shù)向左移動三位 ---> 0001 0000
結(jié)果:16】
>>
(右移位):
【8>>2 過程:1000 ---> 數(shù)向右移動兩位 ---> 0010
結(jié)果:2】
>>>
(無符號右移位,即把符號位一起移了):正數(shù)與>>一樣
擴展·面試題
①如何快速的求 2 * 8? --->2<<3
②int a=9;int b=6;如何不適用第三個變量,讓這兩個數(shù)進行交換?
1.a=a+b;b=a-b;a=a-b; 結(jié)果 ---> a=15;b=9;a=6
2.a=a^b;b=a^b;a=a^b; 結(jié)果 ---> a=1001^0110=1111(15); b=1111^0110=1001(9);a=1111^1001=0110(6);
【4】邏輯運算符
image.png
&:全真為真 有一個假結(jié)果就是假
|:全假為假,只要有一個真 結(jié)果就是真
異或-^:兩個操作數(shù)不同返回true,兩個操作數(shù)相同返回false;
!:true變false,false變true
&&:全真為真 有一個假結(jié)果就是假
||:全假為假,只要有一個真 結(jié)果就是真&(與) 和 &&(雙與) 的區(qū)別 --- |(或) 和 ||(雙或) 的區(qū)別
都是邏輯運算符,【&、|
稱為非短路邏輯運算
】 【&&、||
稱為短路邏輯運算
】
eg:
T1和T2是兩個表達式
T1&
T2,當T1為false
時,返回值
即已確定為false
,但是依然還會運算T2表達式
,所以稱之為非短路
;
T1&&
T2,當T1為false
時,返回值
已確定為false
時,就不會運算T2表達式
;所以稱為短路
;
|
與||
也存在類似邏輯,當T1表達式為true
時,就確定了返回值
肯定是true
,所以||
就不會再運算T2表達式
【5】三元運算符(三目運算符)
條件運算符是唯一的一個三元運算符,它有三個表達式操作數(shù)(不是典型的兩個操作數(shù)),使用下面的表達式:
表達式1 ? 表達式2 : 表達式3
在這個語句中,表達式1必須產(chǎn)生一個布爾值。
①如果表達式1的值為true時,那么表達式2被計算;
②如果表達式1的值為false,那么表達式3被計算;
并且整個表達式的值是有條件的。三元操作符與典型的if語句部分相似
eg:
f ? a : b
f --- true --- 結(jié)果為a
f --- false --- 結(jié)果為b
image.png
【6】復合賦值運算符
Java中的賦值可以使用普通的 =
進行賦值;也可以 =
與其他運算符一起進行復合賦值,即運算后賦值:
+=
: int a=7; a+=2; ---> 等同于 a=a+2; 結(jié)果:9
%=
: int a=10; a%3; ---> 等同于 a=a%3; 結(jié)果:1
??7. 運算符應用 [8]
判斷數(shù)字num為奇數(shù)還是偶數(shù)
int num = 55;
num % 2 == 0 ? 偶數(shù) : 奇數(shù)
??8. 表達式 [9]
表達式是由操作數(shù)和運算符按一定的語法形式組成的符號序列。
一個常量或一個變量名字是最簡單的表達式,其值即該常量或變量的值;
表達式的值還可以用作其他運算的操作數(shù),形成更復雜的表達式
eg:
num1+num2
a*(b+c)+d
3.14
x<=(y+z)
x&&y||z
??9. 語句、代碼段 [10]
一個由
分號
(;
)結(jié)尾
的單一命令是一條語句
(Statement),一條語句一般是一行代碼,但也可以占多行代碼。
int a = 1; // 變量定義及初始化語句
用大括號
({…… }
)圍起來的多條語句
構(gòu)成一個代碼段
(Code block);同時代碼段也包括大括號前的一些修飾性描述:
??10. 標識符 [11]
程序員對程序中的各個元素加以命名時使用的命名記號稱為標識符(identifier)包括:類名、變量名、常量名、方法名、…。
Java語言中,標識符是以字母,下劃線(_),美元符($)
開始的一個字符序列,后面可以跟字母
,下劃線
,美元符
,數(shù)字
。
合法的標識符:
identifier userName User_Name _sys_value $change非法的標識符:
2mail room# class類名:使用駝峰命名法
一個單詞首字母大寫 Student Person Animal
多個單詞每個單詞首字母都大寫 StudentManager UserName變量(方法):
一個單詞直接小寫 account
多個單詞,首個單詞字母小寫,其他單詞字母大寫 userName
常量:一般單詞字母都是大寫
包名:全都是小寫
??11. 保留字:都是小寫 [12]
具有專門的意義和用途,不能當作一般的標識符使用,這些標識符稱為保留字(reserved word):
abstract
、break
、byte
、boolean
、catch
、case
、class
、char
、continue
、default
、double
、do
、else
、extends
、false
、final
、float
、for
、finally
、if
、import
、implements
、int
、interface
、instanceof
、long
、length
、native
、new
、null
、package
、private
、protected
、public
、final
、return
、switch
、synchronized
、short
、static
、super
、try
、true
、this
、throw
、throws
、transient
、void
、while
??12. 變量 [13]
程序中的基本存儲單元
,其定義包括變量名
、變量類型
和作用域
幾個部分,
定義格式為:
Type varName [= value ][{, varName [=value]}];
int n = 3, n1 = 4;
- Java中變量的缺省初值都是確定的:
布爾變量的初值為:false
整數(shù)變量的初值為:0
浮點數(shù)變量的初值為:0.0
引用(復合)變量的初值為:null- 變量的作用域: 【指可訪問變量的一段代碼,在程序中不同的地方聲明的變量具有不同的作用域:局部變量、類變量、方法參數(shù)、例外處理參數(shù)。在一定的作用域內(nèi),變量名必須唯一】
- 作用域(Scope):【決定了變量可使用的范圍】
①全局變量
(Global variables):變量可以在整個類
中被訪問;
②局部變量
( Local variables ):變量只能在定義其的代碼段
中被訪問。- 作用域規(guī)則:【在一個代碼段中定義的變量只能在該代碼段或者該代碼段的子代碼段中可見】
- 使用局部變量比使用全局變量更安全。
在類中定義的 --- 全局變量,方法中定義的 --- 局部變量
變量的有效范圍:從定義變量開始,一直到定義這個變量所在代碼塊結(jié)束
??13. 常量 [14]
常量就是特殊的變量
,不能修改值的變量。
定義格式為:
final Type varName = value [, varName [ =value] …];
final int globalAccount = 100, nationalAccount = 50;
final double PI=3.14159
注:常量只能在定義時賦值
??14. 如何進行控制臺輸入[15]
在java有一個類型
Scanner
接收控制臺輸入的1、步驟一:創(chuàng)建Scanner對象
Scanner 對象名稱=new Scanner(System.in);
2、步驟二:通過對象中的方法進行控制臺數(shù)據(jù)的接收
(1)對象.nextInt()
: 只能接收一個整數(shù)!!!(對象.nextFloat()、對象.nextDouble()...等同理,只能接收對應類型的輸入內(nèi)容
)
(2)對象.nextLine()
:接收回車時控制臺輸入的內(nèi)容。
image.png