Java學習筆記--來自Java核心卷和尚學堂視頻

Java常見點解析

起步之注意點

  1. Java對大小寫敏感,關鍵字public被稱爲訪問修飾符
  2. 關鍵字class 的意思是類。Java是面向對象的語言,全部代碼必須位於類裏面。
  3. 一個源文件中至多隻能聲明一個public的類,其它類的個數不限,若是源文件中包含一個public 類,源文件名必須和其中定義的public的類名相同,且以「.java」爲擴展名。
  4. 一個源文件能夠包含多個類class。
  5. 正確編譯後的源文件,會獲得相應的字節碼文件,編譯器爲每一個類生成獨立的字節碼文件,且將字節碼文件自動命名爲類的名字且以「.class」爲擴展名。
  6. main方法是Java應用程序的入口方法,它有固定的書寫格式:
    1. public static void main(String[] args) {…}
  7. 在Java中,用花括號劃分程序的各個部分,任何方法的代碼都必須以「{」開始,以「}」結束, 因爲編譯器忽略空格,因此花括號風格不受限制。Java中每一個語句必須以分號結束,回車不是語句的結束標誌,因此一個語句能夠跨多行。
  8. 編程時,必定要注意縮進規範;
  9. 在寫括號、引號時,必定是成對編寫,而後再往裏插入內容。

用一個簡單的檯球遊戲進行示例, 桌球在球桌中按照必定線路和角度移動,遇到邊框會自動彈回。運行的結果圖以下:java

image-20201231162739771

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();
    }
}

數據類型和運算符

註釋

  • 單行註釋: 使用「//」開頭,「//」後面的單行內容均爲註釋。
  • 多行註釋: 以「/」開頭以「/」結尾,在「/」和「/」之間的內容爲註釋,咱們也可使用多行註釋做爲行內註釋。可是在使用時要注意,多行註釋不能嵌套使用。
  • 文檔註釋: 以「/**」開頭以「*/」結尾,註釋中包含一些說明性的文字及一些JavaDoc標籤(後期寫項目時,能夠生成項目的API)

標識符

標識符是用來給變量、類、方法以及包進行命名的程序員

  • 標識符必須以字母、下劃線_、美圓符號$開頭。
  • 標識符其它部分能夠是字母、下劃線「_」、美圓符「$」和數字的任意組合。
  • Java 標識符大小寫敏感,且長度無限制。
  • 標識符不能夠是Java的關鍵字。

標識符的使用規範編程

  • 表示類名的標識符:每一個單詞的首字母大寫,如Man, GoodMan
  • 表示方法和變量的標識符:第一個單詞小寫,從第二個單詞開始首字母大寫,咱們稱之爲「駝峯原則」(經常使用此種)

【注意】不要用漢字,不符合標準ide

關鍵字/保留字

emmm....這個本人以爲用到看看就好吧函數

abstract assert boolean break byte case
catch char class const continue default
do double else extends final finally
float for goto(不要用) 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

變量的本質與分類(有C語言基礎可跳過)

變量本質上就是表明一個」可操做的存儲空間」,空間位置是肯定的,可是裏面放置什麼值不肯定。咱們可經過變量名來訪問「對應的存儲空間」,從而操縱這個「存儲空間」存儲的值。性能

Java身爲強類型語言,必需要聲明做用域。this

從總體上可將變量劃分爲局部變量、成員變量(也稱爲實例變量)和靜態變量。spa

局部變量、成員變量、靜態變量的區別以下:設計

類型 聲明位置 從屬於 生命週期
局部變量 方法或語句塊內部 方法/語句塊 從聲明位置開始,直到方法或語句塊執行完畢,局部變量消失,使用前須要聲明
成員變量(實例變量) 類內部,方法外部 對象 對象建立,成員變量也跟着建立。對象消失,成員變量也跟着消失;成員變量會自動初始化
靜態變量(類變量) 類內部,static修飾 類被加載,靜態變量就有效;類被卸載,靜態變量消失。

常量(與C語言略微不一樣)

注意與c中的區別,const變爲finalcode

變量和常量命名規範(規範是程序員的基本準則,不規範會直接損害你的我的形象):

  1. 全部變量、方法、類名:見名知意
  2. 類成員變量:首字母小寫和駝峯原則: monthSalary
  3. 局部變量:首字母小寫和駝峯原則
  4. 常量:大寫字母和下劃線:MAX_VALUE
  5. 類名:首字母大寫和駝峯原則: Man, GoodMan
  6. 方法名:首字母小寫和駝峯原則: run(), runRun()

基本數據類型(C語言上面增長)

7.png

整形
類型 佔用存儲空間 表數範圍
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自己就是字符列

boolbean類型

boolean類型有兩個常量值,true和false,在內存中佔一位(不是一個字節),不可使用 0 或非 0 的整數替代 true 和 false ,這點和C語言不一樣。

運算符

image-20201231170919510

整形運算
  1. 若是兩個操做數有一個爲Long, 則結果也爲long。
  2. 沒有long時,結果爲int。即便操做數全爲short,byte,結果也是int。
浮點運算:
  1. 若是兩個操做數有一個爲double,則結果爲double。
  2. 只有兩個操做數都是float,則結果才爲float。
賦值運算符與拓展運算符
運算符 用法舉例 等效的表達式
+= 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 =、+=、-=、*=、/=、%= 賦值運算符、擴展運算符 由右至左

注意,若不是考試,不用刻意記憶,每一層加上括號就好

自動類型轉換

自動類型轉換指的是容量小的數據類型能夠自動轉換爲容量大的數據類型。如圖所示,黑色的實線表示無數據丟失的自動類型轉換,而虛線表示在轉換時可能會有精度的損失。

1.png

強制類型轉換

強制類型轉換,又被稱爲造型,用於顯式的轉換一個數值的類型。在有可能丟失信息的狀況下進行的轉換是經過造型來完成的,但可能形成精度下降或溢出。

語法格式:

(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.任何能用遞歸解決的問題也能使用迭代解決。在要求高性能的狀況下儘可能避免使用遞歸,遞歸調用既花時間又耗內存。

相關文章
相關標籤/搜索