《Java編程思想》筆記 - 持續(xù)更新

1喊巍、Java對(duì)于大數(shù)值屠缭,可以使用BigInteger操作大整數(shù),使用BigDecimal指定小數(shù)的保留位數(shù)玄糟,而不損失精度勿她。新建對(duì)象代碼如下:

BigInteger bi1 = new BigInteger("12345678") ;
BigDecimal bi2 = new BigDecimal(3.333) ; 

2、如果在返回void的方法中沒有return語(yǔ)句,那么在該方法的結(jié)尾處會(huì)有一個(gè)隱式的return阵翎。

3逢并、執(zhí)行break outer后直接跳出三層for循環(huán)然后結(jié)束循環(huán),continue outer后繼續(xù)執(zhí)行剩下的循環(huán)郭卫。

public static void main(String[] args){
    outer:
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 5; j++) {
            for (int k = 0; k < 5; k++) {
                if (j ==3){
                    break outer;
                    continue outer;
                }
                System.out.println(j);
            }
        }
    }
}

4砍聊、關(guān)于this關(guān)鍵字

(1).構(gòu)造器Flower(String s,int petals)表明:在構(gòu)造器里面盡管可以用this調(diào)用一個(gè)構(gòu)造器,但卻不能調(diào)用兩個(gè).此外,必須將構(gòu)造器調(diào)用置于最起始處,否則編譯器會(huì)報(bào)錯(cuò)。

(2).this的另一種用法:由于構(gòu)造器參數(shù)s的名稱和數(shù)據(jù)成員s的名字相同,所以會(huì)產(chǎn)生歧義贰军。使用this.s來(lái)代表數(shù)據(jù)成員就能解決重名導(dǎo)致錯(cuò)誤這個(gè)問(wèn)題玻蝌。

(3).除了在構(gòu)造器中用this調(diào)用構(gòu)造器之外,編譯器禁止在其他任何方法中調(diào)用構(gòu)造器蟹肘。

5、根據(jù)繼承的概念俯树,子類會(huì)繼承父類所有的成員帘腹,包括私有成員和公有成員,只不過(guò)父類的私有成員在子類中不可見许饿,但它是確確實(shí)實(shí)存在的阳欲。

6、靜態(tài)數(shù)據(jù)的初始化順序

先上代碼:

public class TestSequence {

    public static void main(String[] args){
        System.out.println("進(jìn)入main方法");
        Bclass d = new Bclass("TestSequence -- main -- Bclass d");
    }

    static Bclass b = new Bclass("TestSequence -- static Bclass b ");
    static Cclass c = new Cclass("TestSequence -- static Cclass c");
}

class Bclass {
    Cclass c1 = new Cclass("Bclass -- Cclass c1");
    static Cclass c2 = new Cclass("Bclass -- static Cclass c2");

    public Bclass(String desc) {
        System.out.println(desc);
    }
}

class Cclass {
    public Cclass(String desc) {
        System.out.println(desc);
    }
}

打印結(jié)果:

Bclass -- static Cclass c2 
Bclass -- Cclass c1
TestSequence -- static Bclass b 
TestSequence -- static Cclass c
進(jìn)入main方法
Bclass -- Cclass c1
TestSequence -- main -- Bclass d

結(jié)果說(shuō)明:

(1)打印結(jié)果"TestSequence -- static Bclass b" --> "TestSequence -- static Cclass c" --> "進(jìn)入main方法"陋率,說(shuō)明類里面的靜態(tài)屬性會(huì)在靜態(tài)main方法執(zhí)行之前執(zhí)行球化。

(2)打印結(jié)果"Bclass -- static Cclass c2" --> "Bclass -- Cclass c1" --> "TestSequence -- static Bclass b",說(shuō)明一個(gè)對(duì)象被創(chuàng)建之前會(huì)先初始化靜態(tài)屬性瓦糟,接下來(lái)是非靜態(tài)成員屬性筒愚,最后才是構(gòu)造方法。

(3)打印結(jié)果"進(jìn)入main方法" --> "Bclass -- Cclass c1" --> "TestSequence -- main -- Bclass d"菩浙,說(shuō)明靜態(tài)的屬性或者變量在內(nèi)存中只有一份巢掺,只會(huì)被創(chuàng)建一次,不會(huì)被多次創(chuàng)建芍耘。

7址遇、善用引用傳遞操作對(duì)象

public class TestReference {

    public static void main(String[] args){
        VoClass voClass = new VoClass();
        System.out.println(voClass);
        change(voClass);
        System.out.println(voClass);
    }

    private static void change(VoClass voClass){
        voClass.number = 100;
        voClass.string = "love you";
    }

}

class VoClass{
    int number = 8;
    String string = "love";

    @Override
    public String toString() {
        return "VoClass{" + "number=" + number + ", string='" + string + '\'' + '}';
    }
}

8熄阻、可變參數(shù)的使用

public static void main(String[] args){
    printMethod("one","two","three");
    printMethod();
}

private static void printMethod(String... strings){
    for (String string : strings) {
        System.out.println(string);
    }
}

打印結(jié)果:
one
two
three

9斋竞、Java文件名必須要和用public修飾的類名相同,沒有用public修飾類時(shí)文件名可以隨意秃殉。

10坝初、Java的引用類型

Java對(duì)引用的概念進(jìn)行了擴(kuò)充,將引用分為強(qiáng)引用(Strong Reference)、軟引用(Soft Reference)钾军、弱引用(Weak Reference)鳄袍、虛引用(Phantom Reference) 4種,這4種引用強(qiáng)度依次逐漸減弱。

(1)口強(qiáng)引用就是指在程序代碼之中普遍存在的,類似"Object obj= new Object()"這類的引用,只要強(qiáng)引用還存在,垃圾收集器永遠(yuǎn)不會(huì)回收掉被引用的對(duì)象吏恭。

(2)軟引用是用來(lái)描述一些還有用但并非必需的對(duì)象拗小。對(duì)于軟引用關(guān)聯(lián)著的對(duì)象,在系統(tǒng)將要發(fā)生內(nèi)存溢出異常之前,將會(huì)把這些對(duì)象列進(jìn)回收范圍之中進(jìn)行第二次回收。如果這次回收還沒有足夠的內(nèi)存,才會(huì)拋出內(nèi)存溢出異常樱哼。在JDK 1.2之后,提供了SoftReference類來(lái)實(shí)現(xiàn)軟引用哀九。

(3)弱引用也是用來(lái)描述非必需對(duì)象的,但是它的強(qiáng)度比軟引用更弱一些,被弱引用關(guān)聯(lián)的對(duì)象只能生存到下一次垃圾收集發(fā)生之前。當(dāng)垃圾收集器工作時(shí),無(wú)論當(dāng),
前內(nèi)存是否足夠,都會(huì)回收掉只被弱引用關(guān)聯(lián)的對(duì)象搅幅。在JDK 1.2之后,提供了WeakReference類來(lái)實(shí)現(xiàn)弱引用阅束。

(4)虛引用也稱為幽靈引用或者幻影引用,它是最弱的一種引用關(guān)系。一個(gè)對(duì)象是否有虛引用的存在,完全不會(huì)對(duì)其生存時(shí)間構(gòu)成影響,也無(wú)法通過(guò)虛引用來(lái)取得一個(gè)對(duì)象實(shí)例茄唐。為一個(gè)對(duì)象設(shè)置虛引用關(guān)聯(lián)的唯一目的就是能在這個(gè)對(duì)象被收集器回收時(shí)收到一個(gè)系統(tǒng)通知息裸。在JDK 1.2之后,提供了PhantomReference類來(lái)實(shí)現(xiàn)虛引用。

11、final用來(lái)修飾引用呼盆,雖然引用是恒定不變的年扩,但該引用所指向的對(duì)象自身是可以被改變的。

12访圃、使用final修飾的變量在編譯之前不一定知道他的值常遂,但在使用之前必須初始化。如下:

private final int i = rand.nextInt(20);
static final int j = rand.nextInt(20);

總結(jié):這個(gè)特點(diǎn)的好處是既可以根據(jù)不同的對(duì)象而賦不同的值挽荠,又可以保證其值恒定不變克胳。

13、關(guān)于繼承覆蓋和main方法

class A {
    int a = 100;

    public A() {
        System.out.println("begin construct A");
        print();
        System.out.println("In class A  construct method, this = " + this);
    }

    public void print(){
        System.out.println("In class A , a = " + a);
    }
}

class B extends A{
    int b = 200;

    public B() {
        System.out.println("begin construct B");
        print();
        System.out.println("In class B  construct method, this = " + this);
    }

    @Override
    public void print(){
        System.out.println("In class B , b = " + b);
    }
}

class C extends B{
    int c = 300;

    public C() {
        System.out.println("begin construct C");
        print();
        System.out.println("In class C construct method, this = " + this);
    }

    @Override
    public void print(){
        System.out.println("In class C , c = " + c);
    }
}

public class MainClass {

    public MainClass() {
        System.out.println("begin construct MainClass");
    }

    public static void main(String[] args) {
        C c = new C();
        System.out.println("In main method , c = " + c);
    }
}

控制臺(tái)輸出如下:

begin construct A
In class C , c = 0
In class A construct method, this = C@1540e19d
begin construct B
In class C , c = 0
In class B construct method, this = C@1540e19d
begin construct C
In class C , c = 300
In class C construct method, this = C@1540e19d
In main method , c = C@1540e19d

說(shuō)明:

(1)我們都知道圈匆,main方法是一個(gè)靜態(tài)方法漠另,隨著JVM加載class文件時(shí)加載,先于對(duì)象而存在跃赚,也就是說(shuō)不需要new MainClass就可以調(diào)用MainClass里面的mian方法笆搓,所以在控制臺(tái)中我們看不到"begin construct MainClass"這句話。

(2)在子類繼承父類的情形中纬傲,new一個(gè)子類時(shí)我們都知道默認(rèn)會(huì)先調(diào)用父類的構(gòu)造方法满败,上面代碼可知,B繼承A叹括,C繼承B算墨,而在new C的過(guò)程中,會(huì)先調(diào)用B的構(gòu)造方法汁雷,并且將C對(duì)象的引用this隱式的作為參數(shù)傳到B的構(gòu)造方法中净嘀,而B因?yàn)槔^承了A,所以在創(chuàng)建B對(duì)象時(shí)會(huì)繼續(xù)先調(diào)用A的構(gòu)造方法侠讯,同時(shí)將C對(duì)象的引用隱式的作為參數(shù)往上傳遞到A的構(gòu)造方法中(注意是C對(duì)象的引用挖藏,而不是B對(duì)象的引用,這個(gè)通過(guò)打印的內(nèi)容可得知)厢漩,而B和C在繼承時(shí)均覆蓋了print()方法膜眠,所以在A和B的構(gòu)造方法中調(diào)用的print()方法,實(shí)際上都是C對(duì)象的print()方法溜嗜,因?yàn)镃對(duì)象的print()方法最終覆蓋了他的所有父類的print()方法宵膨。

(3)我們可以看到,前兩次變量c的值均為0而并不是300粱胜,這是因?yàn)閏變量是在C對(duì)象中聲明并且賦值的柄驻,而在調(diào)用到A和B的構(gòu)造方法時(shí)C對(duì)象還沒生成,c變量還沒成功賦值為300焙压,同時(shí)從這里我們可以看出來(lái)鸿脓,JVM會(huì)提前于對(duì)象為這些變量賦初值抑钟,例如0和null等這些值,以避免因非常規(guī)調(diào)用而引起的問(wèn)題野哭。

14在塔、抽象類不能被new,他的抽象方法可以被分?jǐn)偟蕉鄠€(gè)抽象類去實(shí)現(xiàn)拨黔,或者被一個(gè)非抽象類全部實(shí)現(xiàn)蛔溃,又或者組合實(shí)現(xiàn)。也就是說(shuō)篱蝇,頂級(jí)抽象類的抽象方法可以被其多個(gè)子抽象類去實(shí)現(xiàn)贺待,假設(shè)其眾多的子抽象類中沒有產(chǎn)生新的抽象方法,如果該頂級(jí)抽象類的所有方法已經(jīng)被其多個(gè)子抽象類分?jǐn)倢?shí)現(xiàn)完了零截,那么最后一個(gè)繼承的非抽象類不需要強(qiáng)制實(shí)現(xiàn)任何頂級(jí)抽象類的方法麸塞,可以選擇性的覆蓋或者不覆蓋前面抽象類的非抽象方法。抽象類的好處還有涧衙,只有參數(shù)不同的共有的實(shí)現(xiàn)方法的實(shí)現(xiàn)可以放在抽象類中哪工,根據(jù)對(duì)象的實(shí)際情況不同而表現(xiàn)不同的方法可以聲明為抽象方法,讓實(shí)現(xiàn)對(duì)象自己去實(shí)現(xiàn)弧哎。

15雁比、普通對(duì)象和接口及抽象類之間轉(zhuǎn)型

public class TestInterface {

    public static void main(String[] args){
        
        // nClass是一個(gè)InterfaceA的實(shí)現(xiàn)類型,直接調(diào)用one方法沒問(wèn)題
        InterfaceA nClass = new NClass();
        nClass.one();

        // nClass2是一個(gè)InterfaceA的實(shí)現(xiàn)類型撤嫩,調(diào)用屬于InterfaceB里面的two方法時(shí)需要轉(zhuǎn)型偎捎,兩種轉(zhuǎn)型都可以
        InterfaceA nClass2 = new NClass();
        ((InterfaceB) nClass2).two();
        ((NClass) nClass2).two();
        
        // nClass3是一個(gè)AbstractC的實(shí)現(xiàn)類型,情況同上
        AbstractC nClass3 = new NClass();
        ((NClass) nClass3).one();
        
    }

}

interface InterfaceA {
    void one();
}

interface InterfaceB {
    void two();
}

abstract class AbstractC {
    abstract void three();
}

class NClass extends AbstractC implements InterfaceA,InterfaceB {

    @Override
    public void one() {
        System.out.println("one");
    }

    @Override
    public void two() {
        System.out.println("two");
    }

    @Override
    void three() {
        System.out.println("three");
    }
}

打印結(jié)果如下:

one
two
two
one

總結(jié):繼承了一個(gè)抽象類和多個(gè)接口的普通類非洲,可以向上轉(zhuǎn)型為任意一個(gè)接口類型和那個(gè)抽象類類型鸭限。

16蜕径、內(nèi)部類

public class Outer {

    private int o = 10;
    public int po = 100;

    class Inner {

        private int i = 20;
        public int pi = 200;

        public void printOuterPrivateO(){
            Outer outer = new Outer();
            System.out.println("in non static Inner , outer private o = " + outer.o);
        }

        private void printOuterPublicPO(){
            System.out.println("in non static Inner , outer public po = " + po);
        }

    }

    static class StaticInner {

        private int si = 1000;

        public void printOuterPrivateO(){
            Outer outer = new Outer();
            System.out.println("in static Inner , outer private o = " + outer.o);
        }

        private void printOuterPublicPO(){
            Outer outer = new Outer();
            System.out.println("in static Inner , outer public po = " + outer.po);
        }
    }

    public static void main(String[] args){

        // 非靜態(tài)內(nèi)部類
        Outer outer = new Outer();
        Outer.Inner inner = outer.new Inner();
        inner.printOuterPublicPO();
        inner.printOuterPrivateO();
        System.out.println("inner private i = " + inner.i);

        // 靜態(tài)內(nèi)部類
        StaticInner staticInner = new StaticInner();
        staticInner.printOuterPublicPO();
        staticInner.printOuterPrivateO();
        System.out.println("staticInner private si = " + staticInner.si);
        
        // 外部類不能直接訪問(wèn)內(nèi)部類的成員两踏,以下做法將會(huì)報(bào)錯(cuò)
        System.out.println("inner public pi = " + pi);

    }
}

打印結(jié)果:

in non static Inner , outer public po = 100
in non static Inner , outer private o = 10
inner private i = 20
in static Inner , outer public po = 100
in static Inner , outer private o = 10
staticInner private si = 1000

總結(jié):

(1)非靜態(tài)內(nèi)部類必須依附在外部類的實(shí)例上,所以在新建非靜態(tài)內(nèi)部類Inner時(shí)使用如下方式:

Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();

(2)在外部類中新建靜態(tài)內(nèi)部類和新建普通的類一樣兜喻,如下:

StaticInner staticInner = new StaticInner();

(3)在沒有新建對(duì)象的情況下梦染,內(nèi)部類可以直接訪問(wèn)外部類的所有非私有成員,反過(guò)來(lái)則不行朴皆。在新建對(duì)象的情況下帕识,內(nèi)部類和外部類均可以通過(guò)新建對(duì)象的方式相互訪問(wèn)對(duì)方的所有成員,包括私有成員遂铡。例如上面的這些代碼:

//外部類訪問(wèn)內(nèi)部類私有變量
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
System.out.println("inner private i = " + inner.i);

//內(nèi)部類訪問(wèn)外部類私有變量
Outer outer = new Outer();
System.out.println("in static Inner , outer private o = " + outer.o);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末肮疗,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子扒接,更是在濱河造成了極大的恐慌伪货,老刑警劉巖们衙,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異碱呼,居然都是意外死亡蒙挑,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門愚臀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)忆蚀,“玉大人,你說(shuō)我怎么就攤上這事姑裂〔鐾啵” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵舶斧,是天一觀的道長(zhǎng)桃焕。 經(jīng)常有香客問(wèn)我,道長(zhǎng)捧毛,這世上最難降的妖魔是什么观堂? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮呀忧,結(jié)果婚禮上师痕,老公的妹妹穿的比我還像新娘。我一直安慰自己而账,他們只是感情好胰坟,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著泞辐,像睡著了一般笔横。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音孽惰,去河邊找鬼积瞒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼晚碾,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了喂急?” 一聲冷哼從身側(cè)響起格嘁,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎廊移,沒想到半個(gè)月后糕簿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涣易,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年冶伞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了新症。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡响禽,死狀恐怖徒爹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情芋类,我是刑警寧澤隆嗅,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站侯繁,受9級(jí)特大地震影響胖喳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贮竟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一丽焊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧咕别,春花似錦技健、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至偿短,卻和暖如春欣孤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背昔逗。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工降传, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人纤子。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓搬瑰,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親控硼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理艾少,服務(wù)發(fā)現(xiàn)卡乾,斷路器,智...
    卡卡羅2017閱讀 134,601評(píng)論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法缚够,類相關(guān)的語(yǔ)法幔妨,內(nèi)部類的語(yǔ)法鹦赎,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法误堡,線程的語(yǔ)...
    子非魚_t_閱讀 31,587評(píng)論 18 399
  • 一:java概述:1古话,JDK:Java Development Kit,java的開發(fā)和運(yùn)行環(huán)境锁施,java的開發(fā)工...
    ZaneInTheSun閱讀 2,629評(píng)論 0 11
  • 今天悉抵,2016年7月30日肩狂。我弟回寧夏去了。 或許很多人覺得姥饰,走就走吧傻谁!然而,我卻不一樣列粪。滿滿的不舍审磁,只能壓抑在心...
    小鹿莊園zhlu閱讀 271評(píng)論 0 0
  • 01 大概每個(gè)人都有過(guò)這樣的經(jīng)歷掺逼。 或者百無(wú)聊賴地走在路上吃媒,或者在某一堂課上,或者參加什么聚會(huì)吕喘,然后看到了人群中那...
    11點(diǎn)11分想你閱讀 1,153評(píng)論 0 1