日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

【Java核心计算 基础知识(第9版)】第3章 Java的基本程序设计结构

發(fā)布時間:2025/7/14 java 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Java核心计算 基础知识(第9版)】第3章 Java的基本程序设计结构 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本章要點(diǎn)
- 一個簡單的Java應(yīng)用程序
- 注釋
- 數(shù)據(jù)類型
- 變量
- 運(yùn)算符
- 字符串
- 輸入輸出流
- 控制流
- 大數(shù)值
- 數(shù)組


3.1 一個簡單的Java應(yīng)用程序

?

上圖是一個最簡單的Java程序,它表示:聲明一個名為FirstSample的public類,當(dāng)運(yùn)行這個類時,JVM會調(diào)用類中的main方法,該方法向控制臺打印“Hello, world!”這么一句話。麻雀雖小,但是Java程序的基本要素都包含在里面。

1)Java對大小寫敏感
- 這意味著,對Java而言,Main和main是兩個不同的名詞。

2)public:訪問修飾符
- 它用于控制程序的其他部分對這段代碼的訪問權(quán)限,有public,protected,default,private四種。

3)class:聲明一個類
- class用于聲明一個類。可以將類視為一個加載程序邏輯的容器,程序邏輯定義了應(yīng)用程序的行為。
- 類是構(gòu)建所有Java應(yīng)用程序的構(gòu)建塊。
- 一個源文件(.java文件)最多只能包含一個public類,且源文件與該類名字必須相同。
- enum用于聲明一個枚舉,聲明方法不需要特定的標(biāo)識符。

4)編譯與運(yùn)行
- 確保已安裝JDK且配置環(huán)境變量。
- 編譯:javac FirstSample.java,即javac + 空格 + 源文件名(含擴(kuò)展名.java),可不區(qū)分大小寫(因Windows不區(qū)分大小寫)。
- 運(yùn)行:java FirstSample,即java + 空格 + 程序名(不含擴(kuò)展名.class),嚴(yán)格區(qū)分大小寫。
- 運(yùn)行程序時,JVM將從public類中的main方法開始執(zhí)行,這里就是程序的入口。所以一個源文件中只能包含一個public類,這個類中只能有一個main方法,這個方法必須擁有最高的訪問權(quán)限(public)。

5)代碼塊與語句
- 用{}來區(qū)分程序的各個部分,如類與類,方法與方法,局部代碼塊等。{為該部分的起點(diǎn),}為該部分的結(jié)束。
- 在一對{}之間聲明的標(biāo)識符只在這部分有效。
- “語句”表示一個句子,可視為代碼的基本單元,必須以;結(jié)束。

6)對成員的調(diào)用
- 成員指類的方法和變量
- .用于表示對成員的調(diào)用,如object.method(param)表示調(diào)用一個方法,object.variable表示調(diào)用一個變量。


3.2 注釋

  • 注釋不會出現(xiàn)在編譯后的可執(zhí)行程序中,它用于程序員對所寫代碼的說明,如這段代碼為什么要這么寫,別人調(diào)用我的接口需要注意什么,這個變量是用來做什么的等。
  • Java有三種注釋。
    • // 單行注釋:注釋本行。
    • /* */ 多行注釋:注釋被包裹的內(nèi)容。
    • /** */ 文檔注釋:注釋被包裹的內(nèi)容,并且可以用javadoc命令自動生成文檔。

3.3 數(shù)據(jù)類型

  • Java是一種強(qiáng)類型語言,即每個變量必須聲明一種類型,一旦聲明之后不可以改變。

  • 8種基本數(shù)據(jù)類型:

類型存儲需求最大值最小值示例備注
long8 Byte?263263?1123456789L?
int4 Byte?231231?1 (約21億)123456789整數(shù)默認(rèn)類型
short2 Byte?215215?1 (32767)12345?
byte1 Byte?2727?1(127)123?
double8 Byte約-1.798E+308約1.798E+308(21024123456789.0小數(shù)默認(rèn)類型,有效位數(shù)15位
float4 Byte約-3.4E+38F約3.4E+38F (2128123456789.0F有效位數(shù)6~7位
char2 Byte0 (\u0000)65535 (\uffff)‘A’轉(zhuǎn)換為數(shù)值時無負(fù)值
boolean???true/false無法轉(zhuǎn)換為其他類型

注1:double和float計(jì)算遵循IEEE754規(guī)范。
注2:三個特殊值常量
- 正無窮 Double.POSITIVE_INFINITY,如 1/0.0
- 負(fù)無窮 Double.NEGATIVE_INFINITY,如 -1/0.0
- 非數(shù)值 Double.NaN,如 0/0.0
- 所有”非數(shù)值“均不相等,檢測非數(shù)值只能用Double.isNaN(x)

  • java中的進(jìn)制表示

    • 十進(jìn)制 1234567890
    • 十六進(jìn)制 0x123ABCDEF
    • 八進(jìn)制 012345678
    • 二進(jìn)制 0b00001111
  • 十進(jìn)制轉(zhuǎn)換為二進(jìn)制:除以2取余 ,直到商為0,然后將余數(shù)倒序排列

    ?

  • 二進(jìn)制轉(zhuǎn)換為十進(jìn)制:各位乘以2n?1并求和
    如 110: 1?22+1?21+0?20=4+2+0=6

  • 負(fù)數(shù)的二進(jìn)制表現(xiàn)形式:絕對值得二進(jìn)制形式各位取反,然后+1

    ?

  • 引用數(shù)據(jù)類型: class, enum, interface, array


3.4 變量

在Java中,每一個變量屬于一種類型。在聲明變量時,變量所屬的類型位于變量名之前。
如: int counter;
double salary;

3.4.1 變量初始化

  • 聲明一個變量之后,必須用賦值語句對變量進(jìn)行顯式初始化(原文如此,這里應(yīng)特指局部變量),變量被初始化之前不能使用。
  • 變量的賦值和使用:
int i; i = 20; i = 30;String str = "abc"; str = str + "def";

3.4.2 常量

  • 常量用關(guān)鍵字”final”指示,表示這個變量只能被賦值一次,即一旦被賦值之后,就不能再更改。
  • 聲明為final的成員變量無默認(rèn)值,必須顯式初始化。
  • 常量的賦值和使用:
class Demo{static final int sCounter = 0; // 靜態(tài)常量必須在聲明時顯式初始化final int iSalary = 25000; // 非靜態(tài)的常量可在聲明時初始化或在構(gòu)造方法中初始化final int iDays;Demo(){iDays = 10;} }

3.5 運(yùn)算符

  • +, -, *, /, % : 加、減、乘、除、取余

3.5.1 自增運(yùn)算符與自減運(yùn)算符

  • ++, –
  • ++i : 先進(jìn)行加1運(yùn)算,再參與其他運(yùn)算;
  • i++ : 先參與其他運(yùn)算,再進(jìn)行加1運(yùn)算;
  • 因容易混淆,并且可能產(chǎn)生bug(曾聽說過在某些版本的JDK下向控制臺打印i++與++i輸出同樣的值),不建議在其他表達(dá)式內(nèi)部使用自增/自減運(yùn)算;
int i = 1; int j = 1; int k = i++ * j++; // 不建議使用 System.out.println(++i); // 2 System.out.println(j++); // 1

3.5.2 關(guān)系運(yùn)算符與boolean運(yùn)算符

  • ==, != :相等,不相等(用于基本類型時判斷字面值,用于引用類型時判斷引用地址)
  • <, <=, >, >=
  • &, &&, |, ||
  • 三元操作符?:,如String str = 1 == 2 ? “1等于2” : “1不等于2”;

3.5.3 位運(yùn)算符

  • 在處理整型數(shù)值時,可以直接對組成整型數(shù)值的各個位進(jìn)行操作。
  • &, |, ^, ~, >>, >>>, << 與,或,異或,非,右移,無符號右移,左移
  • 應(yīng)用例子:用一個變量的每個二進(jìn)制位各代表一個flag:
class Test{int mod1 = 0b1;int mod2 = 0b10;int mod3 = 0b100;int mod4 = 0b1000;int mod5 = 0b10000;int mod6 = 0b100000;int mod7 = 0b1000000;int mod8 = 0b10000000;boolean isMod1(int mod){return ((mod & mod1) != 0) ? true : false;}boolean isMod2(int mod){return ((mod & mod2) != 0) ? true : false;}... }

3.5.4 數(shù)學(xué)函數(shù)與常量

  • 請查閱java.lang.Math類

3.5.5 數(shù)值類型之間的轉(zhuǎn)換

  • byte, short, char三種類型之間的運(yùn)算自動提升為int
  • int -> long -> float -> double,自動向上轉(zhuǎn)型

3.5.6 強(qiáng)制類型轉(zhuǎn)換

  • 轉(zhuǎn)換方式:(targerType) variable。
  • 通過截?cái)嘈?shù)部分而不是四舍五入將浮點(diǎn)值轉(zhuǎn)換為整型。
  • 當(dāng)變量超過目標(biāo)類型的表示范圍時,會根據(jù)補(bǔ)碼截?cái)?#xff0c;而不是保留目標(biāo)類型的最大/最小值。

3.5.7 括號與運(yùn)算符級別

優(yōu)先級運(yùn)算符結(jié)合性
1[] . ()(方法調(diào)用)從左向右
2! ~ ++ – +(正號) -(負(fù)號) ()(強(qiáng)制類型轉(zhuǎn)換) new從右向左
3*/%從左向右
4+-從左向右
5<< >> >>>從左向右
6< <= > >= instanceof從左向右
7== !=從左向右
8&從左向右
9^從左向右
10|從左向右
11&&從左向右
12||從左向右
13?:(三元運(yùn)算符)從右向左
14= += -= *= /= %= &= |= ^= <<= >>= >>>=從右向左

3.5.8 枚舉類型

  • 枚舉類型包括有限和命名的值。如 enum Size{S,M,L,XL,XXL,XXXL}
class Demo{enum Size{S,M,L,XL,XXL,XXXL}void test(){Size s = Size.S;} }

3.6 字符串

  • 從概念上講,Java字符串就是Unicode字符序列。Java沒有內(nèi)置的字符串類型,而是在標(biāo)準(zhǔn)Java類庫中提供了一個預(yù)定義類String,每個用”“括起來的字符串都是String類的一個實(shí)例。

3.6.1 子串

  • 一個字符串中“一段”稱為它的一個子串。
  • 空串”“是任何字符串的子串。
  • String類的substring(a,b)方法可以從截取子串,截取范圍為[a,b)。contains(str)方法判斷是否包含該子串。

3.6.2 拼接

  • 可以使用+號拼接任意兩個字符串。
  • 當(dāng)將一個字符串與任意非字符串的值拼接時,后者被轉(zhuǎn)換為字符串(基本類型根據(jù)字面值轉(zhuǎn)換,引用類型根據(jù)toString()方法轉(zhuǎn)換)。
public class Demo {public static void main(String[] args) {Demo1 demo1 = new Demo1();Demo2 demo2 = new Demo2();System.out.println(demo1 + ""); // 輸出demo1的引用地址System.out.println(demo2 + ""); // 輸出“Demo”} }class Demo1{}class Demo2{@Overridepublic String toString() {return "Demo";} }

3.6.3 不可變字符串

  • 由于不能修改Java字符串中的字符,所以在Java文檔中將String類對象稱為不可變字符串。例如,”Hello”永遠(yuǎn)包含字符H,e,l,l,o的代碼單元序列,一旦改變,就不再是”Hello”。
  • 字符串不可改變,但字符串變量所引用的字符串對象是可以改變的。
  • 一個經(jīng)典的面試題:String s = new String(“abc”)共創(chuàng)建立多少個對象。
    • String s: 一個String類型的變量,位于stack區(qū)。
    • “abc”: 一個String類型對象,位于PermGen區(qū)的常量池(如果池中已有字面值為”abc”的對象則不會重復(fù)創(chuàng)建)。
    • new String(“abc”): 一個String類型對象,位于heap區(qū)。
  • String類中用于存儲對象的值的變量使用了final修飾,只能在構(gòu)造時賦值一次。即,一個String對象所記的value永遠(yuǎn)不能改變,這就是不可變字符串的代碼實(shí)現(xiàn)。

  • 我對這里有一個疑惑
    書中表示“原始字符串放置在堆中”,可以自動回收。但是,根據(jù)我查閱的其他資料,原始的字符串”abc”應(yīng)該位于方法區(qū),方法區(qū)在主程序運(yùn)行期間是不會自動回收的。這里似乎有矛盾。
    簡單看了下《深入理解Java虛擬機(jī)》:Java虛擬機(jī)規(guī)范把方法區(qū)描述為堆的一個邏輯部分,但是它卻有一個別名叫做“非堆”,目的應(yīng)該是與Java堆區(qū)分開來。也就是說,方法區(qū)應(yīng)該是堆的一部分,但方法區(qū)的實(shí)現(xiàn)屬于虛擬機(jī)實(shí)現(xiàn)細(xì)節(jié),不受虛擬機(jī)規(guī)范約束。為防止內(nèi)存溢出以及極少數(shù)方法在不同虛擬機(jī)下有不同的表現(xiàn),目前傾向于不將方法區(qū)實(shí)現(xiàn)為“永久代”,但需要為方法區(qū)單獨(dú)編寫內(nèi)存管理代碼。由于對這一塊了解較少,這個問題尚待深入了解。

private final char value[];public String() {this.value = "".value; }public String(String original) {this.value = original.value;this.hash = original.hash; }public String(char value[]) {this.value = Arrays.copyOf(value, value.length); } ...

3.6.4 檢測字符串是否相等

  • 可以使用equals(Object)和equalsIgnoreCase(String)方法檢測字符串是否相等(后者忽略大小寫。)為避免NullPointerException,當(dāng)比較常量與變量時,應(yīng)該以常量調(diào)用equals()方法。
  • equals(Object)雖然形式參數(shù)被聲明為Object,但實(shí)際上在比較時會先做instanceof String判斷,所以實(shí)際上只能比較String類型。
String string = "abc";StringBuffer sBuffer = new StringBuffer("abc");System.out.println(string.equals(sBuffer)); // false public boolean equals(Object anObject) {if (this == anObject) {return true;}if (anObject instanceof String) {String anotherString = (String)anObject;int n = value.length;if (n == anotherString.value.length) {char v1[] = value;char v2[] = anotherString.value;int i = 0;while (n-- != 0) {if (v1[i] != v2[i])return false;i++;}return true;}}return false;}

3.6.5 空串與Null串

  • 空串”“是長度為0的字符串對象,可以用來調(diào)用String類的所有成員方法和屬性。
  • Null串null表示字符串變量目前沒有引用任何字符串對象,不能作任何調(diào)用。

3.6.6 代碼點(diǎn)與代碼單元

  • char數(shù)據(jù)類型是一個采用UTF-16編碼表示Unicode代碼點(diǎn)的代碼單元。大多數(shù)常用的Unicode字符使用一個代碼單元就可以表示(即一個char對應(yīng)一個實(shí)際字符),而輔助字符需要一對代碼單元表示(即兩個char對應(yīng)一個實(shí)際字符)。
  • 一個實(shí)際字符為一個代碼點(diǎn)(codePoint)。
  • leng()和charA()方法都是基于代碼單元,所以在字符串中含有輔助字符的情況下,返回的結(jié)果可能不是想要的。這時候,需要用codePointCount()和offsetByCodePonits()+codePointAt()方法代替。

3.6.7 字符串API(java.lang.String)

  • char charAt(int index)
    返回給定位置的代碼單元。不建議調(diào)用這個方法獲取實(shí)際字符。
  • int codePointAt(int index)
    返回從給定位置開始或結(jié)束的代碼點(diǎn)。主要這里的index是代碼單元的index,而不是代碼點(diǎn)的index。建議使用該方法獲取實(shí)際字符。
  • int offsetByCodePoints(int startIndex, int cpCount)
    返回從startIndex開始,位移cpCount代碼點(diǎn)后的index。
  • int compareTo(String other)
  • boolean endsWith(String suffix)
  • bollean equals(Object other)
  • equalsIgnoreCase(String other)
  • int indexOf(String subString)
  • int indexOf(String subString, int fromIndex)
  • int indexOf(int cp)
  • int indexOf(int cp, int fromIndex)
  • int lastIndexOf(String subString)
  • int lastIndexOf(String subString, int fromIndex)
  • int lastIndexOf(int cp)
  • int lastIndexOf(int cp, int fromIndex)
  • int length()
  • int codePointCount(int startIndex, int endIndex)
  • String replace(CharSequence oldString, CharSequence newString)
  • boolean startsWith(String prefix)
  • String substring(int beginIndex)
  • String substring(int beginIndex, int endIndex)
  • String toLowerCase()
  • String toUpperCase()
  • String trim()
    注意:凡是(begin, end)形式的參數(shù),對應(yīng)的都是半閉合區(qū)間,即[begin, end),包含開始而不包含結(jié)束。

3.6.9 構(gòu)建字符串

  • 由于String對象是不可變的,當(dāng)需要用多個較短的字符串拼接成一個長字符串時,一般應(yīng)使用StringBuilder或StringBuffer以提高效率。
  • StringBuilder()/StringBuffer()
  • int length()
  • StringBuilder append(String str)
  • StringBuilder append(char c)
  • StringBuilder appendCodePoint(int cp)
  • void setCharAt(int index, char c)
  • StringBuilder insert(int offset, String str)
    在offset位置插入字符串
  • StringBuilder insert(int offset, char c)
  • StringBuilder delete(int startIndex, int endIndex)
  • String toString()
  • 注意:以上返回值類型為StringBuilder的方法返回的均是調(diào)用者自身。

3.7 輸入輸出

3.7.1 讀取輸入

  • java.lang.Scanner
    • Scanner(InputStream in)
    • String nextLine()
    • String next()
    • int nextInt()
    • double nextDouble()
    • boolean hasNext()
    • boolean hasNextInt()
    • boolean hasNextDouble()
  • java.lang.System
    • static Console console()
  • java.io.Console
    • char[] readPassword(String prompt, Object… args)
      提供一個格式化提示,然后從控制臺讀取密碼,禁用回顯。
    • String readLine(String prompt, Object… args)
      提供一個格式化提示,然后從控制臺讀取單行文本。

3.7.2 格式化輸出

  • System.out.print(Object obj)
  • System.out.printf(String format, Object… args)

3.7.2 文件輸入與輸出

  • java.util.Scanner
    • Scanner(File f)
    • Scanner(Path p)
    • Scanner(String data)
  • java.io.PrintWriter
    • PrintWriter(String fileName)
  • java.nio.file.Paths
    • static Path get(String pahtName)

3.8 控制流程

3.8.1 塊作用域

  • 塊(即復(fù)合語句)是指由一對花括號括起來的若干條簡單的Java語句。塊確定了變量的作用域。一個塊可以嵌套在另一個塊中。
  • 不能再嵌套的兩個塊中聲明同名的變量。

3.8.2 條件語句

if(condition){statement; // 如果condition為true,執(zhí)行statement;否則什么都不執(zhí)行。 } if(condition){statement1; // 如果condition為true,執(zhí)行statement1; }else{statement2; // 否則,執(zhí)行statement2。 } if(condition1){statement1; // 如果condition1為true,執(zhí)行statement1; }else if(condition2){statement2; // 如果condition2為true,執(zhí)行statement2;依次類推; }... else{statement(n+1); // 如果所有condition都為false,執(zhí)行statement(n+1)。 }

3.8.3 循環(huán)語句

while(condition){statement; // 循環(huán)判斷condition,當(dāng)為true時執(zhí)行statement;當(dāng)為false時停止循環(huán)。 } do{statement; // 執(zhí)行statement,然后循環(huán)判斷condition,當(dāng)為true時執(zhí)行statement;當(dāng)為false時停止循環(huán)。 }while(condition)

3.8.4 確定循環(huán)

for(initialize counter; condition; update counter){statment; // 執(zhí)行initialize counter,然后循環(huán)判斷condition,當(dāng)為true時依次執(zhí)行statement及update counter;當(dāng)為fasle時停止循環(huán)。 }

3.8.5 多重選擇:switch語句

switch(key){ // 可以是char,byte,short,int,enum,String(1.7)。 case value1:statement1; // 當(dāng)key的值等于value1時,執(zhí)行statement1。break; // break或}表示退出switch語句。 case value2:statement2; // 當(dāng)key的值等于value2時,執(zhí)行statement2,依次類推。break; ... default:statement(n+1); // 當(dāng)key的值不等于任何value,執(zhí)行statement(n+1)。break; }

3.8.6 中斷控制流程語句

  • break:可用于循環(huán)語句或switch語句。跳出循環(huán)語句或switch語句,不再執(zhí)行剩余部分(停止循環(huán))。
A: for(int i = 0; i <= 9; i ++){B: for(int j = 0; j <= 9; j ++){C: for(int k = 0; k <= 9; k ++){if(k == 1){break; // 當(dāng)k=1時,跳出所在循環(huán)(C)}System.out.println("" + i + j + k);}}} A: for(int i = 0; i <= 9; i ++){B: for(int j = 0; j <= 9; j ++){C: for(int k = 0; k <= 9; k ++){if(k == 1){break A; // 當(dāng)k=1時,跳出所在循環(huán)A}System.out.println("" + i + j + k);}}}
  • coutinue:僅用于循環(huán)語句,用法語break相同,但只跳過當(dāng)次循環(huán)的剩余部分,跳轉(zhuǎn)到下一次判斷(while)或更新計(jì)數(shù)器(for)部分。

3.9 大數(shù)值

  • BigInteger可以表示任意精度的整數(shù),BigDecimal可以表示任意精度的浮點(diǎn)數(shù)。
  • java.math.BigInteger
    • BigInteger add(BigInteger other)
    • BigInteger subtract(BigInteger other)
    • BigInteger multiply(BigInteger other)
    • BigInteger divide(BigInteger other)
    • BigInteger mod(BigInteger other)
    • int compareTo(BigInteger other)
    • static BigInteger valueOf(long x)
  • java.math.BigDecimal
    • BigDecimal add(BigDecimal other)
    • BigDecimal subtract(BigDecimalother)
    • BigDecimal multiply(BigDecimalother)
    • BigDecimal divide(BigDecimal other, RoundingMode mode) // mode表示舍入方式,RoundingMode.HALF_UP表示四舍五入。
    • int compareTo(BigDecimal other)
    • static BigDecimal valueOf(double x)

3.10 數(shù)組

  • 數(shù)組是一種數(shù)據(jù)結(jié)構(gòu),用來存儲同一類型值的集合。通過一個整型下標(biāo)可以訪問數(shù)組中的每一個值。
  • 聲明數(shù)組:
    • int[] a = new int[n];
    • int a[] = new int[n];
    • 數(shù)組元素存儲在heap中,因此具有默認(rèn)初始化值。數(shù)值類型為0,char為\u0000,boolean為false,引用類型為null。
    • 一旦創(chuàng)建了數(shù)組,就不能再改變它的大小。
    • Arrays.toString(Object[] arr)將返回一個包含數(shù)組所有元素的字符串,格式為”[e0, e1,e2…]”。
    • 數(shù)組長度可以為0.

3.10.1 for each循環(huán)(增強(qiáng)for循環(huán))

  • for (type variable : collection){ statement },意為”for each element in collection”。
  • collection可以是數(shù)組或任意實(shí)現(xiàn)了Iterable接口的 類對象。

3.10.2 數(shù)組初始化以及匿名數(shù)組

// 先聲明一個數(shù)組,然后初始化每個元素。 int[] arr = new int[5]; arr[0] = 1; arr[1] = 2; arr[2] = 3; arr[3] = 4; arr[4] = 5; // 聲明數(shù)組的同時初始化。 int[] arr = new int[]{1,2,3,4,5}; // 簡寫。 int[] arr = {1,2,3,4,5}; // 創(chuàng)建一個匿名數(shù)組。 new int[]{1,2,3,4}; // 注意,不能單獨(dú)創(chuàng)建一個匿名數(shù)組而沒有其他任何操作(如傳值、打印等),編譯會報(bào)錯。 // 用一個匿名數(shù)組重新初始化一個數(shù)組變量。 arr = new int[]{1,2,3,4}; // 簡寫。 arr = {1,2,3,4}; // 以下的寫法是錯誤的,不能同時聲明數(shù)組的長度和具體元素。 int[] arr = new int[5]{1,2,3,4,5};

3.10.3 數(shù)組拷貝

  • Java中允許將一個引用變量拷貝給另一個引用變量,此時,兩個變量引用同一個對象。
int[] a = new int[5]; int[] b = a; b[0] = 1; System.out.println("a[0]=" + a[0]); // a[0]=1
  • 可以使用Arrays.copyOf(Object[] obj, int newLength)方法將一個數(shù)組中的全部或部分元素拷貝到一個新的數(shù)組中。
int[] a = new int[]{1,2,3,4,5}; int[] b = Arrays.copyOf(a, 3); // 只拷貝前3個元素,超出新數(shù)組長度部分被舍棄。 System.out.println(Arrays.toString(b)); // [1, 2, 3] int[] c = Arrays.copyOf(a, 7); // 拷貝全部元素,新數(shù)組不足部分用默認(rèn)值補(bǔ)足。 System.out.println(Arrays.toString(c)); [1, 2, 3, 4, 5, 0, 0]

3.10.4 命令行參數(shù)

  • Java中的main方法接收一個字符串?dāng)?shù)組,這個數(shù)組可以通過命令行參數(shù)傳入。
// java Demo -1 2 3 public class Demo {public static void main(String[] args) {System.out.println(Arrays.toString(args)); // [1,2,3]} }

3.10.5 數(shù)組排序

  • java.util.Arrays
    • static String toString(type[] a)
    • static type[] copyOf(type[] a, int newLength)
    • static type[] copyOfRange(type[] a, int start, int end)
    • static void sort(type[] a)
    • static int binarySearch(type[] a, type v)
    • static int binarySearch(type[] a, int start, int end, type v)
    • static void fill(type[] a, type v)
    • static boolean equals(type[] a, type[] b)

3.10.6 多維數(shù)組

  • 多維數(shù)組將使用多個下標(biāo)訪問數(shù)組元素,它適用于表示表格或更加復(fù)雜的排列形式。二維數(shù)組也稱為矩陣。
  • Arrays.deepToString(Object[] arr)將返回包含一維數(shù)組和二維數(shù)組全部元素的字符串。

3.10.7 不規(guī)則數(shù)組

  • Java實(shí)際上沒有多維數(shù)組,只有一維數(shù)組。多維數(shù)組被解釋為“數(shù)組的數(shù)組”,即元素是另一個數(shù)組的數(shù)組。
  • 數(shù)組的每一行(即每個元素?cái)?shù)組)長度不相等的二維數(shù)組,稱為不規(guī)則數(shù)組。
int[][] odds = new int[10][]; odds[0] = new int[1]; odds[1] = new int[2]; // ...

轉(zhuǎn)載于:https://www.cnblogs.com/leeqihe/p/9061179.html

總結(jié)

以上是生活随笔為你收集整理的【Java核心计算 基础知识(第9版)】第3章 Java的基本程序设计结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。