国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

?Java枚舉實例---交通燈,一文帶你深入理解枚舉,了解融會貫通JAVA SE所該具備的能力【Ja

ChanceWong / 2842人閱讀

Java學習打卡:第十八天

Java養成計劃(打卡第18天)

JAVA SE(夯實基礎系列----Java初步)


內容管理

今天分享一下chapter four的容易忽略的類和對象容易忽略的知識。以問答的方式來復習鞏固

基礎問題(一定不要忘記)

  • static靜態代碼塊的特點,作用?

一個類中可以定義多個靜態代碼塊,靜態初始化塊在類裝入并初始化時執行一次,作用是初始化類變量(也是屬于類的)

  • 構造方法如何調用另外一個構造方法?
Public Mytime();Public Mytime(int h);Public Mytime(int h, int m, int s);
  • 那如果現在構造第三個構造方法想調用第二個構造方法如何做?

this就是指代對象的,所以同一類中一個構造方法調用另外一個構造方法必須使用關鍵字this,但是只能調用一次,并且只能是第一行代碼, 并且一個構造方法不能直接或間接調用自己

 Public Mytime(int h, int m, int s){   this(h);   ………}
  • 類方法有什么需要注意點?

類方法代碼塊是靜態的,和靜態代碼塊一樣不能使用this關鍵字,因為this就是指代實例對象的,實例方法必須實例調用

  • 標號有什么需要注意點?

標號只需要注意一個細節,那就是它是用于標記循環,如果標記在循環內部的普通語句,且下面執行break 標記 ,那么會編譯錯誤

  • 什么是has-a的關系

has-a是一種包含關系,是在另外一個類中將該類對象作為屬性,在之前博客UML中提到

Java對象清除機制(垃圾處理機制)

對C語言有點了解就知道指針的存在,C語言里面的指針傳遞和JAVA里面的引用傳遞類似,JAVA里面的變量是在棧里面,我們創建new出來的對象在堆里面,變量存儲的是堆中對象內存的首地址,這些知識在JVM里會深入講到,,講到指針就會提到動態內存,我們為指針分配內存之后在使用完指針之后若不進行free釋放操作就會出現一些問題,但是在多線程,共享對象的情況下,Programmer不知道什么時機釋放指針內存,但是在JAVA里面就不需要顯釋放內存了
在JAVA里面,對象清除由運行系統自動完成,稱為垃圾收集,運行系統自動識別出哪些對象不再使用,之后由一個叫做垃圾處理器的線程來完成, (如果不了解線程就看看之前的博客)

什么樣的對象是垃圾呢?

JAVA系統認為,一個程序的所有活的線程都不存在有變量去引用一個對象時,該對象就是垃圾,那失去價值了就不要讓它占用堆內存了

那一個對象成為垃圾有哪幾種情況?
  • 一個對象引用的某個對象變成引用另外一個對象
Point2D pointone = new Point2D(2,3);……pointone = new Ponint2D(3,4);
  • 一個引用某個對象的變量被設置為null,,這和上面其實是一樣的
Point2D pointone = new Point2D(2,3);……pointone = null;
  • 一個引用某對象的變量生存期結束,就釋放了

方法體里的局部變量的生存期要短一些,當生存期過了,其引用對象就可能成為垃圾對象

一個良好習慣

那JAVA的垃圾處理線程這么?,那Programmer豈不是隨意而為了?這不可能,JAVA中還會有這種情況出現:雖然有一個或多個變量引用某個對象,但實際上這個對象不需要,但是JAVA系統不會處理這個對象,那我們就要使用第二種方式將其設置為null,------所以Programmer要養成一個發現對象型變量不使用時,就將其設置為null的好習慣
這里我來舉一個栗子

Public Class Point{    ……}Public Class Test{  private Point pointone = new Point();  private static final Point pointtwo = new Point();  //這是一個(靜態的)類變量Public static void main(Stting[] args){  Test t1 = new Test();  Test t2 = new Test();  pointone = null;  fun(t1);  //gc  ……}……public static void fun(Test u)  Point pointthree = new Point();  u = null;}
  • 現在的問題是這里哪些變量引用過的對象可能被gc處收集?

這里我們分析一下就以知道我們一共創建了3個Point對象,其中pointone被置空了,因此滿足回收條件,還有就是fun方法里的局部變量pointthree的生存期過了,所以這里也會回收,但是系統還不會回收Test類對象t1,因為系統不能判斷是否放棄

在Java中垃圾回收線程的執行不是固定的,它可能就算滿足條件也不回收,而等到占內存過大才回收,有的收集器比較積極,過一段時間就會回收一次,但是有的比較消極,很久才執行一次。我們可以使用System類的gc()方法來啟動回收線程,但是這里和多線程中所講的一樣,僅僅是讓該線程處于可執行狀態,但是否執行由系統決定,可能一直都不執行。

枚舉類型

(這里之前分享基礎的時候漏掉了,現在將其補上)枚舉類型是一種特殊的類型,用于表示一組不變的常量,關鍵字是enum,和C是相似的

enum TrafficLight{//枚舉類型和普通的類是不一樣的,普通類使用class,但是枚舉類型使用enum    RED,GREEN,YELLOW //枚舉常量,末尾不需要加分號,枚舉常量代表枚舉類型的實例,這些類型在初創時就裝入}//除了枚舉常量,枚舉類型不會有其他實例

枚舉常量定義時需要大寫,枚舉變量除了枚舉常量值之外還可能是null,我們調用枚舉常量,因為是靜態的,使用類名.常量名

枚舉類型編譯后也是產生一個.class文件,我們調用枚舉類型時: < 枚舉類型名> < 變量名>;和普通的對象引用沒有太大的區別,但是不同的就是這里不能使用new來創建對象,因為除了枚舉常量沒有其他實例

比較兩個枚舉常量是否相等,常使用的是 “==” ,雖然也可以使用equals();

嵌套

枚舉量的比較除了直接使用if來比較之外也可以使用switch語句switch括號后的值應該是該枚舉類型變量的簡單名字,不需要再用類型名,在前面聲明

所謂嵌套枚舉類型就是在類體中定義枚舉類型,就是將其作為一個普通的塊,放在類里面,但需要注意一點:

  • 嵌入的枚舉類型都是靜態的,關鍵字static是默認的,就是我們直接可以通過類型名調用量
  • 訪問權限上,與非枚舉類型相比,嵌入的可以是默認或者public,也可以是private或protected,定義成private就只是類內可見
  • 所有的枚舉類型都不能使用abstract與final修飾,所有的枚舉類型都是最終的具體類型不能被擴展

這里我們可以舉一個簡單的例子來說明枚舉類型

枚舉類型實例----交通信號燈

package ThirdChapter;public class EnumTraffic {	private enum TrafficLight{		RED,GREEN,YELLOW	}		public static void dirveRule(TrafficLight lightcolor) {		switch(lightcolor) {		case RED:			System.out.println("Stop now,it"s red");			break;		case GREEN:			System.out.println("GO,it"s green");			break;//不加break就可能多執行下面的default		default:			System.out.println("Ready to go,it"s yellow");			break;		}	}		public static void main(String[] args) {		TrafficLight lightcolor = TrafficLight.GREEN;//這里就是之前的靜態變量的引用		dirveRule(lightcolor);	}}

這里我們就將枚舉類型和switch一起使用了,這里是代碼比較簡單,如果復雜一些就不能無腦if-else或者switch,應該使用Strategy模式,上次介紹的比較簡單,之后會再詳細講解一下

枚舉類型的方法

枚舉類型不能繼承,因為都隱式繼承了java.lang.Enum抽象類,因為java沒有多繼承,所以就不能擴展(繼承)其他類

Enum類中有幾種行為方法

  • final String name() :返回枚舉常量的名稱
  • final int ordinal() : 返回枚舉類型常量的序號,比如上面RED就是0
  • String toString() :返回枚舉常量的字符串表示,默認就是名稱
  • static E[] values() : 返回包含該枚舉類型所有枚舉常量的數組//一般使用一個枚舉類型的數組接收
  • static E valueOf(String name) : 返回指定名稱的枚舉常量

舉個例子,遍歷輸出所有枚舉常量

private enum Week{		MON,TUS,WES,THR,FRI,SAT,SUN	}		public static void main(String[] args) {		Week[] w = Week.values();		for(Week s:w)		{			System.out.println(s.ordinal() +":"+ s.name());		}	}

這里既然是一個數組,那么就可以使用for-each循環

帶參數的枚舉類型的枚舉常量

在枚舉類型中,除了枚舉常量列表,還可以定義構造方法,成員變量和方法等成分,枚舉常量列表應該以分號結尾,其他語法成分在其后面, 當創建枚舉類型的對象時,運行系統會調用相應的構造方法,如果沒有顯式的構造方法,系統會默認一個無參的構造方法

枚舉常量可以包含一個實參列表,如RED(2),在枚舉類型中,如果定義有帶實參的枚舉常量,那么就應該有相應的帶形參的構造方法,否則將引發編譯錯,當創建帶實參的枚舉常量對象時,運行系統會將各自的實參傳遞給相應的形參。

?

在枚舉類型中,自定義成員變量不能和枚舉常量重名,自定義方法不能和繼承的方法相沖

接下來舉一個例子就是輸出一周七天

private enum Week{		MON("星期一"),TUS("星期二"),WES("星期三"),THR("星期四"),FRI("星期五"),SAT("星期六"),SUN("星期日");//必須要有相應的帶形參的構造方法		private String description;		private Week(String description) {//枚舉類型的構造方法只能時private的,否則會報錯			this.description = description;		}		@Override		public String toString() {			return description;		}	}			public static void main(String[] args) {			Week[] w = Week.values();			for(Week s:w)			{//.ordinal()為返回枚舉常量的序號,name是返回其常量名稱,重寫toString方法可以返回其參數列表中的字符串				System.out.println(s.toString() +":"+ s.name());		}	}

運行結果

星期一:MON
星期二:TUS
星期三:WES
星期四:THR
星期五:FRI
星期六:SAT
星期日:SUN

博主的話

??,今天的分享就到這里,這是Second round review,所以進度就非常快,枚舉和回收進程說的要多一些,我們學完之后一定要能夠綜合利用MVC,singleton ,strategy,decorator,factory模式,利用容器,綜合利用繼承與多態,封裝不同的類,運用界面編程和反射機制(異常處理使用軟件就可以自動進行,但是還是要自己會處理),同時運用IO完成一個復雜的功能強大的小程序。要能夠實現對user隱藏代碼,只在界面上操作,還要掌握debug的能力,,,,這是學完java SE的初級人員所應該具備的能力~~

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/121408.html

相關文章

  • Java 總結

    摘要:中的詳解必修個多線程問題總結個多線程問題總結有哪些源代碼看了后讓你收獲很多,代碼思維和能力有較大的提升有哪些源代碼看了后讓你收獲很多,代碼思維和能力有較大的提升開源的運行原理從虛擬機工作流程看運行原理。 自己實現集合框架 (三): 單鏈表的實現 自己實現集合框架 (三): 單鏈表的實現 基于 POI 封裝 ExcelUtil 精簡的 Excel 導入導出 由于 poi 本身只是針對于 ...

    caspar 評論0 收藏0
  • java程序員c語言學習筆記,一文快速了解

    摘要:結構體也可以包含結構體,就像內部類訪問結構的屬性和一樣。。我覺得這個需要學下數據結構才能更好理解給數據類型起一個新名字則可以通過對于結構體我可以這樣再通過變量名就可以簡便的聲明結構體變量。文件暫時過了一遍預處理器頭文件就是擴展名為的文件。 ...

    FuisonDesign 評論0 收藏0
  • 深入理解單例模式

    摘要:總結我們主要介紹到了以下幾種方式實現單例模式餓漢方式線程安全懶漢式非線程安全和關鍵字線程安全版本懶漢式雙重檢查加鎖版本枚舉方式參考設計模式中文版第二版設計模式深入理解單例模式我是一個以架構師為年之內目標的小小白。 初遇設計模式在上個寒假,當時把每個設計模式過了一遍,對設計模式有了一個最初級的了解。這個學期借了幾本設計模式的書籍看,聽了老師的設計模式課,對設計模式算是有個更進一步的認識。...

    FuisonDesign 評論0 收藏0
  • 從源碼入手,一文帶你讀懂Spring AOP面向切面編程

    摘要:,,面向切面編程。,切點,切面匹配連接點的點,一般與切點表達式相關,就是切面如何切點。例子中,注解就是切點表達式,匹配對應的連接點,通知,指在切面的某個特定的連接點上執行的動作。,織入,將作用在的過程。因為源碼都是英文寫的。 之前《零基礎帶你看Spring源碼——IOC控制反轉》詳細講了Spring容器的初始化和加載的原理,后面《你真的完全了解Java動態代理嗎?看這篇就夠了》介紹了下...

    wawor4827 評論0 收藏0
  • Java開發第一面————淘寶:難以割舍

    摘要:供應商和經銷商之間可以在線實時地提交訂單查詢產品供應和庫存狀況并獲得市場銷售信息及客戶支持,實現了供應商與經銷商之間端到端的供應鏈管理,有效地縮短了供銷鏈。近期太多同學找我解惑,我經常勸大家不要過度焦慮,放平常心,其實我剛畢業時超級菜 B 的(放到今天工作都找不到那種),總結下來就是前面的 職場瓶頸:2~4 年前端走出離職困境與舒適區 的這些文章,于是我把剛入行在 ITEye 寫的文章,統...

    Nekron 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<