3基礎知識

3基礎知識

Java是一個完整的平臺,擁有龐大的庫。
簡單、面向對象、網絡技能、健壯、安全、可移植、易解釋、高性能、多線程、動態(tài)。

3.3數據類型

.1整型

  • int 4字節(jié) +-20億
  • short 2字節(jié) -32768~32767
  • long 8字節(jié) 好大好大 (后綴L)
  • byte 1字節(jié) -128~127
  • 二進制前綴(0b) 十六進制前綴(0x)

.2浮點類型

  • float 4字節(jié) 6~7位有效數字
  • double 8字節(jié) 15位有效數字
  • 正負無窮大、NaN 檢測x是否為“非數值”————>Double.isNaN(X)

.3char類型

  • 單個字符,通常用來表示字符常量
  • Unicode編碼表
  • 強烈建議不要使用

.4boolean類型

  • false/true
  • 和整型不能相互轉換

3.4變量

  • 字母開頭,數字字母構成
  • 判斷是否為字母:isJavaIdentifierStart/isJavaIdentifierPart
  • 大小寫敏感

.1變量初始化

  • 變量的聲明盡量靠近變量第一次使用的地方
  • java中不區(qū)分變量的聲明和定義

.2常量

  • final關鍵字,只能被賦值一次,之后無法更改
  • static final,類常量,類中的方法可以使用;聲明為public,則其他類中也可以使用

3.5運算符

  • 整數除0出異常,浮點數除0出無窮大/NaN
  • 浮點計算的精度問題

.1自增/自減運算符

  • ++/--咯

.2關系/boolean

  • == < > <= >= && || !
  • x==y?x:y

.3位運算符

  • | ^ ~ &

.4數學函數和常量

  • 三角函數、指數函數/對數函數、PI、E

.5數值類型之間的轉換

  • 合法轉換/丟失精度(int到float;long到float/double)
  • 兩個數值進行二元操作時,有double/float/long,則另一個也會轉換為對應類型。否則兩個操作數將都被轉換為int

.6強制類型轉換

  • 截斷小數部分來取整
  • 想要進行舍入運算(得到最接近的整數),需使用Math.round方法
    double x=9.97;
    int nx = (int)Math.round(x);//round返回long

.7括號和運算符級別

youxianji.jpg

.8枚舉類型

  • 變量的取值只在一個有限的集合內
    enmu Size{SMALL,MEDIUM,LARGE,EXTRA_LARGE}
    Size s = Size.MEDIUM

3.6字符串

  • unicode字符序列
  • Java沒有內置字符串類型,而是在標準Java類庫中提供一個預定義類,叫做String
  • 每個用雙括號括起來的字符串都是String類的一個實例

.1子串

String greeting = "Hello";
String s = greeting.substring(0, 3);//"Hel"
  • 第二個參數是不想復制的第一個位置,容易計算子串的長度。

.2拼接

  • +號拼接字符串
    int age = 13;
    String rating = "PG" + age;//"PG13"

.3不可變字符串

  • 不能修改其中的任何一個字符

.4檢測是否相等

  • .equals()
  • .equalsIgnoreCase()//不區(qū)分大小寫

.5空串與null

  • 空串“”,長度為0
  • if(str != null && str.length() != 0)

.6代碼點與代碼單元

  • .length(),返回unicode字符數量

  • 想要得到實際長度,即代碼點的數量(從0開始):
    int cpCount = greeting.codePointCount(0, greeting.length())

  • 得到第i個代碼點:
    int index = greeting.offsetBytePoints(0, i);
    int cp = greeting.codePointAt(idnex);

  • 要遍歷一個字符串:
    int cp = sentence.codePoint(i);
    if (Character.isSupplementaryCodePoint(cp)) i += 2;
    else i++;

.7字符串API

  • 好多好多個,熟記才能活用

.8構造字符串

  • 傳統(tǒng)方法效率低,浪費空間
  • 字符串構造器:
    StringBuilder builder = new StringBuilder();
    builder.append(ch);//添加單個字符
    builder.append(str);//添加字符串
    String completedString = builder.toString();

3.7輸入輸出

.1讀取輸入

  • 標準輸出流;標準輸入流:
    Scanner in = new Scanner(System.in);
    System.out.print("What is your name?");
    String name = in.nextLine();//in.next(); in.nextInt();
  • Scanner是可見的,不適合讀取密碼,密碼用ole類實現(xiàn):
    Console cons = System.console();
    String userName = cons.readLine("User name:");
    char[] passwd = cons.readPassword("Password:");

.2格式化輸出

  • System.out.printf();沿用了C語言的語法,定長、定精度(轉換符表P57,標志符表P58)
  • 日期和時間轉換符表P58:
    System.out.printf(" %1$s %2$tB %2$te, %2$tY", "Due date:", new Date());
    Due date: December 25,2016
  • 圖3-6 格式說明符語法(O——O 不是很懂啊。 )

.3文件輸入與輸出

  • 需要用File對象構造一個Scanner對象:
    Scanner in = new Scanner(Paths.get("mufile.txt"));
    PrintWriter out = new PrintWriter("myfile.txt");
  • 不同編譯環(huán)境(命令行或IDE)下的啟動路徑不同,需要定位。若覺繁瑣,可以使用絕對路徑
  • IOException,FileNotFoundException
    可以利用重定向將任意文件捆綁到System.in和System.out:
    java MyProg<myfile.txt> output.txt
    避免FileNotFoundException

3.8控制流程

  • 循環(huán)控制和多值檢測

.1塊作用域

  • block,可嵌套,不可在兩個塊中聲明同名的變量

.2條件語句

  • if (condition) statement
  • 塊語句(block statement)
  • if (condition) statement1 else statement2
  • if (condition1) statement1 else if (condition2) statement2 else statement3

.3循環(huán)

  • while (condition) statement
  • do statement while (condition)

.4確定循環(huán)

  • for (計數器變量初始化, 檢測, 更新)
  • 檢測兩個浮點數是否相等要格外小心。由于舍入誤差,最終無法得到精確值,可能會一直處于循環(huán)

.5多重選擇語:switch語句

.6中斷控制流程語句

  • goto為保留字,但是并不可以使用
  • break跳出當前循環(huán)體,帶標簽的break語句用于跳出多重循環(huán)
  • continue語句將控制轉移到最內層循環(huán)的首部
  • 可選語句,即使不使用也能表達出相應的邏輯含義

3.9大數值

  • 已有變量類型不滿足精度要求,可使用java.math中包含的兩個類:BigInteger和BigDecimal
  • BigInteger類實現(xiàn)了任意精度的整數運算,BigDecimal實現(xiàn)了任意精度的浮點數運算
  • 使用valueOf方法可以將普通的數值轉換為大數值:
    BigInteger a = BigInteger.valueOf(100)
  • 無法用算術運算符處理大數。使用add和multiply方法:
    BigInteger c = a.add(b);//c = a+b
    BigInteger d = c.multiply(b.add(BigInteger.valueOf(2)));//d = c*(b+2)
  • API要熟記

3.10數組

  • 用來存儲同一類型值的集合的數據結構,通過整型下標訪問其中的值
  • type[] name;
  • 數字數組初始化為0,boolean數組初始化為false,對象數組初始化為null
  • 獲得元素個數,使用array.length
  • 一旦被創(chuàng)建,不能改變它的大小

.1for each循環(huán)

  • for (variable : collection) statement
  • 會遍歷數組中的每個元素,而不需要使用下標值
  • 快速打印一維數組:
    Sysytem.out.println(Array.toString(a))

.2數組初始化以及匿名數組

  • int[] smallPrimes = {2,3,5,7,11,13};
    new int[] {17,19,23,29,31,37};//匿名數組
    smallPrimes = new int[] {17, 19, 23, 31};
    int[] anonymous = {17, 19, 23};
    smallPrimes = anonymous;

  • 數組長度可以為0,長度為0和null不同

.3數組拷貝

  • int[] copiedLuckyNumbers = Arrays.copyOf(luckyNumbers, luckyNumbers.length)
  • 多余的數值型將被賦值為0,布爾型將被賦值為false
  • 小于原始數組長度,只拷貝最前面的數據元素

.4命令行參數

  • public static void main(String[] args)
  • 如果使用:
    java Message -g cruel world
    運行程序。那么arg數組中將包含以下內容:
    args[0]: "-g"
    args[1]: "cruel"
    args[2]: "world"

.5數組排序

int a = new int[1000];
...
Arrays.sort(a);//快排

.6多維數組

  • for each不能自動處理二維數組的每一個元素,它按照行,也就是一維數組處理。想訪問二維數組的所有元素,需要兩個嵌套的循環(huán):
    for (double[] row : a)
    for (double value : row)
    do something with value
  • 快速打印一個二維數組:
    System.out.println(Array.deepToString(a))

.7不規(guī)則數組

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

相關閱讀更多精彩內容

  • Java經典問題算法大全 /*【程序1】 題目:古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子...
    趙宇_阿特奇閱讀 2,077評論 0 2
  • 【程序1】 題目:古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔...
    葉總韓閱讀 5,227評論 0 41
  • K# Java核心技術卷一 逐一聲明每一個變量可以提高程序的可讀性。 在Java中,變量的聲明盡可能地靠近變量第一...
    蘭陵憂患生閱讀 492評論 0 1
  • 他穿著灰色的短夾克低著頭抽著二十多塊的灰狼,也不看路,好像是在找什么東西,但是到了街邊第二個巷子他就拐了進去。巷子...
    懋帝閱讀 946評論 0 0

友情鏈接更多精彩內容