一抓半、內(nèi)存分析(棧)
二、注釋:comment
注釋的作用:幫助開發(fā)人員更好的理解記憶程序的格嘁。
java 中支持三種注釋:
1:單行注釋 ?//后續(xù)的內(nèi)容都是注釋的內(nèi)容 ?可以單獨占用一行笛求,用來解釋說明它下面一行的代碼。 ?還可以放到一行代碼的末尾糕簿,短注釋探入。
2:多行注釋: /* 注釋的內(nèi)容 */
3:多行文檔注釋: 幫助生成閱讀文檔的。 ?javadoc.exe ?可以用來識別java 源代碼中的文檔注釋的內(nèi)容冶伞。將文檔注釋中的內(nèi)容生成一個幫助文檔新症。
/** ?文檔注釋的內(nèi)容 */
三、運算符
1:操作數(shù) ?參與運算符運算的數(shù)據(jù)响禽。
2:表達式 ?操作數(shù)使用運算符連接的整體徒爹。
3:一元運算符 :需要一個操作數(shù)的運算符。 ?單目運算符芋类。+1
4:二元運算符 :需要兩個操作數(shù)的運算符隆嗅。 ?1+1 1-1 ?雙目運算符
5:三元運算符 :需要三個操作數(shù)的運算符。 ?三目運算符 ?only one侯繁。
????????????????????????????條件運算符(判斷)?返回值1:返回值2;
6:返回值: 參與所有運算符運算的數(shù)據(jù) 都是 操作數(shù) ?或者表達式的返回值 參與的胖喳。
參與運算的數(shù)據(jù)計算的結(jié)果?就是?參與運算數(shù)據(jù)的返回值。
四贮竟、算術(shù)運算符?+ - * / %
//運算符練習(xí)
public class TestMath{
public static void main(String[] args){
//算術(shù)運算符
// 1 + ?: ?一元運算符(通常省略) ?和 ?二元 運算符 (實現(xiàn)兩個操作數(shù)相加)
//打印的是表達式 操作數(shù) 的 返回值丽焊。
System.out.println(+7);//7
System.out.println(1+7);//8
// 2: - : 一元 運算符 ?(負(fù)數(shù)) ??二元運算符 (實現(xiàn)兩個操作數(shù)相減)
System.out.println(-7);//-7
System.out.println(1-7);//-6
// 3 * : 二元運算符 ?(實現(xiàn)兩個操作數(shù)相乘的結(jié)果) ?正負(fù)號的結(jié)算的結(jié)果 和 數(shù)學(xué)中的規(guī)則一樣
System.out.println(1*2);//2
System.out.println(-1*2);//-2
System.out.println(1*-2);//-2
System.out.println(-1*-2);//2
//4 ?/ ?: 二元運算符 ?(實現(xiàn)兩個操作數(shù)相除的結(jié)果) 整數(shù)相除結(jié)果還是整數(shù),余數(shù)忽略咕别。有一個操作數(shù)是小數(shù)技健,結(jié)果就是小數(shù)。
// 正負(fù)號的規(guī)則和數(shù)學(xué)中一樣惰拱。
System.out.println(5/3);//1
System.out.println(5.0/3);//1.666666666666666667
System.out.println();
// 5 % ?取余: 二元運算符 ( a%b a 除以b 得到的余數(shù))
System.out.println(5%3);//2
System.out.println(1%3);//1
//規(guī)則:結(jié)果的符號位 與 左邊的操作數(shù)相同
System.out.println(5%3);//2
System.out.println(-5%3);//-2
System.out.println(5%-3);//2
System.out.println(-5%-3);//-2
//除 和 ?取余 的應(yīng)用技巧
//比如我得到一個三位的隨機數(shù)雌贱,求三位隨機數(shù)的個位 ?十位 ?百位 上的具體的數(shù)值大小。 345
final int MIN = 100;
final int MAX = 1000;
int num = (int)(Math.random() * (MAX-MIN) + MIN);
System.out.println("num = " + num);
//個位的值
int unit = num % 10;
//十位的值
int decade = num /10 % 10;
//百位
int hundred = num/100;
System.out.println(num + " 的百位是:" + hundred + "\t十位是:" + decade + "\t個位是:" + unit);
}
}
五偿短、自增欣孤、自減
????//運算符練習(xí)-2
public class TestMath1{
public static void main(String[] args){
// ++ ?自增運算符 :一元運算符。對變量自身實現(xiàn)自增一的操作昔逗。
int age = 10;
//賦值操作最后執(zhí)行降传。
age = age + 1;
//后綴模式 postfix
//自增后綴模式的表達式的返回值 是 變量自增之前的值。
//先返回勾怒,后自增搬瑰。
age ++;
age = 0;
//后綴模式款票,首先 age ++ 產(chǎn)生返回值 返回 age 自增之前的值 num 。 然后age 做自增+1操作泽论,然后將num 賦值給 value。
System.out.println(age ++);
int value = age ++;
System.out.println("age = " + age);
System.out.println("value = " + value);
age = 0;
value = age ++ + age ++ ?+ age ++;
System.out.println("value = " + value);
//前綴模式 prefix
//先自增卡乾,后返回翼悴。
++ age;
age = 0;
System.out.println("age = " + ++age);
age = 0;
age = age ++;
System.out.println("age = " + age);
age = 0;
value = 0;
value = ++age + age ++ + age ++ + ++age;
System.out.println("age = " + age);//4
System.out.println("value = " + value);//8
// -- 自減運算符 ,實現(xiàn) 對變量自身自減一的操作幔妨。
// 前綴模式鹦赎,先自減,后返回误堡。
// 后綴模式古话,先返回,后自減锁施。
}
}
六陪踩、賦值運算符
賦值運算符:=
二元運算符。
功能:將右邊表達式的返回值賦值給左邊的?變量或者是終態(tài)變量悉抵。
注意:賦值語句也有返回值:左邊變量被賦予的值肩狂。
賦值運算符左邊的:左值,右邊的叫:右值姥饰。
左值:變量或者是終態(tài)變量傻谁。
右值:常量(1)、變量(age)列粪、常量表達式(1+1).變量表達式(age + value).,常量變量表達式(1+age)审磁。
注意:
賦值運算符?最后執(zhí)行。
左值的類型和右值的類型需要兼容岂座。
復(fù)合賦值運算符:?+=态蒂、-=、*=掺逼、/=吃媒、%=、&=吕喘、|=赘那、^=、&&=氯质、||=
復(fù)合賦值運算符?和?普通的賦值方式的區(qū)別:
1:復(fù)合賦值運算符 生成的字節(jié)碼要小一點點募舟。省一點點內(nèi)存。
2:byte value = value + 1;(錯)
??byte value = (byte)value + 1;(對)
??byte value = 1;value ++;(對)
//復(fù)合賦值運算符
public class Test1{
public static void main(String[] args){
//對指定的變量實現(xiàn)自增一的操作闻察。
int age = 10;
age = age + 1;
age ++;
++ age;
age += 1;
//自增10
//age = age + 10;
age += 10;
//自減10
//age = age - 10;
age -= 10;
//自乘10
//age = age * 10;
age *= 10;
//自除10
age /= 10;
//age = age/10;
//自余10
//age = age%10;
age %= 10;
}
}
七拱礁、關(guān)系運算符
關(guān)系運算符:關(guān)系運算符一共有6個琢锋。
都是二元運算符。用來表示運算符左右量變的關(guān)系是否成立的呢灶!
如果關(guān)系成立吴超,關(guān)系表達式的返回值?是true。否則 是false鸯乃。
>:大于鲸阻,左邊是否大于右邊
<:小于,左邊是否小于右邊
>=:大于等于缨睡,左邊是否大于等于右邊
<=:小于等于鸟悴,左邊是否小于等于右邊
==:等于,左邊是否等于右邊
!=:不等于奖年,左邊是否不等于右邊细诸。
6種數(shù)值類型的數(shù)據(jù)都可以進行 關(guān)系的比較。 byte short int long float double
char 可以被看作整數(shù)對待陋守,所以也可以進行所有關(guān)系的比較震贵。
布爾類型:只適用于比較是否相等(==、!=)嗅义。不能用于比較大小屏歹。
//關(guān)系運算符
public class TestReleation{
public static void main(String[] args){
System.out.println(5 > 6);//false
boolean bool = 5 != 6;//
System.out.println(bool);//true
System.out.println('a'-32 == 'A');
System.out.println('你'+0);
char c1 = 20320;
System.out.println(c1);
int age = 0;
System.out.println( age ++ > age);//false
System.out.println( age ++ < age);//true
System.out.println( age ++ == age);//false
System.out.println( age ++ != age);//true
age = 0;
System.out.println( ++ age != (age += 1));//true
}
}
?
八、邏輯運算符
邏輯運算符:6個之碗。
& : 邏輯與
| : 邏輯或
^ : ?邏輯異或
! : ?邏輯非蝙眶,邏輯取反。
&&:條件與褪那、短路與
||:條件或幽纷、短路或
注意:參與邏輯運算的操作數(shù)?必須是?boolean值。 邏輯表達式的返回值也是 boolean 值博敬。
?
//邏輯運算符
public class TestLogic{
public static void main(String[] args){
// & ?邏輯與 ?二元的運算符友浸。 規(guī)則:全真則真,有假則假偏窝。 表達的是并且的意思收恢。
System.out.println((2>1) & true);//true
System.out.println(true & false);//false
System.out.println(false & true);//false
System.out.println(false & false);//false
System.out.println();
// | 邏輯或 ?二元運算符 ?規(guī)則:有真則真,全假則假祭往。 ?表達的是或者的意思伦意。
System.out.println(true | true);//true
System.out.println(true | false);//true
System.out.println(false | true);//true
System.out.println(false | false);//false
System.out.println();
//^ 邏輯異或 ?二元運算符 ?規(guī)則:相異為 真true ?相同 為假false
System.out.println(true ^ true);//false
System.out.println(true ^ false);//true
System.out.println(false ^ true);//true
System.out.println(false ^ false);//false
System.out.println();
// ! 邏輯 非 一元運算符 ?規(guī)則:true 取反 返回 false,false 取反 返回 true
System.out.println(!true);//false
System.out.println(!false);//true
System.out.println();
// && 條件與 短路與 ??二元運算符 規(guī)則 ?全真則真硼补,有假則假驮肉。 表達的是并且的意思。
System.out.println((2>1) && true);//true
System.out.println(true && false);//false
System.out.println(false && true);//false
System.out.println(false && false);//false
System.out.println();
// & 和 && 的區(qū)別:參與邏輯與&運算的所有的操作數(shù)表達式已骇,都會被計算离钝,并得到結(jié)果票编。不管前面的操作數(shù)是否是false。
// && 條件與 如果第一個操作數(shù)的返回值是 false卵渴,那么后面的參與邏輯運算的表達式 將不再被計算慧域,而直接將整個邏輯表達式的返回值返回 false。
// && 效率往往高于 & 浪读。建議使用 && 吊趾。
int age = 0;
System.out.println((10 > 12) && (age ++ != 0));//false
System.out.println("age = " + age);
// | 和 || ?區(qū)別:
// | : 參與邏輯或 | 運算的所有的操作數(shù) ?都會被計算,即使前面的操作數(shù)已經(jīng)是 true了瑟啃。
// || 短路或 : 如果進行短路或 運算的操作數(shù),前面的操作數(shù) 的返回值 是 true揩尸,那么后面的表達式將不再被計算蛹屿,而直接返回整個表達式的值為true。
// 建議使用 || 短路或岩榆。 效率相對較高一點错负。
}
}
?
九、位運算符
位運算符:直接對底層的二進制位?做操作勇边,效率比其他的運算符要高犹撒。只對整數(shù)類型使用。
7個位運算符。
&: 按位與
|: 按位或
^: 按位異或
~:按位取反
>>:帶符號右移
<<: 左移
>>>:無符號右移
//位運算符練習(xí)
import java.util.Random;
public class TestRandom{
public static void main(String[] args){
// &: 按位與 ?二元運算符 ?規(guī)則:對應(yīng)的位上進行按位與 全1 則 1 ?有0則0.
System.out.println(3 & 5);//1
//應(yīng)用技巧:可以使用按位與 得到 指定的二進制位上的表示的數(shù)值的大小。將指定的二進制位設(shè)置為0. ?關(guān)燈
int age = 0b1010101;
System.out.println(age & 0xf);//5
System.out.println(age & 0b111);//5
// | : 按位或 ?二元運算符 ??規(guī)則: 對應(yīng)的位上進行按位或兆衅,逐样,有1則1,全0 則0
System.out.println(3 | 5);//7
//應(yīng)用技巧:1:如果兩個操作數(shù) 對應(yīng)的位上沒有全1 的情況炼列,那么按位或和加結(jié)果一樣。
System.out.println(1|2);//3
System.out.println(1|4);//5
System.out.println(4|2);//6
System.out.println(16|2);//18
System.out.println(7|16);//23
//找10個數(shù),任意的組合十個數(shù)的加的結(jié)果刃跛。都是不同的。
//技巧2 :將指定位 設(shè)置為 1. ?開燈
// ^: 按位異或 ?二元運算符 ?規(guī)則:相同為 0 苛萎,相異為1. ?桨昙。一個數(shù)值,先后異或了一個值2次腌歉,那么結(jié)果是它自身蛙酪。
System.out.println(3 ^ 5 ^5);//3
//應(yīng)用技巧:1 不需要中間變量交換兩個變量的值
int num1 = 15;
int num2 = 6;
num1 ^= num2; ??//num1 = num1 ^ num2;
num2 ^= num1;//num2 = num2 ^ num1;
num1 ^= num2;//num1 = num1 ^ num2;
System.out.println(num1 + "\t" + num2);
//2 可以實現(xiàn)加密效果 ?
//明文 ?密文 ?密鑰
char c1 = '我';
char c2 = '愛';
char c3 = '你';
//密鑰
int key = 5210;
System.out.println("密文:"+(char)(c1^key)+(char)(c2^key)+(char)(c3^key));
System.out.println("解密:"+(char)(c1^key^key)+(char)(c2^key^key)+(char)(c3^key^key));
// ~:按位取反 ?規(guī)則:所有的二進制位 0變1 ?1 變0
System.out.println(~0);//-1
//移位 必須是整數(shù)類型 byte ,short char int long
//如果是小于等于int 類型的數(shù)據(jù)究履。移動n位滤否,如果n 大于等于32 等價于 移動 n%32位 ???a >> n%32
// >>:帶符號右移 ?二元運算符 ?規(guī)則:低位被擠走,高位補符號位最仑,正數(shù)補0 ?負(fù)數(shù) 補 1.
//應(yīng)用:在某些區(qū)間內(nèi)藐俺,如果想對某個數(shù)實現(xiàn)除以 2的n 次冪 可以通過對該數(shù)進行帶符號右移n 位來實現(xiàn)炊甲。
System.out.println(24 >> 3);// 24/2^3=3
System.out.println(16 >> 5);// 16/2^5=0
System.out.println(-16 >> 5);// -1
System.out.println(-16 >> 2);//-4
// <<: 左移 ?二元運算符 ?規(guī)則:高位被擠走,低位補0
// 應(yīng)用:在int 區(qū)間內(nèi) 左移n 位 和 乘以2的n次冪等價欲芹。
System.out.println(3 << 2);// 3*2^2=12
System.out.println(5 << 32);// 5 * 2^(32-32) = 5
// >>>:無符號右移 ?二元運算符卿啡,規(guī)則:低位被擠走,高位補0.
//應(yīng)用:得到一個正整數(shù)菱父。
//得到區(qū)間[10~30]之間的一個隨機數(shù)颈娜。
//創(chuàng)建得到隨機數(shù)的對象
System.out.println( -16 >>> 3);
Random random = new Random();
final int MIN = 10;
final int MAX = 31;
//得到一個隨機的int 值。
int num = random.nextInt();
System.out.println(num);
//得到了一個正整數(shù)
//num = num >>> 1;
num >>>= 1;
System.out.println(num);
num = num % (MAX-MIN) +MIN;
System.out.println(num);
//一句代碼實現(xiàn)
int value = (random.nextInt()>>>1)% (MAX-MIN) +MIN;
System.out.println(value);
}
}