02Java的基本語法

1、常量與變量

程序執(zhí)行中值不會變化的為常量,會變化的為變量。如定義一個常量PI,表示圓周率,圓周率不會改變;定義一個變量stuNo,表示學號,學號則會根據(jù)學生的改變而相應(yīng)的改變。

2、Java中的標識符

標識符是用來給類,變量、常量進行取名字的符號。定義標識符具有一定的規(guī)則,規(guī)則如下:

? 大小寫敏感;

? 支持字母數(shù)字下劃線及$;

? 數(shù)字不能放在首位,即不能做首字符;

? 長度無限制;

? 不能是Java關(guān)鍵字;

? 支持中文,但不建議;

? 所有類的類名已經(jīng)是標識符(String)。

同時,對標識符也具有一定的命名規(guī)范,針對不同的Java標識符,其規(guī)范不盡相同:

類名,接口名:每個單詞的首字母應(yīng)該大寫,尤其第一個單詞的首字母應(yīng)該大寫。(駝峰規(guī)則)。如class HelloWorld,Interface Animal

方法、屬性、變量::第一個單詞首字母應(yīng)小寫,其他單詞首字母大寫。如String empNo;void setName(String name);

常量:全部用大寫字母表示。如果由幾個單詞組成,則由下畫線連接。public final int? PI;public final int HEAD_COUNT;

包: 全部用小寫字母。如:package cn.onlylove.domain


標識符示例

3、Java中的關(guān)鍵字

3個保留字:true,false,null

50個關(guān)鍵字。

4、Java中的注釋

良好的編程規(guī)范中,注釋必須寫上,以便其他人閱讀、引用和維護。

單行注釋? //...

多行注釋? /* ....*/,多行注釋不支持嵌套。

文檔注釋? /** ... */

可以通過使用JDK的javadoc工具從原文件中將文檔注釋抽取出來,從而形成幫助文檔。如JDK的API文檔。

5、Java中的注釋

Java是一種強類型語言,意思是說在程序的開發(fā)過程中,如果要使用某個變量,必須先對該變量進行聲明。Java中對變量的聲明,需要使用相應(yīng)的數(shù)據(jù)類型,Java中數(shù)據(jù)類型分為2種:基本數(shù)據(jù)類型與引用數(shù)據(jù)類型。

首先看一下Java中的引用類型。所有的類,所有的接口,所有的數(shù)組,枚舉,標注。都是引用類型。

基本數(shù)據(jù)類型總計8種,按照存儲的是字符、整數(shù)、浮點數(shù)、布爾值分為4類。如下圖所示:

Java基本數(shù)據(jù)類型

-->布爾型boolean

java中boolean只有true和false兩個值,代表真和假。定義方法如下:

boolean isExist=true;

對一個變量進行第一次賦值的操作叫作對變量的初始化。

boolean的作用:

1、作為條件判斷

2、只有兩種狀態(tài)的時候作為條件的區(qū)分。

-->字符型char

字符類型用來存儲單個字符,占用16位2個字節(jié)的內(nèi)存空間,因為char類型占用16位,因而其至多可以定義2的16次方個字符, 同時因為其也是占用兩個字節(jié),因此也可以將單個中文漢字定義為char類型。對char類型的變量進行初始化時需要在其值的兩邊用單引號括起來,定義方法如下:

char a=’a’;//正確

char a=’你’;

char a=’ab’;//錯誤

也可以將0-65535范圍內(nèi)的整數(shù)定義為char變量,JVM將根據(jù)ASCII碼轉(zhuǎn)換為對應(yīng)的字符。

char a=97;//如果輸出,將輸出字符a

-->整數(shù)型

了解整數(shù)類型之前,先需要了解計算機中的各類數(shù)字進制表現(xiàn)形式:

二進制:只有1和0兩個值

八進制:0開頭。由0-7表示。

十進制:正常顯示,即日常使用的數(shù)字類型。不能以0開頭(0除外)。

十六進制:0x或者0X開頭。0-9由數(shù)字表示,10-15由a-f表示。

進制間的轉(zhuǎn)換:

學會各類進制與十進制之間的轉(zhuǎn)換,則各種之間也就明了了。

二進制與十進制的轉(zhuǎn)換。

二進制111則表示為1*22+1*21+1*20=4+2+1=7(2的平方,2的1次方,2的0次方)

八進制與十進制的轉(zhuǎn)換。

八進制01011=1*83+0*82+1*81+1*80=512+0+8+1=521(8的立方,8的平方,8的1次方,8的0次方)

八進制031=3*81+1*80=25(8的1次方,8的0次方)

十六進制與十進制的轉(zhuǎn)換

十六進制0X25=2*161+5*160=32+5=37(16的1次方,16的0次方)

十六進制0Xb01e=b(11)*163+0*162+1*161+e(14)*160=45056+0+16+14=45086

重點只要會二進制與十進制互轉(zhuǎn)即可。

網(wǎng)上有個段子,說是一個程序員522那天送花給女朋友,被拒絕了。通過心算后得出

522=5*16平方+2*16的1次方+2*16的0次方=1280+32+2=1314得出522是程序員的情人節(jié)。之后把花扔了,覺得女方配不上這么聰明的男人。

整數(shù)型數(shù)據(jù)類型根據(jù)所占內(nèi)存大小不同分為byte,short,int,long。(在內(nèi)存中的二進制表示時所有的第一位均做符號位 1負0正)。在代碼中,整數(shù)型的默認類型是int,浮點型默認類型是double。

負數(shù)的二進制表示法:

原碼,反碼,補碼。

-5如何表示?

5的二進制為:0000 0000 0000 0000 0000 0000 0000 0101,此為原碼。

其反碼為:1111 1111 1111 1111 1111 1111 1111 1010,此為反碼。

補碼為反碼+1:1111 1111 1111 1111 1111 1111 1111 1011。這就是-5。

負數(shù)的表示即為對應(yīng)的補碼。

byte 8位;表示2的8次方個數(shù):負2的7次方到正2的7次方減1

short 16位;? 同上

int 32位 ;同上

long? 64位;? 同上

由于相應(yīng)的數(shù)據(jù)類型只能取相應(yīng)范圍內(nèi)的數(shù)值,因此,在定義變量并初始化時,若變量取值超出其相應(yīng)范圍,則會發(fā)生報錯或者發(fā)生相應(yīng)的強制類型轉(zhuǎn)換。看如下代碼


byte b=12;

byteb2=129;//false(超過范圍)byte最大為127

char c1='a';

String s="a";

int i1=c1;//char 既能當字符也能當數(shù)字。

inti2=s;//false

String不能當數(shù)字用,因為它是一個引用,是個地址。

int i3=20;

b=i3;//false 變量和常量的區(qū)別。不能保證i3在byte范圍內(nèi),因為i3可能會有改變,20永遠是20,i3不一定。


--> 浮點型

float 32位

double 64位。

二者都是近似值。

單精度

float f=1.0//錯誤,默認為double

雙精度。

二者的取值范圍和精度是不同的 float的精度是6位有效數(shù)字,取值范圍是10的-38次方到10的38次方,float占用4字節(jié)空間 double的精度是15位有效數(shù)字,取值范圍是10的-308次方到10的308次方,double占用8字節(jié)空間。

--> 基本數(shù)據(jù)類型強制類型轉(zhuǎn)換

double d1=1.0;

double d2=0.54;

float f;

f=(float)(d1-d2);

用于解決上面的問題。但仍然不要超過各類型的范圍。上面成功的是自動類型轉(zhuǎn)換。

所謂自動類型轉(zhuǎn)換:

1、整數(shù)之間,小范圍向大范圍自動轉(zhuǎn)換。

2、整數(shù)向浮點自動轉(zhuǎn)。

3、范圍以內(nèi)的常數(shù)自動轉(zhuǎn)。

問題:如下將輸出什么?

byte b=(byte)128;

System.out.println(b);

答案:-127,為什么?

大類型轉(zhuǎn)小類型時將截斷

Java中數(shù)字默認為Int類型,占32位。因此,在內(nèi)存中128是如下表示:

0000 0000 0000 0000 0000 0000 1000 0000

在將128轉(zhuǎn)換為byte類型時,只占8位。在內(nèi)存中為

1000 0000 即為-127。

強制類型轉(zhuǎn)換時,只截取當前位數(shù)內(nèi)的字符進行截取。

6、運算符

-->賦值運算:=可以引申出來+=,-=,*=等等,。


int a = 5;

int b = 2;

double d = 5;

double d2= 5.1;

int i=10;

i+=3*5;//i=25,先計算右邊,再與左邊進行賦值運算

byte b1 = 2;

byte b2 = 3;

b1 += b2;// 賦值語句

b1 = (byte) (b1 + b2);// java把關(guān)于byte

short的運算都轉(zhuǎn)成int以后再進行運算


練習:用Scanner輸入一個秒級數(shù)字,將其轉(zhuǎn)換成X小時X分X秒


? ? ?Scanner sc=newScanner(System.in);

????? int time=sc.nextInt();

????? int h=time/3600;

????? int m=time%3600/60;

????? int s=time%3600%60;

????? System.out.println(h+"小時"+m+"分"+s+"秒");

????? sc.close();


-->算術(shù)運算符:+ = * / %


System.out.println(a+b);//7

System.out.println(b-d);//-3.0

System.out.println(a * b);//10

System.out.println(d / b);//2.5

System.out.println(d2 % b);//1.09999

System.out.println(d % b);//1.0


-->比較運算符:> >= < <= == !=。


? ? ?int a=10;

????? int b=20;

????? System.out.println("a="+a+",b="+b+",那么:");

????? System.out.println("a>b:"+(a>b));//false

????? System.out.println("a=b:"+(a==b));//false

????? System.out.println("a

????? System.out.println("a!=b:"+(a!=b));//true


-->邏輯運算符:

短路運算:(且&&? 或||),非短路運算:(且& 或 |)

短路運算中,當前面的一個表達式可以決定結(jié)果時,后面的語句將不再執(zhí)行,非短路運算會繼續(xù)判斷后面的。因而短路運算其效率高于非短路運算。


? ? ? int a=10;

????? int b=20;

????? boolean flag1=((a=5)>12)&&((b=3)>9);

? ? ?System.out.println("flag1:"+flag1);//false

????? System.out.println(a);//5

????? System.out.println(b);//20,表明&&后面未執(zhí)行


? ? ?int a=10;

????? int b=20;

????? boolean flag1=((a=5)>12)&((b=3)>9);

????? System.out.println("flag1:"+flag1);//false

????? System.out.println(a);//5

????? System.out.println(b);//3,表明&后面的也執(zhí)行了


-->位運算:& | ^

&(AND)|(OR) ^(XOR異或) ~(補碼)按位取反=加1再取反(全1的補碼是-1)。只要掌握好負數(shù)的內(nèi)在占位情況就好計算。


int a=5&-4;//將5與-4進行與運算。

????? System.out.println(a);//4

????? //內(nèi)存中格式為:

????? //5是????? 0000 00000000 0000 0000 0000 0000 0101

????? //-4是?? 1111 1111 11111111 1111 1111 1111 1100

????? //&結(jié)果? 0000 0000 0000 0000 0000 0000 0000 0100



-->移位運算:

>>右移:全部向右移動,移到右段的低位被舍棄,最高位則移入原來最高位的值。右移N位相當于除以2n。

>>>無符號右移:同上,只是最高位變成0.因此負數(shù)的移位與>>有區(qū)別,正數(shù)與>>無區(qū)別。

<<左移:全部向左移動,右側(cè)低位補0。

移位運算一般而言都是int類型(默認類型),因此,當移位位數(shù)超過32位時,取對32的求余即可。Java中默認理解為超過32位的移位無意義。


? ? ?System.out.println(7 >> 2);

????? //00000111-->00000001??相當于7/(2*2)=1

????? System.out.println(7 >> 34);

????? // java移位時,先將移位數(shù)%32,此處34%32=2。由相當于7>>2

????? System.out.println(7 >> -30);

????? // 負數(shù)次數(shù)時,先加上32倍數(shù),轉(zhuǎn)成正數(shù)以后才移位

????? System.out.println(-7 >> 2);// -2

????? //負數(shù)的高位仍然是1

????? //1111 1111 1111 1111 1111 1111 1111 1001

????? //右移2位變成 1111 1111 1111 1111 1111 1111 1111 1110為-2

????? System.out.println(-7 >>> 2);

????? //無符號右移,最高位補為0

????? //右移2位,最高位補為0?? 0011 1111 1111 1111 1111 1111 1111 1110為1073741822


-->自增、自減運算 ++ --

++ 變量自增

--變量自減

i++相當于i=i;i+1;

++i相當于i=i+1;


? ? ?int i = 2;

????? System.out.println(i++);//2

????? System.out.println(i);//3

????? int b = i++ + ++i;//3+5

????? System.out.println(b);//8

????? for(int j=0;j<10;j++){

????? ??? i = i++;//i++;i=5;

????? }

????? System.out.println(i);//5


-->三目運算 ?:


int a = 3;

double b = 5.0;

//可以轉(zhuǎn)換類型的就轉(zhuǎn)換成同一類型

System.out.println((a>b)?b:a);//3.0

//不可以轉(zhuǎn)換類型的就保持原有類型

System.out.println((a>b)?"ok":a);//3,早期版本可能不支持如此寫法。


-->運算符的優(yōu)先級:

=最低,其余根據(jù)需要添加相應(yīng)的括號()即可。()最高。

7、控制語句

If(){}else{}

If(){}else if(){}

If(){……if(){}……}


int a = 3;

????? int b = 5;

????? if(a>b){//分支{}如果只有一個語句{}可以省略,但不建議。

????? ???System.out.println("a大");

????? }else if(a

????? ???System.out.println("b大");

????? }else{

????? ???System.out.println("a b相等");

????? }


三重以上的選擇時,建議使用switch進行判斷。

switch(變量){//變量類型固定:byte,short,char,int,enum,String.其中enum須在jdk5.0及以上,Sting需要jdk1.7以上。

case:break; //每一個case后面跟一個有限值,后面再跟語句,最后跟一個break;用break跳出語句。

default: //其它值,不在case中的任何一個。

}//有限的值(case)加上一個default;default如果放在最后,就不要加break;如果放在其它位置,則要加break;case后的值必須是常量。

//最后一個分支可以不加 break;除此之外其它的都要加break;


Scannersc = new Scanner(System.in);

????? System.out.println("請輸入您的分數(shù)");

????? int y = sc.nextInt();

????? switch (y) {

????? case 5:

??????? System.out.println("優(yōu)");

??????? break;

????? case 4:

??????? System.out.println("良");

??????? break;

????? case 3:

??????? System.out.println("及格");

??????? break;

????? case 2: // System.out.println("不及格"); break;

????? case 1:

??????? System.out.println("重修");

??????? break;

????? default:

??????? System.out.println("輸入錯誤");

??????? break;

????? }

????? sc.close();


8、循環(huán)語句

程序執(zhí)行到控制語句時,會有多個選擇,選擇哪一個取決于選擇條件,選擇完成后只會執(zhí)行某一個條件下的語句,但循環(huán)是不一樣的。

循環(huán):反復做同一件事情的時候,如,打印1-10000;找出1-10000里面所有的奇數(shù)。

for/while/do while其中for/while是等價的。do while不同。

-->for

for( ; ; ){}小括號內(nèi)是三段論,第一段循環(huán)變量(用于控制循環(huán)次數(shù)的變量)的聲明和初始化。第二段放條件,第三段放循環(huán)變量的變化。大括號內(nèi)書寫循環(huán)體(反復執(zhí)行的語句);


for (int i = 1; i <= 10; i++) {

??????? System.out.println("i=" + i);

????? }


死循環(huán):按中止按鈕或者在控制臺中按ctrl+c,或者ctrl+d結(jié)束循環(huán)。for(;;)

循環(huán)次數(shù)不定的循環(huán):for(;;){循環(huán)語句; if(條件){break;}}。break可以跳出循環(huán):


Scannersc=new Scanner(System.in);

????? for(;;){

????? Stringstr=sc.next();

????? ?if(str.equals("bye")) break;

????? System.out.println("你說:"+str);

????? }

????? //break后到這里,已經(jīng)跳出循環(huán)。

????? sc.close();


練習

1、 用兩種方式輸出1-100內(nèi)的奇數(shù)。

2、 做一個猜數(shù)據(jù)的小游戲,生成1-100的隨機數(shù),然后猜,用鍵盤輸入int,提示輸入的數(shù)字是更大還是更小,如果猜對就輸出猜對了,并輸出猜了幾次并退出程式。

3、 打印一個圖形,如下所示:

*

**

***

****

*****

4、 打印一個圖形,第一行一個*,第二行3個*,第三行5個星,打印幾行由系統(tǒng)輸入決定。

5、 打印1-100里面的所有質(zhì)數(shù),所謂質(zhì)數(shù),即只可以被1和其本身整除的數(shù)字。

6、 打印九九乘法表。

7、 有36人,36塊磚,男人每人能搬4塊,女人每人搬3塊,小孩2人搬一塊,要求一次把所有的磚搬走。三類人都需要的前提下,問幾個男人,幾個女人,幾個小孩?


Random rand=new Random();

?? int num=rand.nextInt(100)+1;

?? Scannersc=new Scanner(System.in);

?? int count=0;

?? for(;;) {

????? count++;//每進入一次循環(huán),則統(tǒng)計一遍次數(shù).

????? System.out.println("請輸入一個數(shù)字:");

????? int guess=sc.nextInt();

????? //通過比較,判斷所猜數(shù)字是否與系統(tǒng)數(shù)字一致

????? if(guess

???????? System.out.println("小了");

????? }else if(guess>num) {

???????? System.out.println("大了");

????? }else {

???????? System.out.println("恭喜你,猜對了!總共猜了"+count+"次!");

???????? if(count<5) {

??????????? System.out.println("你可以去買彩票了!");

???????? }

???????? break;//猜對后,結(jié)束循環(huán)退出程序.

????? }

?? }

????? sc.close();


-->break與continue的區(qū)別

break結(jié)束當前循環(huán),continue結(jié)束當前這個變量所在的循環(huán),繼續(xù)下一變量的判斷。


as: for (int i = 1; i <= 9; i++) {

??????????? for (int j = 1; j <= i; j++) {

??????????????? if (i * j % 12 == 0) {

???????? ???????? continue;//i*j=12的倍數(shù)時,不打印,繼續(xù)下一循環(huán)。

??????????????? }

??????????????? if (i * j % 28 == 0) {

?????????????????? break;//i*j=28的位數(shù)時,退出當前里面的這個for循環(huán)

??????????????? }

??????????????? if (i * j % 32 == 0) {

?????????????????? break as;//退出整個循環(huán)

??????????????? }

??????????????? System.out.print(j + "*" + i + "=" + (i * j) + "? ");

??????????? }

??????????? System.out.println();//一個小循環(huán),則換一行

???????? }

?? }


-->while

while(條件){循環(huán)語句;循環(huán)變量變化;}


int i = 0;

????? //打印100以內(nèi)的奇數(shù)

????? while (i < 101) {

???????? if (i % 2 != 0)

??????????? System.out.print(i + " ");

???????? i++;

????? }


while死循環(huán):while(true){循環(huán)語句;}

次數(shù)不確定的while循環(huán):while(true){循環(huán)語句;if(條件) break;}

do…while:do {循環(huán)體;循環(huán)變量變化;}while(true);此種循環(huán)循環(huán)體至少執(zhí)行一次,無論條件是否滿足。


int i = 1;

????? do {

???????? System.out.println(i);

???????? i++;

????? }while (i < 0);


????? System.out.println("*********");


????? for (int j = 1; j < 0; j++) {

???????? System.out.println(j);

????? }


練習:

1、 給定一個整數(shù),將其反向輸出,如給定1234,則輸出4321.

2、 打出空心菱形。

3、 打印空形矩形。

4、 打印空心三角形。

5、 打一條內(nèi)三角形。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Java經(jīng)典問題算法大全 /*【程序1】 題目:古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子...
    趙宇_阿特奇閱讀 2,075評論 0 2
  • 【程序1】 題目:古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔...
    葉總韓閱讀 5,223評論 0 41
  • 1 關(guān)鍵字 1.1 關(guān)鍵字的概述 Java的關(guān)鍵字對java的編譯器有特殊的意義,他們用來表示一種數(shù)據(jù)類型,或...
    哈哈哎呦喂閱讀 771評論 0 0
  • 寶寶又要吃奶?又雙要吃奶?又雙叒要吃奶? 寶寶咋醒了?又雙醒了?又雙叒醒了? 寶寶你能好好吃么?扯啊扯的,媽媽很疼...
    娃咋養(yǎng)閱讀 1,176評論 0 0
  • 在JavaScript中 使用 0-9 這些數(shù)字表示 number 使用 “ ” 或者 ' ' 引號括起來的表示 ...
    loster閱讀 240評論 0 0

友情鏈接更多精彩內(nèi)容