Java學(xué)習(xí)-Java基礎(chǔ)

個人學(xué)習(xí)筆記,若有不當(dāng)之處,歡迎指正。個人學(xué)習(xí)地址請點(diǎn)擊這里。關(guān)于環(huán)境配置請移步這里。新建包、類等操作請自行點(diǎn)擊前面鏈接學(xué)習(xí)。關(guān)于運(yùn)算符還有控制流語句因?yàn)橛幸稽c(diǎn)編程基礎(chǔ)所以本文略過。

我是目錄

  1. 概述
    1.1 面向?qū)ο?OOP)
    1.2 import
    1.3 包
  2. 數(shù)據(jù)類型
  3. 靜態(tài)數(shù)組
  4. String、StringBuffer、StringBuilder
    4.1 String
    4.2 StringBuffer
    4.3 StringBuilder

1. 概述

1. 面向?qū)ο?OOP)

三大特性:封裝、繼承、多態(tài)性

2. import

語法:import package1[.package2…].classname;

import java.util.Date;  // 導(dǎo)入 java.util 包下的 Date 類
import javax.swing.*;  // 導(dǎo)入 javax.swing 包下的所有類,* 表示所有類
import p1.Test; // 導(dǎo)入 p1 包中的 Test 類

3. 包

Java類庫中有很多包:
java.*開頭的是Java的核心包,所有程序都會使用這些包中的類;
javax.* 開頭的是擴(kuò)展包,x 是 extension 的意思,也就是擴(kuò)展。雖然 javax.*是對java.*的優(yōu)化和擴(kuò)展,但是由于 javax.* 使用的越來越多,很多程序都依賴于javax.*,所以 javax.* 也是核心的一部分了,也隨JDK一起發(fā)布。
org.* 開頭的是各個機(jī)構(gòu)或組織發(fā)布的包,因?yàn)檫@些組織很有影響力,它們的代碼質(zhì)量很高,所以也將它們開發(fā)的部分常用的類隨JDK一起發(fā)布。

java中常用的幾個包介紹:

包名 說明
java.lang 該包提供了Java編程的基礎(chǔ)類,例如 Object、Math、String、StringBuffer、System、Thread等,不使用該包就很難編寫Java代碼了。
java.util 該包提供了包含集合框架、遺留的集合類、事件模型、日期和時(shí)間實(shí)施、國際化和各種實(shí)用工具類(字符串標(biāo)記生成器、隨機(jī)數(shù)生成器和位數(shù)組)。
java.io 該包通過文件系統(tǒng)、數(shù)據(jù)流和序列化提供系統(tǒng)的輸入與輸出。
java.net 該包提供實(shí)現(xiàn)網(wǎng)絡(luò)應(yīng)用與開發(fā)的類。
java.sql 該包提供了使用Java語言訪問并處理存儲在數(shù)據(jù)源(通常是一個關(guān)系型數(shù)據(jù)庫)中的數(shù)據(jù)API。
java.awt 如下
javax.swing 這兩個包提供了GUI設(shè)計(jì)與開發(fā)的類。java.awt包提供了創(chuàng)建界面和繪制圖形圖像的所有類,而javax.swing包提供了一組“輕量級”的組件,盡量讓這些組件在所有平臺上的工作方式相同。
java.text 提供了與自然語言無關(guān)的方式來處理文本、日期、數(shù)字和消息的類和接口。

2. 數(shù)據(jù)類型

數(shù)據(jù)類型 說明 所占內(nèi)存
byte 字節(jié)型 1 byte
int 整型 4 bytes
long 長整型 8 bytes
float 單精度浮點(diǎn)型 4 bytes
double 雙精度浮點(diǎn)型 8 bytes
char 字符型 2 bytes(字符型數(shù)據(jù)只能是一個字符,由單引號包圍)
boolean 布爾型 1 bit

3. 靜態(tài)數(shù)組

定義分配空間的數(shù)組:type arrayName[] = new type[arraySize]; ,比如 int demoArray[] = new int[3]; , 初始化示例:

int[][] arr1 = {{1, 4, 5, 7}, {12, 14, 16, 18}}; // 創(chuàng)建二維數(shù)組
int arr2[][] = {{1, 4, 5, 7}, {12, 14, 16, 18}}; // 創(chuàng)建二維數(shù)組
String stringArray[] = {"徐清風(fēng)", "帥到", "自我陶醉"};

Java強(qiáng)大的 foreach循環(huán):

for(arrayType varName: arrayName ){
    // arrayType 為數(shù)組類型(也是數(shù)組元素的類型);
    // varName 是用來保存當(dāng)前元素的變量,每次循環(huán)它的值都會改變;
    // arrayName 為數(shù)組名稱
}

創(chuàng)建數(shù)組并遍歷:

遍歷示例

數(shù)組求和:

求和示例

額外說明:

  1. 上面講的是靜態(tài)數(shù)組。靜態(tài)數(shù)組一旦被聲明,它的容量就固定了,不容改變。所以在聲明數(shù)組時(shí),一定要考慮數(shù)組的最大容量,防止容量不夠的現(xiàn)象。
  2. 如果想在運(yùn)行程序時(shí)改變?nèi)萘?,就需要用到?shù)組列表(ArrayList,也稱動態(tài)數(shù)組)或向量(Vector)。
  3. 正是由于靜態(tài)數(shù)組容量固定的缺點(diǎn),實(shí)際開發(fā)中使用頻率不高,被 ArrayList 或 Vector 代替,因?yàn)閷?shí)際開發(fā)中經(jīng)常需要向數(shù)組中添加或刪除元素,而它的容量不好預(yù)估

4. String、StringBuffer、StringBuilder

4.1 String

Stringjava.lang 包下的一個類,有以下方法:

  1. length() - 返回長度
  2. charAt() - 按照索引值獲得字符串中的指定字符
  3. contains() - 檢測字符串是否包含某個子串
  4. replace() - 字符串替換,用來替換字符串中所有指定的子串
  5. split() - 以指定字符串作為分隔符,對當(dāng)前字符串進(jìn)行分割,分割的結(jié)果是一個數(shù)組
字符串方法使用

String 的值是不可變的,每次對String的操作都會生成新的String對象,不僅效率低,而且耗費(fèi)大量內(nèi)存空間。

4.2 StringBuffer

只能通過 new 來創(chuàng)建對象:

StringBuffer str1 = new StringBuffer();  // 分配16個字節(jié)長度的緩沖區(qū)
StringBuffer str2 = =new StringBuffer(512);  // 分配512個字節(jié)長度的緩沖區(qū)
// 在緩沖區(qū)中存放了字符串,并在后面預(yù)留了16個字節(jié)長度的空緩沖區(qū)
StringBuffer str3 = new StringBuffer("xuqingfeng");

StringBuffer類中的方法主要偏重于對于字符串的操作,例如追加、插入和刪除等,這個也是StringBuffer類和String類的主要區(qū)別。實(shí)際開發(fā)中,如果需要對一個字符串進(jìn)行頻繁的修改,建議使用 StringBuffer,操作大量字符串時(shí)效率會比String高出很多。

  1. append() - 向當(dāng)前字符串的末尾追加內(nèi)容
  2. deleteCharAt() - 刪除指定位置的字符,并將剩余的字符形成新的字符串
  3. insert() - 在指定位置插入字符串
  4. setCharAt() - 用來修改指定位置的字符
StringBuffer str = new StringBuffer("biancheng100");
// 以下方法都以上面的語句為標(biāo)準(zhǔn),假設(shè)不相互影響
str.append(true); // "biancheng100true"
str.deleteCharAt(3); // 刪除索引3的'n'字符
str.delete(1, 4); // 刪除索引值為1~4之間的字符,包括索引值1,但不包括4。
str.insert(3, "xyz"); // bianxyzcheng100true
str.setCharAt(3, 'z'); // biazcheng100

4.3 StringBuilder

StringBuilder類和StringBuffer類功能基本相似,方法也差不多,主要區(qū)別在于StringBuffer類的方法是多線程安全的,而StringBuilder不是線程安全的。

StringBuffer、StringBuilder、String中都實(shí)現(xiàn)了CharSequence接口。CharSequence是一個定義字符串操作的接口,它只包括length()、charAt(int index)subSequence(int start, int end) 這幾個API。

image

可見,String直接實(shí)現(xiàn)了CharSequence接口;StringBuilderStringBuffer都是可變的字符序列,它們都繼承于AbstractStringBuilder,實(shí)現(xiàn)了CharSequence接口。

使用:
操作少量的數(shù)據(jù)使用 String;
單線程操作大量數(shù)據(jù)使用 StringBuilder
多線程操作大量數(shù)據(jù)使用 StringBuffer。

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

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容