在咱們開始講解程序以前,命名規範是咱們不得不提的一個話題,雖然說命名本應該是自由的,可是仍然有必定的「潛規則」,經過你對命名的書寫,別人一眼就能看出你是否是一個「行家」。咱們先來看一下有哪些規則。java
A:包名: | 所有小寫用.隔開 eg: com.ideal.www |
---|---|
B:類名或接口: | 類的首字母大寫。若是類名由若干個單詞組成,那麼每一個單詞首字母大寫。 |
C: 方法或變量名: | 全部的方法名都應該小寫字母開頭。若是方法名 含有若干個單詞,那麼其後每一個單詞首字母大寫。 |
D: 常量名: | 所有大寫 用 _ 隔開 |
E:原文件名: | 原文件名必須和類名相同 類名.java |
---|---|
F: 主方法入口: | 全部的Java 程序由public static void main(String []args)方法開始執行。 |
咱們暫時對於這些名詞尚未什麼概念,可是對於咱們前一篇所寫到的HelloWorld例程來講,咱們就用到了 類名、主方法這兩點。編程
HelloWorld 做爲類名天然須要知足首字母大寫,又因爲HelloWorld由兩個單詞組成,因此兩個單詞首字母分別大寫。segmentfault
(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 | 空 |
(1)就是給類,接口,方法,變量等起名字的字符序列
(2)組成規則:
A: 首字符:字母(A-Z、a-z)、美圓符($)、下劃線(_)
B: 首字符以後:字母(A-Z、a-z)、美圓符($)、下劃線(_)或者數字的任何字符組合
(3)注意事項:
A:不能以數字開頭
B:關鍵字不能做爲標識符
C:區分大小寫
( 討厭寫本身寫註釋,討厭別人不寫註釋 ~)
註釋就是爲了方便本身或別人後期閱讀這部分代碼的提示,可以快速的讓閱讀者,瞭解這部分代碼的做用。
(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
(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:常見進制
常見進制的轉化:
常見進制 → 十進制 : 忽略前綴和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」表示負,其 餘位置表示數值大小,可直觀反映出數據的大小。
二、反碼:解決負數加法運算問題,將減法運算轉換爲加法運算,從而簡化運算規則。
三、補碼:解決負數加法運算正負零問題,彌補了反碼的不足。
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 |
咱們剛介紹了什麼是常量,那麼什麼是變量呢,顧名思義,變量就是在某個範圍內能夠變化的量,其實它就是一個被你所定義的變量,在一個數據類型的約束下,能夠在數據類型所容許的範圍內進行,被賦值,運算,等操做。
(變量能夠不在定義的時候就賦初始化值,可是在運行編譯時,若是被編譯變量仍沒被賦值,則是沒有意義的,編譯器將會報錯)
格式: 數據類型 變量名 = 初始化值
注意:能夠在一行中聲明多個變量,可是咱們不推薦這種方式。
逐一聲明變量能提升程序的可讀性
變量類型:
· 局部變量
· 實例變量
· 類變量(靜態變量)
局部變量:定義在方法、構造方法、或者語句塊中的變量
(生而帶來 死而帶去 只能活在本身的世界)
只能在必定範圍內使用的變量,隨着這個方法等的結束變量也就無效了
對於局部變量的理解,剛入門可能也不會太深,等後面幾篇咱們學習到方 法後,再回過頭來看這部份內容,就會有一種明瞭的感受。
實例變量:聲明在類中,但在方法、構造方法和語句塊以外
實例變量對於類中的方法、構造方法或者語句塊是可見的。通常狀況下應該把實例變量設爲私有。經過使用訪問修飾符可使實例變量對子類可見
暫時在學習基礎語法知識的時候能夠暫時忽略實例變量這部份內容,這部份內容主要被使用在面向對象的部分,可是極其重要。
過了好久,你也不肯回頭看,學習的進度就會很慢~
類變量: 後期補充
Java是一種強類型的語言,針對每一種數據都定義了明確的數據類型(就是將一些值的範圍作了約束,從而爲不一樣類型的值在內存中分配不一樣的內存空間)
注意:在此部分暫時不用深究引用類型,着重認熟悉一下基本數據類型,引用類型在面向對象的部分會詳細解釋。
咱們來看一下八種基本數據類型的詳細說明:
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碼,用單引號賦值。 |
注意:
聲明long型常量的時候長整數要加L或者l
如:long l = 66666666666666L//不然報錯
聲明float型(單精度的浮點數)要加F或者
如:double d = 521.1 //正確 float f = 52.1f //必須加f
通常來講,咱們在運算的時候,要求參與運算的數值類型必須一致
(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 會根據默認轉換,自動轉換類型
例子二 :高精度int到低精度byte 可能會損失精度
byte數據類型是 1個字節、8位
int 數據類型是 4個字節、32位
可是有沒有辦法可以讓咱們輸出這種運算的結果呢?這就須要咱們用到強制類型轉換的知識。
(2)強制類型轉換
格式:目標數據類型 變量 = (目標數據類型)(被轉換的數據)
注意:不要隨便的去用強制轉化,由於它隱含了精度損失的問題
在把容量大的類型轉換爲容量小的類型時必須使用強制類型轉換。
例子:
int i = 128;
byte b = (byte)i;
由於byte類型是8位,最大值爲127,因此當int強制轉換爲byte類
型的時候,值128就會致使溢出
很經典的題目 1: 永遠作不對系列
第一句: byte類型的 b1 ,b2相加 自動類型轉換爲 int型
int類型的(b1 + b2) 賦值給byte類型的b
屬於大單位轉換爲小單位 可能形成精度損失
第二句: 3 和4 爲常量,編譯過程當中 先把結果計算出來,
而後看是否在byte的範圍內,若是在就不報錯
總結:
變量相加,會首先看類型問題,最終把結果賦值也會考慮類型問題
常量相加,首先作加法,而後看結果是否在賦值的數據類型範圍內,若是不是,才報錯
很經典的題目 2: 永遠不會作系列
求輸出結果:
分析過程:
咱們想要知道結果是什麼,就應該知道是如何計算的
而咱們又知道計算機中數據的運算都是補碼進行的
獲得補碼,首先要計算出數據的二進制
A: 求出130的二進制 10000010
130 是一個整數 因此補齊4個字節 (一個字節8位)
0000000 00000000 00000000 10000010
B: 作截取操做,截成byte類型的了
10000010
這個結果是補碼
C已知補碼求原碼。
符號位 | 數值位 | |
---|---|---|
補碼: | 1 | 0000010 |
反碼: | 1 | 0000001 |
原碼 | 1 | 1111110 |
11111110轉換爲十進制爲 -126 |
字符是指在計算機中所使用的 字母、數字、漢字、和符號,表示時用單引號包含在內。
例如: ‘5’ ‘R’ ‘。’均是字符
在內存中,字符數據以ASCII碼存儲 ,即以整數表示
須要記憶的常見字符‘a’→ 97 ‘A’→ 65 ‘0’→ 48
其他字符依次遞推便可
一種特殊的字符——轉義字符
轉移字符 = 轉義 + 字符 → 轉變含義的字符(再也不是原本字符的意思)
結構: + 一些特定的字母
其中 n (換行)和 t(製表符)最爲經常使用
(一)下面兩種輸出變量love的方法均有換行效果
補充: r和 n的區別
回車 r 意思是光標從新回到本行的開頭
換行 n 光標移動到下一行,不必定是行首,取決於其後是否還有內容
(由於咱們經常使用在一行的句末,因此會誤覺得會在下一行的行首)
針對不一樣系統的換行符:
蘋果系統Mac n
Unix、Linux系統 n
Windows系統 rn
在windows中,若是在兩端字符串的中間使用轉義字符,只有使用 rn才能真正的達到了咱們平常操做中,回車換行的那種效果。
(二)t是補全當前字符串長度到8,最少1個,最多8個空格
因此靈活的使用製表符能夠達到對齊兩行數據的做用
字符串是由零個或者多個字符組成的有限序列,它是編程中表示文本的數據類型
字符串使用的時候用雙引號括起來
String並非Java中的基本方法,而是一個類。
咱們在此部分不作過多的介紹,但要知道,String類是一個很是很是重要的類!!!
咱們會在後面有專門一大篇介紹
總結:
字符串和其餘數據作加法運算的時候,結果是字符串類型。
這裏的 + 不是加法運算,而是字符串鏈接符
算數運算符
賦值運算符
比較運算符
邏輯運算符
位運算符
三目運算符
01
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
基本的賦值運算符:=
擴展的賦值運算符:+=,-=,*=,/=,%=
在剛開始的時候咱們書寫賦值語句,仍是推薦使用 基本的方法,待到往後熟練,再轉爲擴展的賦值語句
很經典的題目 1: 你猜到底對不對
編譯第一個語句報錯:
編譯第二個語句沒有報錯:(? ? ?)
擴展的賦值運算符其實隱含了一個強制類型轉換
s += 1; 不是等價於 s = s + 1 而是等價於 s = ( s的數據類型 ) (s + 1);
== 不管你的操做是簡單仍是複雜木結構是boolean類型
Output → flase
邏輯運算符用於鏈接布爾型表達式,在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
(3 & 4) (3 | 4) (3 ^ 4) (~3) (3 << 2) (>>) (>>>)
由於是位運算,因此咱們須要把數據換算成二進制
^的特色:一個數據對另外一個數據位異或兩次,該數自己不變
很經典的題目 1: 交換兩個整型數的值
作一個靈活的交換者
· 咱們先直接給出位運算的結論
這是詳細的運算過程,可是咱們使用時直接用結論便可
題目:
請用最有效率的方式寫出計算2乘以8的結果?
2 * 8
2 << 3
這一部分要與下面立刻要學習的if語句進行對照學習
知足表達式則執行冒號前的表達式,反之則時候後面的
格式 : (條件表達式)?(條件真的表達式):(條件假的表達式)
條件表達式:結果是一個boolean型
Eg: 將a,b 中的較小數賦值給x
x = a < b ? a : b → if (a < b) x = a; else x = b
咱們以前所寫的程序中,數據的值都是固定的,在源碼中就寫好的,而咱們有時候想要讓用戶來決定一些值的具體數據(例如:學生成績錄入),因此鍵盤錄入就是讓用戶輸入一些值,使得程序更加靈活。
如今咱們對於導包以及對象的概念仍然比較模糊,可是咱們在介紹別的知識的時候也會頻繁的用到,因此你們暫時按照如下的格式記憶下來。
A:導包:
格式:import java.util.Scanner;
位置:在class上面
B:建立鍵盤錄入對象
格式:Scanner sc = new Scanner(System.in);
C:經過對象獲取數據
格式: int x = sc.nextint();
String s = sc.nextLine(); (字符串錄入)
· if 語句
· switch 語句
認識選擇結構後咱們的程序就會變得頗有趣了,咱們先來學習一下最多見的If條 件語句
更正:知足就執行,不知足就出去
咱們對照三元運算符和if語句,這兩個是否是徹底同樣的呢?
三元運算符的操做均可以使用if語句改進,反之不成立
何時不成立呢?
當if語句控制的語句體是一條輸出語句的時候,就不成立。
由於三元運算符是一個運算符,必需要求有一個結果返回。
而輸出語句卻不能做爲一個返回結果
三個數中求最大值:能夠用三目運算 跳轉2.9.6
用if語句實現:
注意: ·case後面只能是常量,不能是變量,並且不能出現相同的
·default能夠省略 可是通常不建議,
(除非判斷的值是固定的,單選題)
·break 能夠省略,通常不建議
·default能夠出如今switch語句的任意位置
·switch語句的結束條件:
遇到break 或者 執行到程序的末尾
如下條件選用switch
·條件分支有多個
·條件的值是整數或一個字符型
緣由
·若是條件分支太多時用if語句,必定會出現if的嵌套,if嵌套的越多,程序 的開銷就會隨着增大,這樣整個程序的運行效率就必定會大大下降
·switch值比較一次就能夠找出條件的結果
咱們在下面將上面的if成績例程改成switch版本是否是簡潔了不少呢
· for循環
· while循環
· do ...while循環
咱們若是存在大量的重複語句,咱們就可使用循環語句,進行處理。
for 語句不只適用於循環次數明確的狀況,也適用於循環次數不明確的狀況 (知足條件繼續循環,不知足跳出循環)
求偶數和還有一種方法:
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() → 換行
九九乘法表
判斷條件表達式的值爲邏輯真時,重複執行循環體(不知足出去)
死循環:
第一種:
for(;;){}
第二種:
while(true){}
While循環和for循環的區別?
使用區別:
for循環 控制條件定義的變量,只能在循環內使用
while 循環 ..... 能夠在循環外使用
由於變量及早的從內存中消失,能夠提升內存的使用效率
另外一種理解:
for 語句不只適用於循環次數明確的狀況,也適用於循環次數不明確的狀況
while 循環適用於循環次數不明確的狀況
先執行循環體,再判斷繼續條件不爲邏輯真時,再執行循環體並判斷條 件, 直到條件爲假轉去執行while下面的語句(不知足出去)
至少要執行一次
2.12 跳轉控制語句
·break:中斷
·continue: 繼續
·return: 返回
(一)break 的意思是中斷
適用:switch、循環語句中(循環語句中加入了if判斷的狀況)
跳出單層循環(從最近的封閉循環體中跳出)
若想跳出多層循環 須要使用帶標籤的語句
格式:標籤名:語句
(二)continue 繼續的意思是
跳出一次循環進入下一次的執行
(結束本次循環,進入下次循環的斷定。)
(三)retuen
return關鍵字不是爲了跳出循環體,更經常使用的功能是(結束一個方法),也就是退出一個方法。跳轉到上層調用的方法。
若是內容中有什麼不足,或者錯誤的地方,歡迎你們給我留言提出意見, 蟹蟹你們 !^_^
若是能幫到你的話,那就來關注我吧!
在這裏的咱們素不相識,卻都在爲了本身的夢而努力 ❤一個堅持推送原創Java技術的公衆號:理想二旬不止