摘要:四上的操作看五格式化輸出運(yùn)用和語言很相似和是等價(jià)的喲類格式化說明符轉(zhuǎn)換六正則表達(dá)式網(wǎng)上教程學(xué)七掃描輸入新增了類。
一、不可變String
String類型的對(duì)象是不可變的,所有的改變實(shí)際上都是創(chuàng)建了一個(gè)新的String對(duì)象,另外當(dāng)String作為傳入?yún)?shù)的時(shí)候,其實(shí)實(shí)際上傳入的是這個(gè)引用的一個(gè)拷貝,這個(gè)方法結(jié)束了之后這個(gè)傳入的引用也就消失了,原來的那個(gè)String不會(huì)受到方法內(nèi)的影響而改變。
package tij.string; public class Test { String s = "field"; Object o = "123"; void change(String change_s) { System.out.println(this.s == change_s); System.out.println(this.s.hashCode() + "---" + change_s.hashCode()); change_s = "change"; System.out.println(this.s == change_s); System.out.println(this.s.hashCode() + "---" + change_s.hashCode()); } public static void main(String[] args) { Test t = new Test(); t.change(t.s); System.out.println(t.s); System.out.println("--------"); t.change(t.o); System.out.println(t.o); } void change(Object o) { o = 123; System.out.println(this.o == o); System.out.println(this.s.hashCode() + "---" + o.hashCode()); } }
這個(gè)例子是我自己想的,在接收string參數(shù)的change方法(就叫暫時(shí)就change1啦)里,傳入的的確是t.s,在未對(duì)change_s進(jìn)行操作的時(shí)候,傳入的change_s與t.s也的確完全相同,但是當(dāng)改變了傳入?yún)?shù)change_s后,可以發(fā)現(xiàn)t.s并沒有改變。這就證實(shí)了,傳入的其實(shí)并不是t.s這個(gè)引用本身,而傳入的其實(shí)是這個(gè)引用的拷貝,為了對(duì)比,我還加入了傳入?yún)?shù)為object類型的change方法,對(duì)比可以發(fā)現(xiàn),在接收Object方法的change中,傳入的就是引用本身。
另外還發(fā)現(xiàn)= =,change方法存在重寫,但是string是Object的子類,當(dāng)傳遞string或string的子類的時(shí)候,優(yōu)先調(diào)用傳遞參數(shù)是String的,沒有的話再去調(diào)用傳遞參數(shù)是object的方法。就是跟誰更親調(diào)用誰。
這句話說的挺好。
String是不可變對(duì)象,但是String對(duì)象可以適用“+”這個(gè)運(yùn)算符,由于String的不可變性,當(dāng)String類型對(duì)象會(huì)變化的時(shí)候,推薦適用StringBuilder
三、無意識(shí)的遞歸有時(shí)候你不小心就會(huì)用遞歸了,比如ArrayList類型對(duì)象的toString方法就會(huì)遍歷一圈,只不過你以為沒有遍歷而已。如果你真的想打印這個(gè)對(duì)象的地址,請(qǐng)用他父類Object的toString方法。
四、String上的操作看API
五、格式化輸出 1.運(yùn)用printf()System.out.printf("%d",x);
和C語言很相似
2.System.out.format()public class Test { public static void main(String[] args) { int x = 5; double y = 5.332542; System.out.printf("%d %f", x, y); System.out.format("%d %f", x, y); } }
format和printf是等價(jià)的喲
3.Formatter類import java.io.PrintStream; import java.util.Formatter; public class Test { public static void main(String[] args) { PrintStream outAlias = System.out; Turtle tommy = new Turtle("Tommy", new Formatter(outAlias)); Turtle terry = new Turtle("Terry", new Formatter(outAlias)); tommy.move(0, 0); terry.move(4, 0); } } class Turtle { private String name; private Formatter f; public Turtle(String name, Formatter f) { this.name = name; this.f = f; } public void move(int x, int y) { f.format("%s The Turetle is ad (%d,%d) ", name, x, y); } }4.格式化說明符
import java.io.PrintStream; import java.util.Formatter; public class Test { public static void main(String[] args) { Receipt receipt = new Receipt(); receipt.printTitle(); receipt.print("Princess Peas", 3, 5.1); } } class Receipt { private double total = 0; private Formatter f = new Formatter(System.out); public void printTitle() { f.format("0123456789012345678901234567890 "); f.format("%-15s %5s %10s ", "Item", "Qty", "Price"); f.format("%-15s %5s %10s ", "----", "---", "-----"); } public void print(String name, int qty, double price) { f.format("%-15.15s %5d %10.2f ", name, qty, price); total += price; } }5.Formatter轉(zhuǎn)換
public class Test { public static void main(String[] args) { int x = 3; double y = 5.1231315; String result = String.format("[%d %.2f]", x, y); System.out.println(result); } }六、正則表達(dá)式
網(wǎng)上教程學(xué)
七、掃描輸入Java SE5新增了Scanner類。
看書
廢棄
end
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/67578.html
摘要:迭代器解決了這個(gè)問題。刪除后于是我們可以寫一個(gè)方法,接受一個(gè)類型,然后讓他調(diào)用方法,這就不需要考慮這個(gè)是個(gè)還是了,也就是說,可以將遍歷容器的操作與序列底層的結(jié)構(gòu)分離,迭代器統(tǒng)一了對(duì)容器類的訪問方式。十二和兩種遍歷的方法,與迭代器方法。 一、泛型和類型安全的容器 package tij.hoding; import java.util.ArrayList; public class ...
摘要:通過運(yùn)行時(shí)類型信息,程序能夠使用基類的指針或引用來檢查這些指針或引用所指的對(duì)象的實(shí)際派生類型。編程應(yīng)該盡量面向接口編程,應(yīng)該對(duì)類型信息盡量的少了解二對(duì)象看書,書上寫得好靜態(tài)語句塊在這個(gè)類被加載的時(shí)候運(yùn)行。 一、為什么需要RTTI Run-Time Type Information。通過運(yùn)行時(shí)類型信息,程序能夠使用基類的指針或引用來檢查這些指針或引用所指的對(duì)象的實(shí)際派生類型。編程應(yīng)該盡量...
摘要:內(nèi)部類中也可以取得這個(gè)外部類對(duì)象引用。創(chuàng)建成員內(nèi)部類對(duì)象的時(shí)候需要外部類對(duì)象。另外在方法中的內(nèi)部類不能加等權(quán)限修飾符,只能加和修飾符??梢栽诮涌趦?nèi)部定義內(nèi)部類,而且他們即使沒有修飾,也會(huì)自動(dòng)變成的。 Thinking in Java撈干貨,寫筆記 一、成員內(nèi)部類 1.最基本使用 public class Demo { class Contents{ privat...
摘要:但如果導(dǎo)出類還有抽象方法,那這個(gè)類還應(yīng)該加上聲明為抽象類。并且接口具有繼承的一系列特點(diǎn),如向上轉(zhuǎn)型等等。接口中的方法是自動(dòng)是的。 Thinking in Java 好書全是干貨 一、抽象類和抽象方法 抽象方法:這種方法只有聲明而沒有方法體,下面是抽象方法生命所采用的語法 abstract void f(); 包含抽象方法的類叫做抽象類,如果一個(gè)類包含一個(gè)或多個(gè)抽象方法,該類必須被限定為...
摘要:異常處理程序拋出的異常必須在異常處理程序中得到處理。終止與恢復(fù)異常處理有兩種模型,支持終止模型,一旦異常被拋出,表明錯(cuò)誤無法挽回,無法退回來繼續(xù)執(zhí)行之前出錯(cuò)的代碼。對(duì)于異常來說,最重要的部分就是類名。 一、概念 使用異常能降低處理錯(cuò)誤代碼的復(fù)雜程度,并且將錯(cuò)誤在一個(gè)地方進(jìn)行處理,于是將描述在正常行為過程中做過什么事的代碼和出了問題怎么辦的代碼相分離 二、基本異常 異常情形指的是當(dāng)前環(huán)境...
閱讀 2528·2023-04-25 17:27
閱讀 1838·2019-08-30 15:54
閱讀 2383·2019-08-30 13:06
閱讀 2993·2019-08-30 11:04
閱讀 765·2019-08-29 15:30
閱讀 742·2019-08-29 15:16
閱讀 1745·2019-08-26 10:10
閱讀 3616·2019-08-23 17:02