Java基礎語法知識你真的都會嗎?

undefined

第一階段 JAVA基礎知識

第二章 Java基礎語法知識

在咱們開始講解程序以前,命名規範是咱們不得不提的一個話題,雖然說命名本應該是自由的,可是仍然有必定的「潛規則」,經過你對命名的書寫,別人一眼就能看出你是否是一個「行家」。咱們先來看一下有哪些規則。java

A:包名: 所有小寫用.隔開 eg: com.ideal.www
B:類名接口: 類的首字母大寫。若是類名由若干個單詞組成,那麼每一個單詞首字母大寫。
C: 方法變量名: 全部的方法名都應該小寫字母開頭。若是方法名 含有若干個單詞,那麼其後每一個單詞首字母大寫。
D: 常量名: 所有大寫 用 _ 隔開
E:原文件名: 原文件名必須和類名相同 類名.java
F: 主方法入口 全部的Java 程序由public static void main(String []args)方法開始執行。

咱們暫時對於這些名詞尚未什麼概念,可是對於咱們前一篇所寫到的HelloWorld例程來講,咱們就用到了 類名、主方法這兩點。編程

img

HelloWorld 做爲類名天然須要知足首字母大寫,又因爲HelloWorld由兩個單詞組成,因此兩個單詞首字母分別大寫。segmentfault

2.1關鍵字

(1)被Java語言賦予特定含義的單詞,他們有着特定的使用位置和方式windows

(2)特色:編輯器

所有小寫。ide

(3)注意事項:svg

A:goto和const做爲保留字存在。工具

B:相似於Notepad++、sublime等編輯器對關鍵字有特殊顏色標記學習

(這是兩款和好用的編輯器,能夠簡單的理解爲可使代碼帶着好看色彩的高級記事本)大數據

類別 關鍵字 說明
訪問控制 private 私有的
protected 受保護的
public 公共的
類、方法和變量修飾符 abstract 聲明抽象
class
extends 擴充,繼承
final 最終值,不可改變的
implements 實現(接口)
interface 接口
native 本地,原生方法(非Java實現)
new 新,建立
static 靜態
strictfp 嚴格,精準
synchronized 線程,同步
transient 短暫
volatile 易失
程序控制語句 break 跳出循環
case 定義一個值以供switch選擇
continue 繼續
default 默認
do 運行
else 不然
for 循環
if 若是
instanceof 實例
return 返回
switch 根據值選擇執行
while 循環
錯誤處理 assert 斷言表達式是否爲真
catch 捕捉異常
finally 有沒有異常都執行
throw 拋出一個異常對象
throws 聲明一個異常可能被拋出
try 捕獲異常
包相關 import 引入
package
基本類型 boolean 布爾型
byte 字節型
char 字符型
double 雙精度浮點
float 單精度浮點
int 整型
long 長整型
short 短整型
變量引用 super 父類,超類
this 本類
void 無返回值
保留關鍵字 goto 是關鍵字,但不能使用
const 是關鍵字,但不能使用
null

img

2.2 標識符

(1)就是給類,接口,方法,變量等起名字的字符序列

(2)組成規則:

A: 首字符:字母(A-Z、a-z)、美圓符($)、下劃線(_)

B: 首字符以後:字母(A-Z、a-z)、美圓符($)、下劃線(_)或者數字的任何字符組合

(3)注意事項:

A:不能以數字開頭

B:關鍵字不能做爲標識符

C:區分大小寫

img

2.3 註釋

( 討厭寫本身寫註釋,討厭別人不寫註釋 ~)

註釋就是爲了方便本身或別人後期閱讀這部分代碼的提示,可以快速的讓閱讀者,瞭解這部分代碼的做用。

(1)註釋就是對程序進行解釋說明的文字(不會被編譯運行)

(2)分類:

A:單行註釋 // + 內容

B:多行註釋 /*內容*/

C:文檔註釋 /* / 被javadoc工具解析成一個說明書,後期會講到

在咱們前期的學習中,只須要掌握基本的單行註釋多行註釋便可

註釋規範:

一、類註釋 註釋模板以下:

/**

* Copyright (C), 2006-2010, ChengDu Lovo info. Co., Ltd.

* FileName: Test.java

* 類的詳細說明

*

* @author 類建立者姓名

* @Date 建立日期

* @version 1.00

*/

二、屬性註釋註釋模板以下:

/* 提示信息 /private String strMsg = null;

三、方法註釋 註釋模板以下:

/**

* 類方法的詳細使用說明

*

* @param 參數1 參數1的使用說明

* @return 返回結果的說明

* @throws 異常類型.錯誤代碼 註明今後類方法中拋出異常的說明

*/

四、構造方法註釋 註釋模板以下:

/**

* 構造方法的詳細使用說明

*

* @param 參數1 參數1的使用說明

* @throws 異常類型.錯誤代碼 註明今後類方法中拋出異常的說明

*/

五、方法內部註釋 在方法內部使用單行或者多行註釋

(根據實際狀況添加)註釋模板以下:

//背景顏色Color bgColor = Color.RED

img

2.4 常量

(1) 常量就是在程序執行的過程當中,其值不發生改變的量(例如π、重力加速度,光速等)

而在Java中咱們使用final關鍵字來修飾常量

Eg:final double PI = 3.1415927

習慣 :雖然常量名也能夠用小寫,但爲了便於識別,一般使用大寫字母 表示常量(隨大流就好啦)

(2)分類:

A:字面值常量

B:自定義常量

字面值常量:

C++ primer:像42這樣的值,在程序中被看成字面值常量:字面值是由於僅能用它的值稱呼它,常量是由於它的值不能修改。每一個字面值都有相應的類型,例如:0是int型,3.14159是double型。字面值僅存在於內置類型,沒有類類型的字面值。所以,也沒有任何標準庫類型的字面值

簡單理解:例如 int a = 6; 它的字面值就是a, 它的實際值是 6

(3)字面值常量

A:字符串常量 "bwh"

B:整數常量 666,888

C:小數常量 123.456

D:字符常量 'a','Z','0'

E:布爾常量 true,false

F:空常量 null

(4)在Java中針對整數常量提供了四種表現形式

A:二進制 由0,1組成。以0b開頭

B:八進制 由0,1,...7組成。以0開頭

C:十進制 由0,1,...9組成。整數默認是十進制。

D:十六進制 由0,1,...9,a,b,c,d,e,f(大小寫都可)組成。以0x開頭

A:常見進制

img

常見進制的轉化:

常見進制 → 十進制 : 忽略前綴和0,對1進行運算

0b10101 (二進制)

= 12^4 + 12^3 + 1*2^0

= 16 + 14 + 1

= 21

0123 (八進制)

= 18^2 + 28^1 + 3*8^0

= 64 + 16 + 3

= 83

0x3c (十六進制)

= 316^1 + 1216^0

= 48 + 12

=60

十進制 → 常見進制 :

除基取餘,直到商爲0,餘數反轉。(轉換幾進制就將基數除以幾)

其餘進制的轉換能夠經過十進制這個中間進制進行轉換

熟悉2的倍數對咱們也是頗有幫助的

B: 補充:補碼、原碼、反碼

爲何咱們要學習這些呢?首先咱們要知道,在計算機內,有符號數有三種表示方法,源碼、反碼、和補碼。而全部的數據運算都是採用補碼進行的。它的重要性可想而知。

一、原碼:二進制點表示法,最高位爲符號位,「0」表示正,「1」表示負,其 餘位置表示數值大小,可直觀反映出數據的大小。

二、反碼:解決負數加法運算問題,將減法運算轉換爲加法運算,從而簡化運算規則。

三、補碼:解決負數加法運算正負零問題,彌補了反碼的不足。

img

7的二進制 :111

原碼 正數的原碼最高位是0負數的原碼最高位是1其餘的是數值位
符號位 數值位數
+7 0 0000111(補夠8個字節,在左面補4個0)
-7 1 0000111
反碼 正數的反碼與原碼相同負數的反碼與源碼符號位相同,數值位取反 1 → 0 、 0 → 1
符號位 數值位數
+7 0 0000111(補夠8個字節,在左面補4個0)
-7 1 1111000
補碼 正數的補碼與原碼相同負數的補碼是在反碼的基礎上+1
符號位 數值位數
+7 0 0000111(補夠8個字節,在左面補4個0)
-7 1 1111001

img

2.5 變量

咱們剛介紹了什麼是常量,那麼什麼是變量呢,顧名思義,變量就是在某個範圍內能夠變化的量,其實它就是一個被你所定義的變量,在一個數據類型的約束下,能夠在數據類型所容許的範圍內進行,被賦值,運算,等操做。

(變量能夠不在定義的時候就賦初始化值,可是在運行編譯時,若是被編譯變量仍沒被賦值,則是沒有意義的,編譯器將會報錯

img

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

注意:能夠在一行中聲明多個變量,可是咱們不推薦這種方式。

逐一聲明變量能提升程序的可讀性

img

變量類型:

· 局部變量

· 實例變量

· 類變量(靜態變量)

局部變量:定義在方法、構造方法、或者語句塊中的變量

(生而帶來 死而帶去 只能活在本身的世界)

只能在必定範圍內使用的變量,隨着這個方法等的結束變量也就無效了

對於局部變量的理解,剛入門可能也不會太深,等後面幾篇咱們學習到方 法後,再回過頭來看這部份內容,就會有一種明瞭的感受。

實例變量:聲明在類中,但在方法、構造方法和語句塊以外

實例變量對於類中的方法、構造方法或者語句塊是可見的。通常狀況下應該把實例變量設爲私有。經過使用訪問修飾符可使實例變量對子類可見

暫時在學習基礎語法知識的時候能夠暫時忽略實例變量這部份內容,這部份內容主要被使用在面向對象的部分,可是極其重要。

過了好久,你也不肯回頭看,學習的進度就會很慢~

類變量: 後期補充

img

2.6 數據類型

❤ 2.6.1

Java是一種強類型的語言,針對每一種數據都定義了明確的數據類型(就是將一些值的範圍作了約束,從而爲不一樣類型的值在內存中分配不一樣的內存空間)

img

注意:在此部分暫時不用深究引用類型,着重認熟悉一下基本數據類型,引用類型在面向對象的部分會詳細解釋。

咱們來看一下八種基本數據類型的詳細說明:

Name Size* Range*
byte 1byte\ 8bit 存放的數據範圍是-128~127之間
short 2bytes\ 16bit 最大數據存儲量是65536,數據範圍是-32768~32767之間。
int 4bytes\ 32bit 數據範圍是負的2的31次方到正的2的31次方減1。
long 4bytes\ 64bit 數據範圍爲負的2的63次方到正的2的63次方減1。
float 4bytes\ 32bit 數據範圍在3.4e-45~1.4e38,直接賦值時必須在數字後加上f或F
double 8bytes\ 64bit 數據範圍在4.9e-324~1.8e308,賦值時能夠加d或D也能夠不加。
boolean 只有true和false兩個取值。
char 2bytes 存儲Unicode碼,用單引號賦值。

注意:

  1. 整數默認是int類型

聲明long型常量的時候長整數要加L或者l

如:long l = 66666666666666L//不然報錯

  1. 浮點數默認是double(雙精度浮點型)

聲明float型(單精度的浮點數)要加F或者

如:double d = 521.1 //正確 float f = 52.1f //必須加f

  1. boolean通常用來進行邏輯運算→流程控制中
  2. Byte、short類型被賦值時,其實接收的是一個int類型的值,不 在範圍內即報錯
  3. 一箇中文字符佔據兩用字節,Java中字符能夠存儲一個漢字,是 由於Java字符采用Unicode編碼,每一個字符佔用兩個字節。
  4. Java中提供了三個特殊的浮點數值,正無窮大(正數除以0),負無窮大(負數除以0),NaN(不是一個數字,0除以0,負數開根號)

img

❤ 2.6.2數據類型轉換

通常來講,咱們在運算的時候,要求參與運算的數值類型必須一致

(1)默認轉換(從小到大的轉換)—自動類型轉換

A:byte,short, char ( → int → long → float → double )

B:byte,short, char 相互之間不轉換

他們參與運算首先轉換爲int類型

疑惑:爲何 float(4個字節)在 long(8個字節)後面

A: 它們底層的存儲結構不一樣

B: float表示的數據範圍比long範圍要大

long:2^63-1

float:3.410^38 > 210^38 > 28^38 > 22^3^38

= 2*2^144 > 2^63 -1

例子一 :低精度byte到高精度int 會根據默認轉換,自動轉換類型

img

img

例子二 :高精度int到低精度byte 可能會損失精

img

img

byte數據類型是 1個字節、8位

int 數據類型是 4個字節、32位

可是有沒有辦法可以讓咱們輸出這種運算的結果呢?這就須要咱們用到強制類型轉換的知識。

(2)強制類型轉換

格式:目標數據類型 變量 = (目標數據類型)(被轉換的數據)

注意:不要隨便的去用強制轉化,由於它隱含了精度損失的問題

在把容量大的類型轉換爲容量小的類型時必須使用強制類型轉換。

例子:

int i = 128;

byte b = (byte)i;

由於byte類型是8位,最大值爲127,因此當int強制轉換爲byte類

型的時候,值128就會致使溢出

很經典的題目 1: 永遠作不對系列

img

第一句: byte類型的 b1 ,b2相加 自動類型轉換爲 int型

int類型的(b1 + b2) 賦值給byte類型的b

屬於大單位轉換爲小單位 可能形成精度損失

第二句: 3 和4 爲常量,編譯過程當中 先把結果計算出來,

而後看是否在byte的範圍內,若是在就不報錯

總結:

變量相加,會首先看類型問題,最終把結果賦值也會考慮類型問題

常量相加,首先作加法,而後看結果是否在賦值的數據類型範圍內,若是不是,才報錯

很經典的題目 2: 永遠不會作系列

求輸出結果:

img

分析過程:

咱們想要知道結果是什麼,就應該知道是如何計算的

而咱們又知道計算機中數據的運算都是補碼進行的

獲得補碼,首先要計算出數據的二進制

A: 求出130的二進制 10000010

130 是一個整數 因此補齊4個字節 (一個字節8位)

0000000 00000000 00000000 10000010

B: 作截取操做,截成byte類型的了

10000010

這個結果是補碼

​ C已知補碼求原碼。

符號位 數值位
補碼: 1 0000010
反碼: 1 0000001
原碼 1 1111110
11111110轉換爲十進制爲 -126

img

2.7 字符

字符是指在計算機中所使用的 字母、數字、漢字、和符號,表示時用單引號包含在內。

例如: ‘5’ ‘R’ ‘。’均是字符

在內存中,字符數據以ASCII碼存儲 ,即以整數表示

須要記憶的常見字符‘a’→ 97 ‘A’→ 65 ‘0’→ 48

其他字符依次遞推便可

img

一種特殊的字符——轉義字符

轉移字符 = 轉義 + 字符 → 轉變含義的字符(再也不是原本字符的意思)

結構: + 一些特定的字母

img

其中 n (換行)和 t(製表符)最爲經常使用

(一)下面兩種輸出變量love的方法均有換行效果

img

補充: r和 n的區別

回車 r 意思是光標從新回到本行的開頭

換行 n 光標移動到下一行不必定是行首,取決於其後是否還有內容

(由於咱們經常使用在一行的句末,因此會誤覺得會在下一行的行首)

針對不一樣系統的換行符:

蘋果系統Mac n

Unix、Linux系統 n

Windows系統 rn

在windows中,若是在兩端字符串的中間使用轉義字符,只有使用 rn才能真正的達到了咱們平常操做中,回車換行的那種效果

(二)t是補全當前字符串長度到8,最少1個,最多8個空格

因此靈活的使用製表符能夠達到對齊兩行數據的做用

img

img

img

2.8 字符串

字符串是由零個或者多個字符組成的有限序列,它是編程中表示文本的數據類型

字符串使用的時候用雙引號括起來

String並非Java中的基本方法,而是一個類。

咱們在此部分不作過多的介紹,但要知道,String類是一個很是很是重要的類!!!

咱們會在後面有專門一大篇介紹

img

img

總結:

字符串和其餘數據作加法運算的時候,結果是字符串類型。

這裏的 + 不是加法運算,而是字符串鏈接符

img

2.9 運算符

undefined

算數運算符

賦值運算符

比較運算符

邏輯運算符

位運算符

三目運算符

01

img

❤ 2.9.1 算數運算符: + - * / % ++ --

A: 整數相除只能獲得整數(想獲得小數 需將其中任意的一個數據變成浮點 數)

Eg: int x = 3;

int y = 4;

System.out.println(x/y); →System.out.println(x * 1.0 / y );

B: /除法求商 %除法取餘

C: ++, -- 就是對變量進行自增1或者自減1. 參與運算 前置後置有區別

來一道例題,你們就整明白了:

Eg : int x = 4;

int y = ( x++ ) + ( ++x ) + ( x * 10);

System.out.println( y );

//首先 x後置++ 因此括號1中 x運算時取4 而後自增爲5

其次 x前置++ 因此括號2中 x = 6

最後 x 10 = 6 10 = 60

​ Output y → 4 + 6 + 60 = 70

img

❤2.92 賦值運算符

基本的賦值運算符:=

擴展的賦值運算符:+=,-=,*=,/=,%=

在剛開始的時候咱們書寫賦值語句,仍是推薦使用 基本的方法,待到往後熟練,再轉爲擴展的賦值語句

img

很經典的題目 1: 你猜到底對不對

img

編譯第一個語句報錯:

img

編譯第二個語句沒有報錯:(? ? ?)

擴展的賦值運算符其實隱含了一個強制類型轉換

s += 1; 不是等價於 s = s + 1 而是等價於 s = ( s的數據類型 ) (s + 1);

img

❤*2.9.3關係運算符 ==, != , > , >= , < , <=

== 不管你的操做是簡單仍是複雜木結構是boolean類型

img

Output → flase

img

❤2.9.4 邏輯運算符 & | && || !

img

邏輯運算符用於鏈接布爾型表達式,在java中。不能夠寫成3 < x < 6 應該寫 成 x > 3 & x < 6

&&和&的區別? 同理||和|的區別

A: 最終結果同樣

B: &&具備短路做用。左邊是false,右邊不執行。(&&效率更高

eg:int x = 3; int y = 4;

boolean b1 = ( ( x++ = 3) ) && ( y++ = 4 )

結果: x = 4 ,y = 4 ,true

img

❤2.9.5 位運算符

(3 & 4) (3 | 4) (3 ^ 4) (~3) (3 << 2) (>>) (>>>)

由於是位運算,因此咱們須要把數據換算成二進制

img

^的特色:一個數據對另外一個數據位異或兩次,該數自己不變

很經典的題目 1: 交換兩個整型數的值

作一個靈活的交換者

img

img

· 咱們先直接給出位運算的結論

img

這是詳細的運算過程,可是咱們使用時直接用結論便可

img

img

img

題目:

請用最有效率的方式寫出計算2乘以8的結果?

2 * 8

2 << 3

img

❤2.9.6 三目運算符

這一部分要與下面立刻要學習的if語句進行對照學習

知足表達式則執行冒號前的表達式,反之則時候後面的

格式 : (條件表達式)?(條件真的表達式):(條件假的表達式)

條件表達式:結果是一個boolean型

Eg: 將a,b 中的較小數賦值給x

x = a < b ? a : b → if (a < b) x = a; else x = b

img

img

2.10 鍵盤錄入

咱們以前所寫的程序中,數據的值都是固定的,在源碼中就寫好的,而咱們有時候想要讓用戶來決定一些值的具體數據(例如:學生成績錄入),因此鍵盤錄入就是讓用戶輸入一些值,使得程序更加靈活。

如今咱們對於導包以及對象的概念仍然比較模糊,可是咱們在介紹別的知識的時候也會頻繁的用到,因此你們暫時按照如下的格式記憶下來。

A:導包:

格式:import java.util.Scanner;

位置:在class上面

B:建立鍵盤錄入對象

格式:Scanner sc = new Scanner(System.in);

C:經過對象獲取數據

格式: int x = sc.nextint();

String s = sc.nextLine(); (字符串錄入)

img

img

2.11 選擇結構(分支結構)

· if 語句

· switch 語句

認識選擇結構後咱們的程序就會變得頗有趣了,咱們先來學習一下最多見的If條 件語句

(一) if語句

img

更正:知足就執行,不知足就出去

img

咱們對照三元運算符和if語句,這兩個是否是徹底同樣的呢?

三元運算符的操做均可以使用if語句改進,反之不成立

何時不成立呢?

當if語句控制的語句體是一條輸出語句的時候,就不成立。

由於三元運算符是一個運算符,必需要求有一個結果返回。

而輸出語句卻不能做爲一個返回結果

img

三個數中求最大值:能夠用三目運算 跳轉2.9.6

用if語句實現:

img

(二) switch語句

img

img

img

注意: ·case後面只能是常量,不能是變量,並且不能出現相同的

·default能夠省略 可是通常不建議,

(除非判斷的值是固定的,單選題)

·break 能夠省略,通常不建議

·default能夠出如今switch語句的任意位置

·switch語句的結束條件:

遇到break 或者 執行到程序的末尾

如下條件選用switch

·條件分支有多個

·條件的值是整數或一個字符型

緣由

·若是條件分支太多時用if語句,必定會出現if的嵌套,if嵌套的越多,程序 的開銷就會隨着增大,這樣整個程序的運行效率就必定會大大下降

·switch值比較一次就能夠找出條件的結果

咱們在下面將上面的if成績例程改成switch版本是否是簡潔了不少呢

img

img

2.12 循環語句

· for循環

· while循環

· do ...while循環

咱們若是存在大量的重複語句,咱們就可使用循環語句,進行處理。

(一)for循環

img

for 語句不只適用於循環次數明確的狀況,也適用於循環次數不明確的狀況 (知足條件繼續循環,不知足跳出循環)

img

求偶數和還有一種方法:

for ( int x =0; x <= 100; x+=2){

Sum += x

}

求5的階乘

//分析 什麼是階乘 n! = n * ( n -1 ) ( n - 2) ... 3 2 *1

int jc = 1; //定義最終結果變量

for ( int x = 1; x <= 5; x++ ){

Jc *= x

}

在控制檯輸出全部的水仙花數

//水仙花數就是指一個三位數,其各位數字的立方等於該數自己

Eg:153 = 1*11 +555+ 33*3 = 125 +27 =153

經過 for循環咱們能夠實現獲取一個三位數

獲取這個三位數的個十百位上的數據

獲取方法: 假設有一個數據爲 153

Ge: 153 % 10 =3

Shi :153 / 10 % 10 = 5

Bai: 153 / 10 / 10 % 10 = 1

Qian: x/10/10/10%10

Wan :x/10/10/10/10%10

利用嵌套循環:能夠輸出各類樣式的三角形

外循環控制行數,內循環控制列數

System.out.print(* ) → 不換行

System.out.println() → 換行

九九乘法表

img

(二)while循環

img

判斷條件表達式的值爲邏輯真時,重複執行循環體(不知足出去)

死循環:

第一種:

for(;;){}

第二種:

while(true){}

img

While循環和for循環的區別?

使用區別:

for循環 控制條件定義的變量,只能在循環內使用

while 循環 ..... 能夠在循環外使用

由於變量及早的從內存中消失,能夠提升內存的使用效率

另外一種理解:

for 語句不只適用於循環次數明確的狀況,也適用於循環次數不明確的狀況

while 循環適用於循環次數不明確的狀況

(三)do ... while循環

img

先執行循環體,再判斷繼續條件不爲邏輯真時,再執行循環體並判斷條 件, 直到條件爲假轉去執行while下面的語句(不知足出去)

至少要執行一次

img

2.12 跳轉控制語句

·break:中斷

·continue: 繼續

·return: 返回

(一)break 的意思是中斷

適用:switch、循環語句中(循環語句中加入了if判斷的狀況)

跳出單層循環(從最近的封閉循環體中跳出

若想跳出多層循環 須要使用帶標籤的語句

格式:標籤名:語句

img

(二)continue 繼續的意思是

跳出一次循環進入下一次的執行

結束本次循環,進入下次循環的斷定。

img

img

(三)retuen

return關鍵字不是爲了跳出循環體,更經常使用的功能是(結束一個方法),也就是退出一個方法。跳轉到上層調用的方法。

img

結尾:

若是內容中有什麼不足,或者錯誤的地方,歡迎你們給我留言提出意見, 蟹蟹你們 !^_^

若是能幫到你的話,那就來關注我吧!

在這裏的咱們素不相識,卻都在爲了本身的夢而努力 ❤

一個堅持推送原創Java技術的公衆號:理想二旬不止

相關文章
相關標籤/搜索