用一個簡單的檯球遊戲進行示例, 桌球在球桌中按照必定線路和角度移動,遇到邊框會自動彈回。運行的結果圖以下:java
package com.zrq.first; import java.awt.*; import javax.swing.*; public class BallGame extends JFrame { //導入小球圖片 Image ball = Toolkit.getDefaultToolkit().getImage("image/ball.png"); //導入桌子圖片 Image desk = Toolkit.getDefaultToolkit().getImage("image/desk.jpg"); double x = 100; double y = 100; boolean right = true; double degree = 3.14 / 3;//弧度 @Override public void paint(Graphics g) { System.out.println("111"); g.drawImage(desk, 0, 0, null); g.drawImage(ball, (int) x, (int) y, null); x = x + 10 * Math.cos(degree); y = y + 10 * Math.sin(degree); //碰到上下,注意減去邊框的寬度 if (y > 500 - 40 - 30 || y < 40 + 40) { degree = -degree; } if (x < 40 || x > 856 - 40 -30) { degree = 3.14 - degree; } /* if (right) { x = x + 10; } else { x = x - 10; } if (x > 856-40-30) { right = false; } if (x < 40) { right = true; } */ } void launchFrame() { setSize(856, 500); setLocation(50, 50); setVisible(true); //重畫 while (true) { repaint(); try { Thread.sleep(40); } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { BallGame game = new BallGame(); game.launchFrame(); } }
標識符是用來給變量、類、方法以及包進行命名的程序員
標識符的使用規範編程
【注意】不要用漢字,不符合標準ide
emmm....這個本人以爲用到看看就好吧函數
abstract | assert | boolean | break | byte | case |
catch | char | class | const | continue | default |
do | double | else | extends | final | finally |
float | for | if | implements | import | |
instanceof | int | interface | long | native | new |
null | package | private | protected | public | return |
short | static | strictfp | super | switch | synchronized |
this | throw | throws | transient | try | void |
volatile | while |
變量本質上就是表明一個」可操做的存儲空間」,空間位置是肯定的,可是裏面放置什麼值不肯定。咱們可經過變量名來訪問「對應的存儲空間」,從而操縱這個「存儲空間」存儲的值。性能
Java身爲強類型語言,必需要聲明做用域。this
從總體上可將變量劃分爲局部變量、成員變量(也稱爲實例變量)和靜態變量。spa
局部變量、成員變量、靜態變量的區別以下:設計
類型 | 聲明位置 | 從屬於 | 生命週期 |
---|---|---|---|
局部變量 | 方法或語句塊內部 | 方法/語句塊 | 從聲明位置開始,直到方法或語句塊執行完畢,局部變量消失,使用前須要聲明 |
成員變量(實例變量) | 類內部,方法外部 | 對象 | 對象建立,成員變量也跟着建立。對象消失,成員變量也跟着消失;成員變量會自動初始化 |
靜態變量(類變量) | 類內部,static修飾 | 類 | 類被加載,靜態變量就有效;類被卸載,靜態變量消失。 |
注意與c中的區別,const變爲finalcode
變量和常量命名規範(規範是程序員的基本準則,不規範會直接損害你的我的形象):
類型 | 佔用存儲空間 | 表數範圍 |
---|---|---|
byte | 1字節 | -27 ~ 27-1(-128~127) |
short | 2字節 | -215 ~ 215-1(-32768~32767) |
int | 4字節 | -231 ~ 231-1 (-2147483648~2147483647)約21億 |
long | 8字節 | -263 ~ 263-1 |
類型 | 佔用存儲空間 | 表數範圍 |
---|---|---|
float | 4字節 | -3.403E38~3.403E38(科學計數法) |
double | 8字節 | -1.798E308~1.798E308(科學計數法) |
float類型賦值時須要添加後綴F/f,浮點數不精確,必定不要用於比較,若是須要進行不產生舍入偏差的精確數字計算,須要使用BigDecimal或BigInteger類。
字符型在內存中佔2個字節,在Java中使用單引號來表示字符常量。例如’A’是一個字符,它與」A」是不一樣的,」A」表示含有一個字符的字符串。
在字符型中,會涉及到轉義字符,常見的以下:
轉義符 | 含義 | Unicode****值 |
---|---|---|
\b | 退格(backspace) | \u0008 |
\n | 換行 | \u000a |
\r | 回車 | \u000d |
\t | 製表符(tab) | \u0009 |
\「 | 雙引號 | \u0022 |
\‘ | 單引號 | \u0027 |
\ | 反斜槓 | \u005c |
String自己就是字符列
boolean類型有兩個常量值,true和false,在內存中佔一位(不是一個字節),不可使用 0 或非 0 的整數替代 true 和 false ,這點和C語言不一樣。
運算符 | 用法舉例 | 等效的表達式 |
---|---|---|
+= | a += b | a = a+b |
-= | a -= b | a = a-b |
*= | a *= b | a = a*b |
/= | a *= b | a = a/b |
%= | a *= b | a = a%b |
運算符 | 含義 | 示例 |
---|---|---|
== | 等於 | a==b |
!= | 不等於 | a!=b |
> | 大於 | a>b |
< | 小於 | a<b |
>= | 大於或等於 | a>=b |
<= | 小於或等於 | a<=b |
運算符 | 說明 | |
---|---|---|
邏輯與 | &( 與) | 兩個操做數爲true,結果纔是true,不然是false |
邏輯或 | |(或) | 兩個操做數有一個是true,結果就是true |
短路與 | &&( 與) | 只要有一個爲false,則直接返回false |
短路或 | ||(或) | 只要有一個爲true, 則直接返回true |
邏輯非 | !(非) | 取反:!false爲true,!true爲false |
邏輯異或 | ^(異或) | 相同爲false,不一樣爲true |
位運算符 | 說明 |
---|---|
~ | 取反 |
& | 按位與 |
| | 按位或 |
^ | 按位異或 |
<< | 左移運算符,左移1位至關於乘2 |
>> | 右移運算符,右移1位至關於除2取商 |
「+」運算符兩側的操做數中只要有一個是字符串(String)類型,系統會自動將另外一個操做數轉換爲字符串而後再進行鏈接。
常見的語法爲
x ? y : z
其中 x 爲 boolean 類型表達式,先計算 x 的值,若爲true,則整個運算的結果爲表達式 y 的值,不然整個運算結果爲表達式 z 的值。
優先級 | 運算符 | 類 | 結合性 |
---|---|---|---|
1 | () | 括號運算符 | 由左至右 |
2 | !、+(正號)、-(負號) | 一元運算符 | 由左至右 |
2 | ~ | 位邏輯運算符 | 由右至左 |
2 | ++、-- | 遞增與遞減運算符 | 由右至左 |
3 | *、/、% | 算術運算符 | 由左至右 |
4 | +、- | 算術運算符 | 由左至右 |
5 | <<、>> | 位左移、右移運算符 | 由左至右 |
6 | >、>=、<、<= | 關係運算符 | 由左至右 |
7 | ==、!= | 關係運算符 | 由左至右 |
8 | & | 位運算符、邏輯運算符 | 由左至右 |
9 | ^ | 位運算符、邏輯運算符 | 由左至右 |
10 | | | 位運算符、邏輯運算符 | 由左至右 |
11 | && | 邏輯運算符 | 由左至右 |
12 | || | 邏輯運算符 | 由左至右 |
13 | ? : | 條件運算符 | 由右至左 |
14 | =、+=、-=、*=、/=、%= | 賦值運算符、擴展運算符 | 由右至左 |
注意,若不是考試,不用刻意記憶,每一層加上括號就好
自動類型轉換指的是容量小的數據類型能夠自動轉換爲容量大的數據類型。如圖所示,黑色的實線表示無數據丟失的自動類型轉換,而虛線表示在轉換時可能會有精度的損失。
強制類型轉換,又被稱爲造型,用於顯式的轉換一個數值的類型。在有可能丟失信息的狀況下進行的轉換是經過造型來完成的,但可能形成精度下降或溢出。
語法格式:
(type)var//運算符「()」中的type表示將值var想要轉換成的目標數據類型。
操做比較大的數時,要留意是否溢出,尤爲是整數操做時。
1.從結構化程序設計角度出發,程序有三種結構:順序結構、選擇結構和循環結構
2.選擇結構
(1)if單選擇結構 if-else雙選擇結構 if-else if-else多選擇結構
(2)switch多選擇結構
3.多選擇結構與switch的關係:當布爾表達式是等值判斷的狀況,可以使用多重選擇結構或switch結構,若是布爾表達式區間判斷的狀況,則只能使用多重選擇結構
(1) 循環結構
(2)當型:while與for
(3)直到型:do-while
4.while與do-while的區別,在布爾表達式的值爲false時while的循環體一次也不執行,而do-while至少執行一次
5.break能夠在switch與循環結構中使用,而continue只能在循環結構中使用
6.方法就是一段用來完成特定功能的代碼片斷,相似於其它語言的函數
7.方法的重載是指一個類中能夠定義多個方法名相同,但參數不一樣的方法。 調用時,會根據不一樣的參數自動匹配對應的方法
8.任何能用遞歸解決的問題也能使用迭代解決。在要求高性能的狀況下儘可能避免使用遞歸,遞歸調用既花時間又耗內存。