java基础(十) 深入理解数组类型
戳上面的藍(lán)字關(guān)注我們哦!
?精彩內(nèi)容?
?
精選java等全套視頻教程
精選java電子圖書
大數(shù)據(jù)視頻教程精選
java項(xiàng)目練習(xí)精選
1. 數(shù)組類簡(jiǎn)介
??在java中,數(shù)組也是一種引用類型,即是一種類。
我們來看一個(gè)例子,理解一下數(shù)組類:
public static void main(String[] args) {Class c = int[].class; Class cIn = Integer[].class;Class ccIn = Integer[][].class;System.out.println(c.getName());System.out.println(cIn.getName());System.out.println(ccIn.getName());Class f = float[].class;Class flo = Float[].class;System.out.println(f.getName());System.out.println(flo.getName()); }輸出的結(jié)果:
[I
[Ljava.lang.Integer;
[[Ljava.lang.Integer;
[F
[Ljava.lang.Float;
??上面的輸出結(jié)果就是通過Class的toString()方法輸出的內(nèi)容,可以看出規(guī)律,“[”表示一維數(shù)組,“[[”則表示二維數(shù)組,如此類推下去。同時(shí),如果是引用類型,則還要“[”后面還要跟一個(gè)”L“+類的全限定名。而如果是基本類型,則只要跟對(duì)應(yīng)的大寫字母。
2. 數(shù)組類的分類
從上面的例子的輸出可以看出,數(shù)組類是在JDK中是有分類的:對(duì)于一維的基本類型數(shù)組,輸出”[“,而對(duì)于一維的引用數(shù)組則輸出 ”[L“,多了一個(gè)”L“。
數(shù)組類可以分類可以分成兩類:
基本類型的數(shù)組類;
引用類型的數(shù)組類;
這兩種數(shù)組類的最大區(qū)別在于他們的祖先類不同。
2.1 基本類型的數(shù)組類
?? 對(duì)于基本類型來說,基本類型數(shù)組類的父類一個(gè),就是Object類。
public static void main(String[] args) {int[] a = new int[3];Object o = a;//編譯通過,類型轉(zhuǎn)換成功;//打印一下數(shù)組的超類System.out.println("int[]的superClass是: "+int[].class.getSuperclass()); }運(yùn)行結(jié)果:
int[]的superClass是: class java.lang.Object
2.2 引用類型的數(shù)組類
??對(duì)于引用類型的數(shù)組類,其所有的祖先類除了Object類外,還包括下面所說的類:
如果A是B的祖先類,A[]也是B[]的祖先類,其他維度也如此類推,不同維度間,沒有任何關(guān)系。
看下面的例子:
public class Test_3 { public static void main(String[] args) {Children[] childrens = new Children[3];Ancestor[] ancestors = childrens; //編譯通過,類型上轉(zhuǎn)成功// 判斷childrens 是不是 Ancestor或者是其子類的實(shí)例,進(jìn)一步證明 Children[] 是 ?Ancestor[]的子孫類System.out.println("childrens instanceof Ancestor[] : " + (childrens instanceof Ancestor[])); } ? } class Ancestor{//祖先類 } class Parent extends Ancestor{//父類,繼承于Ancestor } class Children extends Parent{//子類,繼承于Parent }運(yùn)行結(jié)果:
childrens instanceof Ancestor[] : true
??上面的例子中,因?yàn)锳ncestor是Children的祖先類,所以Ancestor[]也是Children[]的祖先類。
如果這時(shí)候我們調(diào)用執(zhí)行下面的代碼:
System.out.println(Children[].class.getSuperclass());輸出的結(jié)果卻是:
class java.lang.Object
咦,為什么引用類型數(shù)組Children[]的父類是Object類,那么與上面所說的
Ancestor[]是Children[]的祖先類
起了沖突。因?yàn)槿绻割愂荗bject,Object類是根類了,那么祖先類就只有一個(gè),就不可能再有其他的祖先類
這是為什么呢?
我們看一下getSuperclass()的API描述:
public Class getSuperclass()
返回表示此 Class 所表示的實(shí)體(類、接口、基本類型或 void)的超類的 Class。如果此 Class 表示 Object 類、一個(gè)接口、一個(gè)基本類型或 void,則返回 null。如果此對(duì)象表示一個(gè)數(shù)組類,則返回表示該 Object 類的 Class 對(duì)象。
-返回:
? ?此對(duì)象所表示的類的超類。
原來,getSuperclass對(duì)于調(diào)用者是數(shù)組類的對(duì)象的話,那么直接返回Object類的class對(duì)象。
每日一題
?? 在Servlet處理請(qǐng)求的方式為:???C
A.以進(jìn)程的方式
B.以程序的方式
C.以線程的方式
D.以響應(yīng)的方式
?多線程有幾種實(shí)現(xiàn)方法,都是什么?同步有幾種實(shí)現(xiàn)方法,都是什么?
多線程有兩種實(shí)現(xiàn)方法,分別是繼承Thread類與實(shí)現(xiàn)Runnable接口
同步的實(shí)現(xiàn)方面有兩種,分別是synchronized,wait與notify
? 寫一個(gè)Singleton(單例模式)出來。
public class LazySingleton {
private static LazySingleton instance = null;
?
// 默認(rèn)的私有的構(gòu)造方法,保證外界無法直接實(shí)例化
private LazySingleton() {
}
?
// 靜態(tài)方法,返回此類的唯一實(shí)例
public ?static LazySingleton getInstance() {
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
public void pp(){
System.out.println("lazy ok");
}
}
??如果小伙伴們有更好的回答,歡迎在留言區(qū)留言哦,我們一起努力營(yíng)造更好的學(xué)習(xí)氛圍。
作者:jinggod
出處:http://www.cnblogs.com/jinggod/p/8428062.html
回復(fù)以下關(guān)鍵字獲取更多學(xué)習(xí)資源
java基礎(chǔ)|html5|css|js|jquery|angularJs|ajax|node.js|javaEE基礎(chǔ)| |struts2|hibernate|spring|svn|maven|springmvc|mybatis|linux|oracle| |luncene|solr|redis|springboot|架構(gòu)師資源|dubbo|php|webservice|c++基礎(chǔ)|nginx|mysql|sqlserver|asp.net
更多學(xué)習(xí)資源逐步更新,請(qǐng)置頂公眾號(hào)不要錯(cuò)過更新
好好學(xué)java
每日推送java優(yōu)質(zhì)文章、視頻教程、熱點(diǎn)資訊
微信ID:SIHAI0911
長(zhǎng)按左側(cè)二維碼關(guān)注
總結(jié)
以上是生活随笔為你收集整理的java基础(十) 深入理解数组类型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java基础(七) 深入解析java四种
- 下一篇: 记阿里的一次壮烈牺牲