# 大數(shù)據(jù)工程(三)##Java核心類庫

多線程

程序枉昏,進(jìn)程干花,線程:

程序(program)是為完成特定任務(wù)妄帘、用某種語言編寫的一組指令的集合。即指一段靜態(tài)的代碼池凄,靜態(tài)對象抡驼。

進(jìn)程(process)是程序的一次執(zhí)行過程,或是正在運(yùn)行的一個(gè)程序肿仑。是一個(gè)動態(tài)的過程:有它自身的產(chǎn)生致盟、存在和消亡的過程∮任浚——生命周期

如:運(yùn)行中的QQ馏锡,運(yùn)行中的MP3播放器

程序是靜態(tài)的,進(jìn)程是動態(tài)的 進(jìn)程作為資源分配的單位伟端,系統(tǒng)在運(yùn)行時(shí)會為每個(gè)進(jìn)程分配不同的內(nèi)存區(qū)域杯道。

線程(thread),進(jìn)程可進(jìn)一步細(xì)化為線程责蝠,是一個(gè)程序內(nèi)部的一條執(zhí)行路徑党巾。

若一個(gè)進(jìn)程同一時(shí)間并行執(zhí)行多個(gè)線程萎庭,就是支持多線程的。

線程作為調(diào)度和執(zhí)行的單位齿拂,每個(gè)線程擁有獨(dú)立的運(yùn)行棧和程序計(jì)數(shù)器(pc)驳规,線程切換的開銷小 。

一個(gè)進(jìn)程中的多個(gè)線程共享相同的內(nèi)存單元/內(nèi)存地址空間-》它們從同一堆中分配對象署海,可以訪問相同的變量和對象吗购。這就使得線程間通信更簡便、高效砸狞。但多個(gè)線程操作共享的系統(tǒng)資源可能就會帶來安全的隱患巩搏。

使用多線程的優(yōu)點(diǎn)?

背景:以單核CPU為例趾代,只使用單個(gè)線程先后完成多個(gè)任務(wù)(調(diào)用多個(gè)方 法)贯底,肯定比用多個(gè)線程來完成用的時(shí)間更短,為何仍需多線程呢?

何時(shí)需要多線程撒强?

程序需要同時(shí)執(zhí)行兩個(gè)或多個(gè)任務(wù)禽捆。

程序需要實(shí)現(xiàn)一些需要等待的任務(wù)時(shí),如用戶輸入飘哨、文件讀寫操作胚想、網(wǎng)絡(luò)操作、搜索等芽隆。需要一些后臺運(yùn)行的程序時(shí)浊服。

多線程程序的優(yōu)點(diǎn):

1. 提高應(yīng)用程序的響應(yīng)。對圖形化界面更有意義胚吁,可增強(qiáng)用戶體驗(yàn)牙躺。 2. 提高計(jì)算機(jī)系統(tǒng)CPU的利用率

3. 改善程序結(jié)構(gòu)。將既長又復(fù)雜的進(jìn)程分為多個(gè)線程腕扶,獨(dú)立運(yùn)行孽拷,利于理解和修改。

?創(chuàng)建線程的2個(gè)方式

方式1 :繼承 Thread類

示例:

public class TestThread{


??? public static class MyThread extends Thread{

??????? @Override

??????? public void run(){

???????????System.out.printf("%s線程運(yùn)行中\(zhòng)n",Thread.currentThread().getName());

??????? }

??? }


??? public static void main(String[]args) {

??????? MyThreadmyThread = new MyThread();

??????? System.out.printf("在線程 %s 中啟動 myThread\n",Thread.currentThread().getName());

??????? myThread.start();// 注意半抱,不要調(diào)用 run 方法

??? }


}

運(yùn)行結(jié)果:

在線程 main 中啟動myThread

Thread-0 線程運(yùn)行中

可以看到脓恕, Java 入口函數(shù) main 函數(shù)所在線程名為?main,我們一般稱之為主線程窿侈。而我們自定義的線程炼幔,線程名是Thread-序號。上面的工具類Utils中的log方法用到了?Thread.currentThread().getName()?獲取線程名稱史简。

兩個(gè)注意:

[if !supportLists]1.??? [endif]啟動線程乃秀,要用 start 方法,而不是 run 方法。因?yàn)?run 方法是暴露給開發(fā)者寫業(yè)務(wù)邏輯的环形,不會開啟新線程。

[if !supportLists]2.??? [endif]一個(gè)線程對象只能啟動一次衙傀,再次啟動時(shí)會報(bào)錯(cuò)抬吟。

// 一個(gè)線程對象只能啟動一次,再次啟動時(shí)會報(bào)錯(cuò)统抬。

public class TestThread{


??? public static class MyThread extends Thread{

??????? @Override

??????? public void run(){

??????????? Utils.log("線程運(yùn)行中");

??????? }

??? }


??? public static void main(String[]args) {

??????? MyThreadmyThread = new MyThread();

??????? Utils.log("啟動線程");

??????? myThread.start();

??????? Utils.sleep(200);

??????? myThread.start();

??? }


}


執(zhí)行結(jié)果:

[main??????????? ][17:45:38.480]啟動線程

[Thread-0??????? ][17:45:38.492]線程運(yùn)行中

Exception inthread "main" java.lang.IllegalThreadStateException

??? at java.lang.Thread.start(Thread.java:708)

??? at TestThread.main(TestThread.java:15)


方式2:實(shí)現(xiàn) Runnable 接口

示例:

public class TestThread{


??? public static void main(String[]args) {

??????? ThreadmyThread = new Thread(new Runnable(){

??????????? @Override

??????????? public void run(){

???????? ???????Utils.log("線程運(yùn)行中");

??????????? }

??????? });

??????? Utils.log("啟動線程");

??????? myThread.start();

??? }


}


或者簡化為 lambda 形式:

public class TestThread{


??? public static void main(String[]args) {

??????? ThreadmyThread = new Thread(()-> Utils.log("線程運(yùn)行中"));

??????? Utils.log("啟動線程");

??????? myThread.start();

??? }


}

運(yùn)行結(jié)果示例:

[main??????????? ][17:55:42.383]啟動線程

[Thread-0??????? ][17:55:42.395]線程運(yùn)行中


自定義線程名稱

使用?setName方法可以自定義線程名稱火本。

示例:

public class TestThread{


??? public static void main(String[]args) {

??????? Threadt1 = new Thread(()->{

??????????? Utils.log("t1線程運(yùn)行中");

??????? });

??????? Threadt2 = new Thread(()->{

??????????? Utils.log("t2線程運(yùn)行中");

??????? });


??????? Utils.log("主線程: 自定義線程名");


??????? t1.setName("自定義線程名");

??????? Thread.currentThread().setName("自定義主線程名");


??????? Utils.log("主線程: 啟動線程t1, t2");

??????? t1.start();

??????? t2.start();

??? }


}


運(yùn)行結(jié)果:

[main??????????? ][18:29:45.381]主線程: 自定義線程名

[自定義主線程名???????? ][18:29:45.396]主線程: 啟動線程t1, t2

[自定義線程名????????? ][18:29:45.396] t1線程運(yùn)行中

[Thread-1??????? ][18:29:45.396] t2線程運(yùn)行中


常用類

字符串相關(guān)的類:String

在 java 中,枚舉類型是一種特殊數(shù)據(jù)類型聪建,能夠?yàn)橐粋€(gè)變量定義一組預(yù)定義的常量钙畔。變量必須等于為其預(yù)定義的值之一。

String的特性

lString類:代表字符串金麸。Java 程序中的所有字符串字面值(如"abc" )都作 為此類的實(shí)例實(shí)現(xiàn)擎析。

lString是一個(gè)final類,代表不可變的字符序列挥下。l字符串是常量揍魂,用雙引號引起來表示。它們的值在創(chuàng)建之后不能更改棚瘟。 lString對象的字符內(nèi)容是存儲在一個(gè)字符數(shù)組value[]中的现斋。

public final class String

implements java.io.Serializable,Comparable, CharSequence {/** Thevalue is used for character storage. */

private final char value[];

/** Cache the hash code for the string */

private int hash;// Default to 0

String對象的創(chuàng)建

String str ="hello";

//本質(zhì)上this.value

= new char[0]; String s1 = new String();

//this.value = original.value;

String s2 = newString(String original);//this.value

= Arrays.copyOf(value, value.length);

String s3 = newString(char[] a);

String s4 = newString(char[] a,int startIndex,int count);


JDK8中新日期時(shí)間API

java.time – 包含值對象的基礎(chǔ)包java.time.chrono – 提供對不同的日歷系統(tǒng)的訪問

java.time.format – 格式化和解析時(shí)間和日期 java.time.temporal – 包括底層框架和擴(kuò)展特性

java.time.zone – 包含時(shí)區(qū)支持的類

LocalDate、LocalTime偎蘸、LocalDateTime 類是其中較重要的幾個(gè)類庄蹋,它們的實(shí)例是不可變的對象,分別表示使用ISO-8601日歷系統(tǒng)的日期迷雪、時(shí)間限书、日期和時(shí)間。 它們提供了簡單的本地日期或時(shí)間章咧,并不包含當(dāng)前的時(shí)間信息蔗包,也不包含與時(shí)區(qū)

相關(guān)的信息。

?LocalDate代表IOS格式(yyyy-MM-dd)的日期,可以存儲 生日慧邮、紀(jì)念日等日期调限。?LocalTime表示一個(gè)時(shí)間,而不是日期误澳。?LocalDateTime是用來表示日期和時(shí)間的耻矮,這是一個(gè)最常用的類之一。

注:ISO-8601日歷系統(tǒng)是國際標(biāo)準(zhǔn)化組織制定的現(xiàn)代公民的日期和時(shí)間的表示 法忆谓,也就是公歷裆装。


枚舉類

枚舉類的使用

l枚舉類的實(shí)現(xiàn)

?JDK1.5之前需要自定義枚舉類?JDK 1.5 新增的enum 關(guān)鍵字用于定義枚舉類

l若枚舉只有一個(gè)對象, 則可以作為一種單例模式的實(shí)現(xiàn)方 式。

l 枚舉類的屬性

?枚舉類對象的屬性不應(yīng)允許被改動, 所以應(yīng)該使用private final 修飾

?枚舉類的使用 private final 修飾的屬性應(yīng)該在構(gòu)造器中為其賦值

?若枚舉類顯式的定義了帶參數(shù)的構(gòu)造器, 則在列出枚舉值時(shí)也必須對應(yīng)的 傳入?yún)?shù)。


自定義枚舉類

1. 私有化類的構(gòu)造器哨免,保證不能在類的外部創(chuàng)建其對象2. 在類的內(nèi)部創(chuàng)建枚舉類的實(shí)例茎活。聲明為:publicstatic final

3. 對象如果有實(shí)例變量,應(yīng)該聲明為privatefinal琢唾,并在構(gòu)造器中初始化

[if !vml]

[endif]




Java集合

Java 集合可分為 Collection 和 Map 兩種體系

?Collection接口:單列數(shù)據(jù)载荔,定義了存取一組對象的方法的集合üList:元素有序、可重復(fù)的集合 üSet:元素?zé)o序采桃、不可重復(fù)的集合

? Map接口:雙列數(shù)據(jù)懒熙,保存具有映射關(guān)系“key-value對”的集合

Collection接口

lCollection 接口是 List、Set 和 Queue 接口的父接口普办,該接口里定義的方法 既可用于操作 Set 集合工扎,也可用于操作 List 和 Queue 集合。

lJDK不提供此接口的任何直接實(shí)現(xiàn)衔蹲,而是提供更具體的子接口(如:Set和List) 實(shí)現(xiàn)肢娘。

l在 Java5 之前,Java 集合會丟失容器中所有對象的數(shù)據(jù)類型舆驶,把所有對象都 當(dāng)成 Object 類型處理;從JDK 5.0 增加了泛型以后蔬浙,Java 集合可以記住容 器中對象的數(shù)據(jù)類型。

Collection接口方法:

贞远、添加? add(Objectobj)

? addAll(Collection

coll)

2畴博、獲取有效元素的個(gè)數(shù) ? int

size()

3、清空集合? void

clear()

4蓝仲、是否是空集合? boolean

isEmpty()

5俱病、是否包含某個(gè)元素? boolean

contains(Object obj):是通過元素的equals方法來判斷是否是同一個(gè)對象?boolean containsAll(Collection c):也是調(diào)用元素的equals方法來比較的。拿兩個(gè)集合的元素挨個(gè)比較袱结。

6.刪除

? ?boolean remove(Object obj) :通過元素的equals方法判斷是否是

[if !supportLists]·??????[endif]???要刪除的那個(gè)元素亮隙。只會刪除找到的第一個(gè)元素

? ?boolean removeAll(Collection coll):取當(dāng)前集合的差集

7、取兩個(gè)集合的交集? boolean

retainAll(Collection c):把交集的結(jié)果存在當(dāng)前集合中垢夹,不影響溢吻。

8、集合是否相等

? booleanequals(Object obj)

9果元、轉(zhuǎn)成對象數(shù)組

? Object[]toArray()

10促王、獲取集合對象的哈希值

? hashCode()

11、遍歷

? iterator():返回迭代器對象而晒,用于集合遍歷


泛型

Java 泛型(generics)是 JDK 5 中引入的一個(gè)新特性, 泛型提供了編譯時(shí)類型安全檢測機(jī)制蝇狼,該機(jī)制允許程序員在編譯時(shí)檢測到非法的類型。

泛型的本質(zhì)是參數(shù)化類型倡怎,也就是說所操作的數(shù)據(jù)類型被指定為一個(gè)參數(shù)迅耘。

泛型方法

你可以寫一個(gè)泛型方法贱枣,該方法在調(diào)用時(shí)可以接收不同類型的參數(shù)。根據(jù)傳遞給泛型方法的參數(shù)類型颤专,編譯器適當(dāng)?shù)靥幚砻恳粋€(gè)方法調(diào)用纽哥。

下面是定義泛型方法的規(guī)則:

[if !supportLists]·?????? [endif]所有泛型方法聲明都有一個(gè)類型參數(shù)聲明部分(由尖括號分隔),該類型參數(shù)聲明部分在方法返回類型之前(在下面例子中的<E>)栖秕。

[if !supportLists]·?????? [endif]每一個(gè)類型參數(shù)聲明部分包含一個(gè)或多個(gè)類型參數(shù)春塌,參數(shù)間用逗號隔開。一個(gè)泛型參數(shù)累魔,也被稱為一個(gè)類型變量,是用于指定一個(gè)泛型類型名稱的標(biāo)識符够滑。

[if !supportLists]·?????? [endif]類型參數(shù)能被用來聲明返回值類型垦写,并且能作為泛型方法得到的實(shí)際參數(shù)類型的占位符。

[if !supportLists]·?????? [endif]泛型方法體的聲明和其他方法一樣彰触。注意類型參數(shù)只能代表引用型類型梯投,不能是原始類型(像int,double,char的等)。

實(shí)例

下面的例子演示了如何使用泛型方法打印不同字符串的元素:


public classGenericMethodTest

{

?? // 泛型方法printArray????????????????????????

???public static < E > void printArray( E[] inputArray )

?? {

????? // 輸出數(shù)組元素???????????

?????????for( E element : inputArray ){???????

????????????System.out.printf( "%s ", element );

???????? }

???????? System.out.println();

??? }

????public static void main( String args[] )

??? {

??????? // 創(chuàng)建不同類型數(shù)組: Integer, Double 和 Character

??????? Integer[] intArray = {1, 2, 3, 4, 5};

??????? Double[] doubleArray = {1.1, 2.2, 3.3, 4.4};

??????? Character[] charArray = {'H', 'E', 'L', 'L', 'O'};

????????System.out.println( "整型數(shù)組元素為:");

?????? ?printArray( intArray? );// 傳遞一個(gè)整型數(shù)組

????????System.out.println( "\n雙精度型數(shù)組元素為:");

??????? printArray( doubleArray );// 傳遞一個(gè)雙精度型數(shù)組

????????System.out.println( "\n字符型數(shù)組元素為:");

??????? printArray( charArray );// 傳遞一個(gè)字符型數(shù)組

??? }

}

[if !supportLineBreakNewLine]

[endif]

編譯以上代碼况毅,運(yùn)行結(jié)果如下所示:

整型數(shù)組元素為:

1 2 3 4 5


雙精度型數(shù)組元素為:

1.1 2.2 3.3 4.4


字符型數(shù)組元素為:

H E L L O

有界的類型參數(shù):

可能有時(shí)候分蓖,你會想限制那些被允許傳遞到一個(gè)類型參數(shù)的類型種類范圍。例如尔许,一個(gè)操作數(shù)字的方法可能只希望接受Number或者Number子類的實(shí)例么鹤。這就是有界類型參數(shù)的目的。

要聲明一個(gè)有界的類型參數(shù)味廊,首先列出類型參數(shù)的名稱蒸甜,后跟extends關(guān)鍵字,最后緊跟它的上界余佛。

實(shí)例

下面的例子演示了"extends"如何使用在一般意義上的意思"extends"(類)或者"implements"(接口)柠新。該例子中的泛型方法返回三個(gè)可比較對象的最大值。


public classMaximumTest

{

?? // 比較三個(gè)值并返回最大值

?? public static <T extends Comparable<T>> T maximum(T x, T y, T z)

?? {????????????????????

??????T max = x;// 假設(shè)x是初始最大值

?????if ( y.compareTo( max ) > 0){

???????? max = y;//y 更大

????? }

????? if ( z.compareTo( max ) > 0){

???????? max = z;// 現(xiàn)在 z 更大??????????

??????}

????? return max; // 返回最大對象

?? }

?? public static void main( String args[] )

?? {

????? System.out.printf( "%d, %d 和 %d 中最大的數(shù)為 %d\n\n",

?????????????????? 3, 4, 5, maximum( 3, 4, 5) );

??????System.out.printf( "%.1f, %.1f 和 %.1f 中最大的數(shù)為 %.1f\n\n",

?????????????????? 6.6, 8.8, 7.7, maximum( 6.6, 8.8, 7.7) );

??????System.out.printf( "%s, %s 和 %s 中最大的數(shù)為 %s\n","pear",

???????? "apple", "orange", maximum( "pear", "apple", "orange") );

?? }

}

[if !supportLineBreakNewLine]

[endif]

編譯以上代碼辉巡,運(yùn)行結(jié)果如下所示:

3, 4 和 5 中最大的數(shù)為5


6.6, 8.8 和 7.7 中最大的數(shù)為8.8


pear, apple 和 orange 中最大的數(shù)為pear

泛型類

泛型類的聲明和非泛型類的聲明類似恨憎,除了在類名后面添加了類型參數(shù)聲明部分。

和泛型方法一樣郊楣,泛型類的類型參數(shù)聲明部分也包含一個(gè)或多個(gè)類型參數(shù)憔恳,參數(shù)間用逗號隔開。一個(gè)泛型參數(shù)净蚤,也被稱為一個(gè)類型變量喇嘱,是用于指定一個(gè)泛型類型名稱的標(biāo)識符。因?yàn)樗麄兘邮芤粋€(gè)或多個(gè)參數(shù)塞栅,這些類被稱為參數(shù)化的類或參數(shù)化的類型者铜。

實(shí)例

如下實(shí)例演示了我們?nèi)绾味x一個(gè)泛型類:


public classBox {


??privateT t;

??public void add(T t) {

??? this.t = t;

? }

??public T get() {

??? returnt;

? }

??public static void main(String[] args) {

??? Box integerBox =newBox();

??? Box stringBox =newBox();

????integerBox.add(new Integer(10));

??? stringBox.add(new String("菜鳥教程"));

????System.out.printf("整型值為 :%d\n\n", integerBox.get());

??? System.out.printf("字符串為 :%s\n", stringBox.get());

? }

}

[if !supportLineBreakNewLine]

[endif]

編譯以上代碼腔丧,運(yùn)行結(jié)果如下所示:

整型值為:10


字符串為 :菜鳥教程

類型通配符

1、類型通配符一般是使用?代替具體的類型參數(shù)作烟。例如List<?>在邏輯上是List<String>,List<Integer>?等所有List<具體類型實(shí)參>的父類愉粤。


import java.util.*;

public classGenericTest {


????public static void main(String[] args) {

??????? List name =newArrayList();

??????? List age =newArrayList();

??????? List number =newArrayList();


????????name.add("icon");

??????? age.add(18);

??????? number.add(314);

????????getData(name);

??????? getData(age);

??????? getData(number);


???}

???public static void getData(List data) {

????? System.out.println("data :" + data.get(0));

?? }

}

[if !supportLineBreakNewLine]

[endif]

輸出結(jié)果為:

data :icon

data :18

data :314

解析:?因?yàn)間etData()方法的參數(shù)是List>類型的,所以name拿撩,age衣厘,number都可以作為這個(gè)方法的實(shí)參,這就是通配符的作用

2压恒、類型通配符上限通過形如List

extends Number>來定義影暴,如此定義就是通配符泛型值接受Number及其下層子類類型。


import java.util.*;

public classGenericTest {


????public static void main(String[] args) {

??????? List name =newArrayList();

??????? List age =newArrayList();

??????? List number =newArrayList();


????????name.add("icon");

??????? age.add(18);

??????? number.add(314);

????????//getUperNumber(name);//1

??????? getUperNumber(age);//2

??????? getUperNumber(number);//3


???}

???public static void getData(List data) {

????? System.out.println("data :" + data.get(0));

?? }


???public static void getUperNumber(List data) {

????????? System.out.println("data :" + data.get(0));

?????? }

}

[if !supportLineBreakNewLine]

[endif]

輸出結(jié)果:

data :18

data :314

解析:?在(//1)處會出現(xiàn)錯(cuò)誤探赫,因?yàn)間etUperNumber()方法中的參數(shù)已經(jīng)限定了參數(shù)泛型上限為Number型宙,所以泛型為String是不在這個(gè)范圍之內(nèi),所以會報(bào)錯(cuò)

3伦吠、類型通配符下限通過形如List<?

super Number>來定義妆兑,表示類型只能接受Number及其三層父類類型,如Objec類型的實(shí)例毛仪。


Io流


網(wǎng)絡(luò)編程是指編寫運(yùn)行在多個(gè)設(shè)備(計(jì)算機(jī))的程序搁嗓,這些設(shè)備都通過網(wǎng)絡(luò)連接起來。

Java

IO原理

lI/O是Input/Output的縮寫箱靴, I/O技術(shù)是非常實(shí)用的技術(shù)腺逛,用于處理設(shè)備之間的數(shù)據(jù)傳輸。如讀/寫文件衡怀,網(wǎng)絡(luò)通訊等屉来。

lJava程序中,對于數(shù)據(jù)的輸入/輸出操作以“流(stream)”的 方式進(jìn)行狈癞。

ljava.io包下提供了各種“流”類和接口茄靠,用以獲取不同種類的 數(shù)據(jù),并通過標(biāo)準(zhǔn)的方法輸入或輸出數(shù)據(jù)蝶桶。


反射機(jī)制

JavaReflection

lReflection(反射)是被視為動態(tài)語言的關(guān)鍵慨绳,反射機(jī)制允許程序在執(zhí)行期 借助于Reflection API取得任何類的內(nèi)部信息,并能直接操作任意對象的內(nèi) 部屬性及方法真竖。

l加載完類之后脐雪,在堆內(nèi)存的方法區(qū)中就產(chǎn)生了一個(gè)Class類型的對象(一個(gè) 類只有一個(gè)Class對象),這個(gè)對象就包含了完整的類的結(jié)構(gòu)信息恢共。我們可以通過這個(gè)對象看到類的結(jié)構(gòu)战秋。這個(gè)對象就像一面鏡子,透過這個(gè)鏡子看 到類的結(jié)構(gòu)讨韭,所以脂信,我們形象的稱之為:反射癣蟋。

補(bǔ)充:動態(tài)語言vs靜態(tài)語言

1、動態(tài)語言 是一類在運(yùn)行時(shí)可以改變其結(jié)構(gòu)的語言:例如新的函數(shù)狰闪、對象疯搅、甚至代碼可以

被引進(jìn),已有的函數(shù)可以被刪除或是其他結(jié)構(gòu)上的變化埋泵。通俗點(diǎn)說就是在運(yùn) 行時(shí)代碼可以根據(jù)某些條件改變自身結(jié)構(gòu)幔欧。 主要動態(tài)語言:Object-C、C#丽声、JavaScript礁蔗、PHP、Python雁社、Erlang浴井。

2、靜態(tài)語言 與動態(tài)語言相對應(yīng)的歧胁,運(yùn)行時(shí)結(jié)構(gòu)不可變的語言就是靜態(tài)語言滋饲。如Java厉碟、C喊巍、 C++。

Java不是動態(tài)語言箍鼓,但Java可以稱之為“準(zhǔn)動態(tài)語言”崭参。即Java有一定的動 態(tài)性,我們可以利用反射機(jī)制款咖、字節(jié)碼操作獲得類似動態(tài)語言的特性何暮。 Java的動態(tài)性讓編程的時(shí)候更加靈活!

反射相關(guān)的主要API

l java.lang.Class:代表一個(gè)類ljava.lang.reflect.Method:代表類的方法ljava.lang.reflect.Field:代表類的成員變量ljava.lang.reflect.Constructor:代表類的構(gòu)造器 l......

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市铐殃,隨后出現(xiàn)的幾起案子海洼,更是在濱河造成了極大的恐慌,老刑警劉巖富腊,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坏逢,死亡現(xiàn)場離奇詭異,居然都是意外死亡赘被,警方通過查閱死者的電腦和手機(jī)是整,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來民假,“玉大人浮入,你說我怎么就攤上這事⊙蛞欤” “怎么了事秀?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵彤断,是天一觀的道長。 經(jīng)常有香客問我秽晚,道長瓦糟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任赴蝇,我火速辦了婚禮菩浙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘句伶。我一直安慰自己劲蜻,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布考余。 她就那樣靜靜地躺著先嬉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪楚堤。 梳的紋絲不亂的頭發(fā)上疫蔓,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天,我揣著相機(jī)與錄音身冬,去河邊找鬼衅胀。 笑死,一個(gè)胖子當(dāng)著我的面吹牛酥筝,可吹牛的內(nèi)容都是我干的滚躯。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼嘿歌,長吁一口氣:“原來是場噩夢啊……” “哼掸掏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起宙帝,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤丧凤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后步脓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體愿待,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年沪编,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了呼盆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,110評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蚁廓,死狀恐怖访圃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情相嵌,我是刑警寧澤腿时,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布况脆,位于F島的核電站,受9級特大地震影響批糟,放射性物質(zhì)發(fā)生泄漏格了。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一徽鼎、第九天 我趴在偏房一處隱蔽的房頂上張望盛末。 院中可真熱鬧,春花似錦否淤、人聲如沸悄但。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽檐嚣。三九已至,卻和暖如春啰扛,著一層夾襖步出監(jiān)牢的瞬間嚎京,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工隐解, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鞍帝,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓厢漩,卻偏偏與公主長得像膜眠,于是被迫代替她去往敵國和親岩臣。 傳聞我的和親對象是個(gè)殘疾皇子溜嗜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評論 2 355

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