《Java核心技術(shù)卷 I》之 Java對(duì)象與類

Java對(duì)象與類

面向?qū)ο蟪绦蛟O(shè)計(jì)

面向?qū)ο蟪绦蛟O(shè)計(jì),簡(jiǎn)稱OOP,Java語(yǔ)言就是完全面向?qū)ο蟮摹?/p>

類(class)是創(chuàng)建對(duì)象的模板和藍(lán)圖,是一組類似對(duì)象的共同抽象定義火诸。類是一個(gè)抽象的概念,不是一個(gè)具體的東西涵叮。由類構(gòu)造 (construct) 對(duì)象的過(guò)程稱為創(chuàng)建類的實(shí)例 (instance)惭蹂。
一個(gè)類可以包含:

  1. 局部變量:在方法伞插、構(gòu)造方法或者語(yǔ)句塊中定義的變量被稱為局部變量割粮。變量聲明和初始化都是在方法中,方法結(jié)束后媚污,變量就會(huì)自動(dòng)銷毀舀瓢。
  2. 成員變量:成員變量是定義在類中,方法體之外的變量耗美。這種變量在創(chuàng)建對(duì)象的時(shí)候?qū)嵗┧琛3蓡T變量可以被類中方法、構(gòu)造方法和特定類的語(yǔ)句塊訪問(wèn)商架。
  3. 類變量:類變量也聲明在類中堰怨,方法體之外,但必須聲明為static類型蛇摸。
  4. 方法:一個(gè)類可以擁有多個(gè)方法备图,用于操作變量。

封裝:實(shí)現(xiàn)封裝的關(guān)鍵在于絕對(duì)不能讓類中的方法直接地訪問(wèn)其他類的成員變量赶袄。程序僅通過(guò)對(duì)象的方法與對(duì)象數(shù)據(jù)進(jìn)行交互揽涮。

繼承:OOP的另一個(gè)原則就是可以通過(guò)擴(kuò)展一個(gè)類來(lái)建立另外一個(gè)新的類,在 Java 中饿肺,所有的類都源自于 Object蒋困。通過(guò)擴(kuò)展一個(gè)類來(lái)建立另外一個(gè)類的過(guò)程稱為繼承(inheritance)。

對(duì)象

對(duì)象是類的實(shí)例化結(jié)果敬辣,是實(shí)實(shí)在在的存在雪标,代表現(xiàn)實(shí)世界的某一事物。對(duì)象狀態(tài)的改變必須通過(guò)調(diào)用方法實(shí)現(xiàn)溉跃。

對(duì)象的三個(gè)主要特性:

對(duì)象的行為 (behavior):可以對(duì)對(duì)象施加哪些操作村刨,或可以對(duì)對(duì)象施加哪些方法
對(duì)象的狀態(tài) (state):當(dāng)施加那些方法時(shí),對(duì)象如何響應(yīng)
對(duì)象標(biāo)識(shí) (identity):如何辨別具有相同行為與狀態(tài)的不同對(duì)象

類之間的關(guān)系

依賴:uses-a 一個(gè)類的方法操縱另一個(gè)類的對(duì)象喊积,我們就說(shuō)一個(gè)類依賴于另一個(gè)類
聚合:has-a 一個(gè)類的對(duì)象包含另一個(gè)類的對(duì)象
繼承:is-a 一個(gè)類是另一個(gè)類的子類或者父類烹困,類之間進(jìn)行了擴(kuò)展。


預(yù)定義類

Java中有很多預(yù)定義類乾吻,例如Date類髓梅。并不是所有的類都具有面向?qū)ο筇卣髂怛撸?Math 類,只封裝了功能枯饿,它不需要也不必隱藏?cái)?shù)據(jù)酝锅,由于沒(méi)有數(shù)據(jù),因此也不必?fù)?dān)心生成對(duì)象以及初始化實(shí)例域奢方。

對(duì)象與對(duì)象變量

在 Java 中搔扁,使用構(gòu)造器 (constructor) 構(gòu)造新實(shí)例,構(gòu)造器是一種特殊的方法蟋字,用來(lái)構(gòu)造并初始化對(duì)象稿蹲。構(gòu)造器的名字應(yīng)該與類名相同,要想構(gòu)造一個(gè)類的對(duì)象鹊奖,需要在構(gòu)造器前面加上 new 操作符苛聘。

Java中的對(duì)象變量類型只有一種,那就是引用

我們來(lái)看看這樣一行代碼到底做了什么工作:

String s = new String("Hello world");
  1. 首先忠聚,在堆中開辟一塊空間創(chuàng)建并存放了一個(gè)String對(duì)象设哗,內(nèi)容為“Hello world”(String比較特殊,還會(huì)在字符串常量池中存入一個(gè)全局共享的實(shí)例)
  2. 在棧中開辟一塊空間創(chuàng)建并存放了一個(gè)引用s
  3. 引用s指向堆中的String對(duì)象“Hello world”
    這時(shí)候我們?cè)賹懸痪?/li>
s = new String("abc");

其實(shí)两蟀,原來(lái)堆里面內(nèi)容為“Hello world”的String對(duì)象并沒(méi)有發(fā)生改變网梢,而是s指向了堆中另一個(gè)內(nèi)容為“abc”的String對(duì)象。從指針上來(lái)說(shuō)赂毯,就是值傳遞战虏。

所以,一個(gè)對(duì)象變量并沒(méi)有實(shí)際包含一個(gè)對(duì)象欢瞪,而僅僅引用一個(gè)對(duì)象活烙。

更改器方法與訪問(wèn)器方法

Java中用于表示日期的預(yù)定義類為:LocalData,還有早期的GregorianCalendar遣鼓。

其中這兩個(gè)類對(duì)日期增加的實(shí)現(xiàn)原理是不一樣的

LocalDate c = LocalDate.now();
c.plusDays(1);
GregorianCalendar c = new GregorianCalendar(2018, 2, 6);
c.add(Calendar.DATA, 1);

LocalDate的plusDays方法回得到一個(gè)新的LocalData啸盏,并返回,不改動(dòng)原來(lái)的對(duì)象
而GregorianCalendar的add方法會(huì)改變?cè)瓉?lái)對(duì)象的狀態(tài)

只訪問(wèn)對(duì)象后修改對(duì)象的方法稱為更改器方法 (accessor method)
只訪問(wèn)對(duì)象而不修改對(duì)象的方法稱為訪問(wèn)器方法 (accessor method)


用戶自定義類

構(gòu)造器的基本特點(diǎn)

  1. 構(gòu)造器與類同名
  2. 每個(gè)類可以有一個(gè)以上的構(gòu)造器骑祟,構(gòu)造器可以有 0 個(gè)回懦、1 個(gè)或多個(gè)參數(shù)(多態(tài))
  3. 構(gòu)造器沒(méi)有返回值
  4. 構(gòu)造器總是伴隨著 new 操作一起調(diào)用

封裝

使用 public getXXX()方法來(lái)代替 public XXX對(duì)實(shí)例對(duì)象的訪問(wèn),將全局變量設(shè)置為 private 可以防止受到外界的破壞次企。

注意:不要編寫返回引用可變對(duì)象的 get 方法怯晕,因?yàn)樗旧硎强勺兊脑挘瑫?huì)破壞封裝性缸棵,我們應(yīng)該只能通過(guò) setXXX()方法來(lái)改變對(duì)象的狀態(tài)舟茶,如果必須要這樣做,那么我們可以使用 clone()來(lái)將對(duì)象的副本返回回來(lái)。

私有方法

有時(shí)吧凉,為了增強(qiáng)代碼的簡(jiǎn)潔性和可讀性隧出,我們會(huì)將一段代碼劃分為若干個(gè)獨(dú)立的方法。通常阀捅,這些輔助方法不應(yīng)該成為公有接口的一部分胀瞪,最好將這樣的方法設(shè)計(jì)為 private。

final關(guān)鍵字

final在Java中是一個(gè)保留的關(guān)鍵字饲鄙,可以聲明變量凄诞、方法、類

  1. final變量忍级,一旦你將變量(對(duì)象引用)聲明作final帆谍,你將不能改變這個(gè)引用了,編譯器會(huì)檢查代碼颤练,如果你試圖將變量再次初始化的話既忆,編譯器會(huì)報(bào)編譯錯(cuò)誤驱负。但對(duì)象本身的屬性是可變的嗦玖。final經(jīng)常和static一起使用來(lái)聲明常量。
  2. final方法跃脊,方法前面加上final關(guān)鍵字宇挫,代表這個(gè)方法不可以被子類的方法重寫。如果你認(rèn)為一個(gè)方法的功能已經(jīng)足夠完整了酪术,子類中不需要改變的話器瘪,你可以聲明此方法為final。
  3. final類绘雁,final類通常功能是完整的橡疼,它們不能被繼承。Java中有許多類是final的庐舟,譬如String, Interger以及其他包裝類欣除。

final關(guān)鍵字的好處

  1. final關(guān)鍵字提高了性能。JVM和Java應(yīng)用都會(huì)緩存final變量挪略。
  2. final變量可以安全的在多線程環(huán)境下進(jìn)行共享历帚,而不需要額外的同步開銷。

靜態(tài)域與靜態(tài)方法 static

靜態(tài)變量

當(dāng)一個(gè)變量前面有了static這個(gè)修飾符杠娱,內(nèi)存會(huì)為它分配唯一的一塊存儲(chǔ)空間挽牢。
static 修飾的屬性屬于類,而不屬于任何獨(dú)立的對(duì)象摊求。

靜態(tài)常量

靜態(tài)變量用得比較少禽拔,但靜態(tài)常量卻使用得筆記多。例如 Math.PI

public class Math{
    public static final double PI = 3.14159265358979323846;
}

這樣做的好處就是,我們可以不需要構(gòu)建 Math 的對(duì)象睹栖,直接通過(guò) Math.PI 來(lái)進(jìn)行訪問(wèn)寥闪,同時(shí),設(shè)置為 final磨淌,避免了被修改的問(wèn)題疲憋。

靜態(tài)方法

假如一個(gè)方法被static修飾,可以通過(guò)類直接訪問(wèn)梁只,不被static修飾缚柳,就需要用對(duì)象來(lái)訪問(wèn)了。

例如搪锣,Math 類的 pow 方法就是一個(gè)靜態(tài)方法秋忙。

在下面兩種情況下使用靜態(tài)方法:

  1. 一個(gè)方法不需要訪問(wèn)對(duì)象狀態(tài),其所需參數(shù)都是通過(guò)顯式參數(shù)提供构舟,例如:Math.pow
  2. 一個(gè)方法只需要訪問(wèn)類的靜態(tài)域灰追。

靜態(tài)代碼塊

static塊可以置于類中的任何地方,類中可以有多個(gè)static塊狗超。在類初次被加載的時(shí)候弹澎,static塊會(huì)先于非static塊加載,按照static塊的順序來(lái)執(zhí)行每個(gè)static塊努咐,并且只會(huì)執(zhí)行一次苦蒿。

初始化例子:

class Parent {
    // 靜態(tài)變量
    public static String p_StaticField = "父類--靜態(tài)變量";
    // 變量
    public String p_Field = "父類--變量";
 
    // 靜態(tài)初始化塊
    static {
        System.out.println(p_StaticField);
        System.out.println("父類--靜態(tài)初始化塊");
    }
    // 初始化塊
    {
        System.out.println(p_Field);
        System.out.println("父類--初始化塊");
    }
 
    // 構(gòu)造器
    public Parent() {
        System.out.println("父類--構(gòu)造器");
    }
}
 
public class SubClass extends Parent {
    // 靜態(tài)變量
    public static String s_StaticField = "子類--靜態(tài)變量";
    // 變量
    public String s_Field = "子類--變量";
 
    // 靜態(tài)初始化塊
    static {
        System.out.println(s_StaticField);
        System.out.println("子類--靜態(tài)初始化塊");
    }
    // 初始化塊
    {
        System.out.println(s_Field);
        System.out.println("子類--初始化塊");
    }
 
    // 構(gòu)造器
    public SubClass() {
        System.out.println("子類--構(gòu)造器");
    }
 
    // 程序入口
    public static void main(String[] args) {
        new SubClass();
    }
}

上述代碼的輸出結(jié)果為:


輸出結(jié)果

所以,我們可以看出渗稍,父類的初始化的順序優(yōu)先于子類的初始化佩迟,但是靜態(tài)變量和靜態(tài)代碼塊的初始化順序又優(yōu)先于構(gòu)造器,且子類的靜態(tài)變量和靜態(tài)代碼塊是優(yōu)先于父類構(gòu)造器進(jìn)行初始化的竿屹。

這里要注意一點(diǎn)报强,靜態(tài)變量和靜態(tài)代碼塊初始化的先后順序是由代碼在類的位置決定的,沒(méi)有特殊的初始化順序拱燃。


方法參數(shù)

方法參數(shù)
按值傳遞 (call by value) 表示方法接收的是調(diào)用者提供的值秉溉。

而按引用傳遞 (call by reference) 表示方法接收的是調(diào)用者提供的變量地址。

Java 程序設(shè)計(jì)語(yǔ)言總是采用按值傳遞~~

接下來(lái)扼雏,我們來(lái)細(xì)講一下Java的方法參數(shù)傳遞

先看幾個(gè)例子:

// 第一個(gè)例子:基本類型
static void fooNum(int value) {
    value = 100;
}
 
// 第二個(gè)例子:沒(méi)有提供改變自身方法的引用類型
static void fooStr(String text) {
    text = "world";
}
 
// 第四個(gè)例子:提供了改變自身方法的引用類型坚嗜,但是不使用,而是使用賦值運(yùn)算符
static void fooSb1(StringBuilder builder) {
    builder = new StringBuilder("world");
}
 
// 第三個(gè)例子:提供了改變自身方法的引用類型
static void fooSb2(StringBuilder builder) {
    builder.append(" world");
}
 
public static void main(String[] args) {
    int num = 10;
    fooNum(num);
    System.out.println(num); // num 沒(méi)有被改變
 
    String str = "hello";
    fooStr(str);
    System.out.println(str); // str 也沒(méi)有被改變
 
    StringBuilder sb = new StringBuilder("hello");
    fooSb1(sb);
    System.out.println(sb); // sb 被改變了诗充,變成了"hello world"
     
    fooSb2(sb);
    System.out.println(sb); // sb 沒(méi)有被改變苍蔬,還是 "hello"
}

輸出結(jié)果:


輸出結(jié)果

首先Java的方法參數(shù)有兩種數(shù)據(jù)類型,基本數(shù)據(jù)類型和引用類型蝴蜓。

  1. 當(dāng)方法參數(shù)為基本數(shù)據(jù)類型時(shí)碟绑,方法不能修改一個(gè)基本數(shù)據(jù)類型的參數(shù)俺猿。因?yàn)閖ava中的方法內(nèi)部會(huì)對(duì)基本數(shù)據(jù)類型的參數(shù)進(jìn)行一次拷貝,所以我們對(duì)這個(gè)參數(shù)的處理并不會(huì)影響到外部的值格仲。
  2. 當(dāng)方法參數(shù)為引用類型時(shí)押袍,我們可以去改變其對(duì)象參數(shù)的狀態(tài),但是不能讓對(duì)象參數(shù)引用一個(gè)新的對(duì)象凯肋。因?yàn)閷?duì)象參數(shù)其實(shí)并不是一個(gè)完整的拷貝谊惭,而是傳進(jìn)來(lái)對(duì)象的引用,相當(dāng)于方法內(nèi)盒方法外是兩個(gè)不同的變量引用侮东,指向了同一個(gè)對(duì)象圈盔。因此,我們可以通過(guò)引用去修改對(duì)象內(nèi)部的狀態(tài)悄雅。但是驱敲,如果我們?cè)诜椒▋?nèi)部將傳進(jìn)來(lái)的對(duì)象參數(shù)進(jìn)行引用的切換,那么原來(lái)方法外的變量對(duì)對(duì)象的引用并不會(huì)發(fā)生變化宽闲。

對(duì)象構(gòu)造

由于Java中對(duì)象構(gòu)造非常重要众眨,所以 Java 提供了多種編寫構(gòu)造器的機(jī)制。

默認(rèn)變量初始化

如果在構(gòu)造器中沒(méi)有顯式地給變量賦予初值容诬,那么就會(huì)被自動(dòng)地賦為默認(rèn)值娩梨;數(shù)值為 0、布爾值為 false放案、對(duì)象引用為 null姚建。(只適用于實(shí)例變量,不適用于局部變量)

無(wú)參數(shù)的構(gòu)造器

只有當(dāng)類沒(méi)有提供任何構(gòu)造器時(shí)吱殉,系統(tǒng)才會(huì)提供一個(gè)默認(rèn)的無(wú)參構(gòu)造器。

重載

有很多類有很多個(gè)構(gòu)造函數(shù)厘托,例如String類


String類重載的構(gòu)造方法

多個(gè)方法有相同的名字友雳、不同的參數(shù),這種特征叫做重載 (overloading)铅匹。
(Tips:重載與返回值無(wú)關(guān))

調(diào)用另一個(gè)構(gòu)造函數(shù)

如果構(gòu)造器的第一個(gè)語(yǔ)句形如 this(...)押赊,這個(gè)構(gòu)造函數(shù)將調(diào)用同一個(gè)類的另一個(gè)構(gòu)造函數(shù)。下面是個(gè)典型的例子:

public Employee(double s){
    //調(diào)用Employee(String, double)的構(gòu)造函數(shù)
    this("Employee", s);
}

Java 允許使用包 (package) 將類組織起來(lái)包斑,借助于包可以方便地組織自己的代碼流礁。使用包的主要原因是確保類名的唯一性。

類的導(dǎo)入

  1. 在每個(gè)類名之前添加完整的包名罗丰。
java.time.LocalDate today = java.time.LocalDate.now();
  1. 使用import導(dǎo)包
import java.time.LocalDate; // 導(dǎo)入特定的類
import java.util.*; // 導(dǎo)入整個(gè)包

靜態(tài)導(dǎo)入

import 不僅可以導(dǎo)入類神帅,還增加導(dǎo)入靜態(tài)方法和靜態(tài)變量的功能。
例如:import static java.lang.System.*;
我們就可以使用 System 類的靜態(tài)方法和靜態(tài)域萌抵,而不必加類名前綴:

//還可以導(dǎo)入特定的方法或域
import static java.lang.System.out;
  
out.println("Goodbye,World!")找御;

將類放入包中

要想將一個(gè)類放入包中元镀,必須將包的名字放在源文件的開頭,包中定義類的代碼之前霎桅。

package java.lang;
......
public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
        ......
}

作用域

  1. public:可以被任意的類使用;
  2. private:只能被定義它們的類使用;
  3. 沒(méi)有指定(default):可以被同一個(gè)包中的所有方法訪問(wèn)栖疑;

文檔注釋

JDK 包含一個(gè)很有用的工具,叫做 javadoc滔驶。它可以由源文件生成一個(gè) HTML 文檔遇革。如果在源代碼種 添加以專用的 /** 開始注釋,那么可以很容易地生成一個(gè)看上去具有專業(yè)水準(zhǔn)的文檔揭糕。

類注釋

類注釋必須放在 import 語(yǔ)句之后澳淑,類定義之前。

package java.lang;
/**
 * The {@code String} class represents character strings. All
 * string literals in Java programs, such as {@code "abc"}, are
 * implemented as instances of this class.
 * ............
 */
public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
        ......
}

方法注釋

每一個(gè)方法注釋必須放在所描述的方法之前插佛。除了通用標(biāo)記之外杠巡,還可以使用下面的標(biāo)記:

@param 變量描述
@return 描述
@throws 類描述

/**
 * Returns the {@code char} value at the
 * specified index. An index ranges from {@code 0} to
 * {@code length() - 1}. The first {@code char} value of the sequence
 * is at index {@code 0}, the next at index {@code 1},
 * and so on, as for array indexing.
 * ............
 *
 * @param      index   the index of the {@code char} value.
 * @return     the {@code char} value at the specified index of this string.
 *             The first {@code char} value is at index {@code 0}.
 * @exception  IndexOutOfBoundsException  if the {@code index}
 *             argument is negative or not less than the length of this
 *             string.
 */
public char charAt(int index) {
    if ((index < 0) || (index >= value.length)) {
        throw new StringIndexOutOfBoundsException(index);
    }
    return value[index];
}

變量注釋

只需要對(duì)公有變量 (通常指的是靜態(tài)常量) 建立文檔。

public final class Math {
    /**
     * The {@code double} value that is closer than any other to
     * <i>pi</i>, the ratio of the circumference of a circle to its
     * diameter.
     */
    public static final double PI = 3.14159265358979323846;

通用注釋

下面的標(biāo)記可以用在類文檔的注釋中雇寇。

  • @author 姓名氢拥,將產(chǎn)生一個(gè) "author" 條目,可以使用多個(gè)锨侯。
  • @version 版本嫩海,這個(gè)標(biāo)記將產(chǎn)生一個(gè) "version" 條目
  • @since 這個(gè)標(biāo)記將產(chǎn)生一個(gè) "since" 條目,這里的 text 可以是對(duì)引入特性的版本描述囚痴。
  • @deprecated 這個(gè)標(biāo)記將對(duì)類叁怪、方法或變量添加一個(gè)不再使用的注釋。
  • @see 引用深滚,它可以用于類中奕谭,也可以用于方法中。它有三種情況
    • package.class#feature label
    • <a href="...">label</a>
    • "text"
      @see 的第一種情況最常見痴荐。只要提供類血柳、方法或變量的名字,javadoc 就在文檔中插入一個(gè)超鏈接生兆。例如:
      @see com.horstmann.corejava.Employee#raiseSalary(double)
      @see com.example.GoGoGo#fuck(String)
      @see GoGoGo#fuck(String) 也可以省略包名难捌。
      如果 @see 標(biāo)記后面有一個(gè) < 字符,許久需要指定一個(gè)超鏈接鸦难,可以超鏈接到任何 URL根吁。

類設(shè)計(jì)技巧

  1. 一定要保證數(shù)據(jù)私有,絕對(duì)不要破壞封裝性合蔽;
  2. 一定要對(duì)數(shù)據(jù)進(jìn)行初始化
  3. 不要在類中使用過(guò)多的基本類型击敌,可以組合成一個(gè)類去代替;
  4. 不是所有的變量都需要getter和setter方法辈末;
  5. 將職責(zé)太多的類進(jìn)行分解愚争,方法也一樣映皆;
  6. 類名和方法名要能體現(xiàn)其職責(zé),比如訪問(wèn)器的命名用get+訪問(wèn)的對(duì)象()轰枝;
  7. 優(yōu)先使用不可變的類捅彻,這樣可以更加安全的在多個(gè)線程之間共享對(duì)象。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鞍陨,一起剝皮案震驚了整個(gè)濱河市步淹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌诚撵,老刑警劉巖缭裆,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異寿烟,居然都是意外死亡澈驼,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門筛武,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)缝其,“玉大人,你說(shuō)我怎么就攤上這事徘六∧诒撸” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵待锈,是天一觀的道長(zhǎng)漠其。 經(jīng)常有香客問(wèn)我,道長(zhǎng)竿音,這世上最難降的妖魔是什么和屎? 我笑而不...
    開封第一講書人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮谍失,結(jié)果婚禮上眶俩,老公的妹妹穿的比我還像新娘。我一直安慰自己快鱼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開白布纲岭。 她就那樣靜靜地躺著抹竹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪止潮。 梳的紋絲不亂的頭發(fā)上窃判,一...
    開封第一講書人閱讀 51,578評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音喇闸,去河邊找鬼袄琳。 笑死询件,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的唆樊。 我是一名探鬼主播宛琅,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼逗旁!你這毒婦竟也來(lái)了嘿辟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤片效,失蹤者是張志新(化名)和其女友劉穎红伦,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體淀衣,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡昙读,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了膨桥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛮浑。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖国撵,靈堂內(nèi)的尸體忽然破棺而出陵吸,到底是詐尸還是另有隱情,我是刑警寧澤介牙,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布壮虫,位于F島的核電站,受9級(jí)特大地震影響环础,放射性物質(zhì)發(fā)生泄漏囚似。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一线得、第九天 我趴在偏房一處隱蔽的房頂上張望饶唤。 院中可真熱鬧,春花似錦贯钩、人聲如沸募狂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)祸穷。三九已至,卻和暖如春勺三,著一層夾襖步出監(jiān)牢的瞬間雷滚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工吗坚, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留祈远,地道東北人呆万。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像车份,于是被迫代替她去往敵國(guó)和親谋减。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法躬充,類相關(guān)的語(yǔ)法逃顶,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法充甚,異常的語(yǔ)法以政,線程的語(yǔ)...
    子非魚_t_閱讀 31,632評(píng)論 18 399
  • 一、Java 簡(jiǎn)介 Java是由Sun Microsystems公司于1995年5月推出的Java面向?qū)ο蟪绦蛟O(shè)計(jì)...
    子非魚_t_閱讀 4,188評(píng)論 1 44
  • 生完小孩后伴找,照照鏡子盈蛮,忽然感覺(jué)很懊惱,臉上沒(méi)有了滿滿的膠原蛋白技矮,留下的是蒼白的抖誉,還有一堆肥肉。衰倦。袒炉。有了寶寶,進(jìn)...
    平靜的海洋閱讀 179評(píng)論 0 0
  • 背景BGM PS : 這里本來(lái)打算做一個(gè),隨著上下滑動(dòng)屏幕,然后達(dá)到音量的增減,同時(shí),同步的顯示當(dāng)前的音量大小,但...
    li_禮光閱讀 1,013評(píng)論 0 0
  • “請(qǐng)分我點(diǎn)杏花 伴我倚著天邊紅云栽下 請(qǐng)分我點(diǎn)海棠 助我在樹下的香夢(mèng)沉酣 請(qǐng)分我點(diǎn)迎春條兒 編入我烏黑的頭發(fā) 請(qǐng)分...
    伶人自悲卿自喜閱讀 583評(píng)論 5 8