當前位置:首頁 » 編程語言 » javaas關鍵字

javaas關鍵字

發布時間: 2022-08-11 09:06:34

java中null,true,false各占幾個位元組,在底層分別如何用二進制形式表示

JVM虛擬機規格標准第二版規定:
位元組碼形態的boolean的false和true,是用int(32bit整型)的0和1表示,
沒有具體規定null的具體值。但虛擬機的邏輯運算通常都轉換成int運算,可以肯定null的具體值也是int的一個值。

也就是說位元組碼形態無論是內存中還是class文件中,boolean, byte, char, int, short這幾個類型都是以int形式來輸入輸出。
(As noted in §3.3.4 and §3.11.1, the Java virtual machine internally converts values of types boolean, byte, char, and short to type int.)

另外,在SE庫的IO輸出流中,對null的輸出是0x70或112,false和true為0和1,由API規定都是1個位元組大小。

❷ 以下不是java關鍵字的有()

以下不是java關鍵字的有(true);正確答案是選擇D;

屬於java字面常量java關鍵字是電腦語言里事先定義的,有特別意義的標識符,有時又叫保留字,還有特別意義的變數。

Java作為一門面向對象編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特徵。Java語言作為靜態面向對象編程語言的代表,極好地實現了面向對象理論,允許程序員以優雅的思維方式進行復雜的編程

發展歷程

20世紀90年代,硬體領域出現了單片式計算機系統,這種價格低廉的系統一出現就立即引起了自動控制領域人員的注意,因為使用它可以大幅度提升消費類電子產品(如電視機頂盒、麵包烤箱、行動電話等)的智能化程度。

Sun公司為了搶占市場先機,在1991年成立了一個稱為Green的項目小組,帕特里克、詹姆斯·高斯林、麥克·舍林丹和其他幾個工程師一起組成的工作小組在加利福尼亞州門洛帕克市沙丘路的一個小工作室裡面研究開發新技術,專攻計算機在家電產品上的嵌入式應用。

❸ 多關鍵字多欄位查詢(sql JAVA)

恩,樓主的意思我基本明白。因為曾經我也試圖做過這樣的一個搜索引擎。
但是很不幸的告訴你,這個功能不是簡單的sql語句可以實現的。
因為sql一般的模糊查詢都用like,而like沒有所謂的「相似度」
所以達不到你要的排序效果了。
不過我想到的是另外一種方法,用java和sql配合:
首先用java分割關鍵字之後,判斷有多少個,然後用Union作出N種組合,之後再把這些組合的分隔符替換為%,然後逐個的去select,各個select之間用Union聯合,聯合的方式就是關鍵字多的寫在前面,這樣動態生成的sql腳本,傳給資料庫執行,也許能實現這個效果。

❹ java中static關鍵字的意義

1. static關鍵字 : 靜態的意思。可以修飾成員變數和成員方法。

2. static關鍵字的特點

  • A : 隨著類的載入而載入

  • B : 優先於對象存在

  • C : 被類的所有對象共享

    這其實也是我們判斷該不該使用靜態的依據。
    同一個班級的學生應該共用同一個班級編號。
    飲水機 (用靜態修飾)
    水杯 (不能用靜態修飾)

  • D : 可以通過類名調用

    既可以通過對象名調用,也可以通過類名調用,建議通過類名調用。

  • 3. static關鍵字的注意事項

  • A : 在靜態方法中沒有this關鍵字,如何理解呢 ?

    靜態是隨著類的載入而載入,this是隨著對象的創建而存在。

    靜態比對象先存在。

  • B : 靜態只能訪問靜態。

    靜態方法只能訪問靜態的成員變數。

    靜態方法只能訪問靜態的成員方法。

    非靜態方法可以訪問靜態和非晶態的成員變數。

    非靜態方法可以訪問靜態和非晶態的成員方法。

  • 4. 靜態變數和成員變數的區別

  • A : 所屬不同

    靜態變數:屬於類,類變數
    成員變數:屬於對象,對象變數,實例變數

  • B : 內存位置不同

    靜態變數:方法區的靜態區
    成員變數:堆內存

  • C : 生命周期不同

    靜態變數:靜態變數是隨著類的載入而載入,隨著類的消失而消失
    成員變數:成員變數是隨著對象的創建而存在,隨著對象的消失而消失

  • D : 調用不同

    靜態變數:可以通過對象名調用,也可以通過類名調用
    成員變數:只能通過對象名調用

❺ private在Java中是什麼意思

用於聲明私有變數及分配存儲空間。

Private為編程語句在模塊級別中使用,用於聲明私有變數及分配存儲空間。語法Private [WithEvents] varname[([subscripts])] [As [New] type] [,[WithEvents] varname[([subscripts])] [As [New] type]。

Private變數只能在包含其聲明的模塊中使用。可以使用Private語句聲明變數的數據類型。聲明了一個Integer類型的變數:「Private NumberOfEmployees As Integer」;也可以使用Private語句來聲明變數的對象類型。

(5)javaas關鍵字擴展閱讀:

Java語句的相關要求規定:

1、使用private修飾符可以完全隱藏類的成員,使得不能從類外直接訪問它們。不使用修飾符允許同一個包里的任何類直接訪問類的成員,但是其他包中的類不可以。

2、使用protected修飾符允許任何包中的子類或同一包的類的成員。使用public修飾符允許任何類訪問類的成員。

3、當初始化變數時,數值變數被初始化為 0,變長的字元串被初始化為一個零長度的字元串(""),而定長的字元串則用 0 填充。

❻ java和c# 語言關鍵字都是什麼

java關鍵字 1.break和continue
break和continue是兩個java關鍵字,在一個循環中,比如50次的循環語句中,如果在某次循環中執行了break語句,那麼整個循環語句就結束。
如果在某次循環中執行了continue語句,那麼本次循環就結束,即不再執行本次循環中循環體中continue語句後面的語句,而轉入進行下一次循環。
2.static關鍵字
(1)用static修飾的變數是類變數,否則是實例變數,類變數被所有對象共享,即所有對象的這個類變數都分配給同一處內存,改變其中一個對象的這個類變數就會改變其他對象的這個類變數。
(2)java程序執行時,類的位元組碼文件被載入到內存,如果該類沒有創建對象,類的實例成員變數不會被分配內存。但是類中的類變數被載入到內存時,就分配了相應的內存空間。如果該類創建對象,那麼不同對象的實例變數互不相同,即分配不同的內存空間,而內變數不再分配內存空間,即所有對象的類變數是相同的。
(3)當創建第一個對象時,類中的實例方法就分配了入口地址,當再創建對象時,不再分配入口地址,也就是說方法的入口地址被所有對象共享,當所有對象都不存在時,方法的入口地址才被取消。
3.this關鍵字
(1) this是java的一個關鍵字,表示某個對象。this可以出現在實例方法和構造方法中,但是不可以出現在類方法中(因為非靜態的變數或方法不能在靜態的方法中被調用),this關鍵字出現在構造方法中時,代表使用該構造方法所創建的對象。實例方法必須通過對象來調用,當this關鍵字出現在類的實例方法中時,代表正在調用方法的當前對象。
(2)實例方法可以操縱成員變數,當實例成員變數在實例方法中出現時,默認的格式是this.成員變數
4.final關鍵字
final關鍵字可以修飾類、成員變數和方法中的參數。
final類不能繼承。
final方法不能被重寫,但可以被繼承。
final成員變數必須賦初值,且不能改變。
final參數的值不能改變。
5.abstract關鍵字
abstract關鍵字可以修飾類、變數、方法。
abstract類可以有abstract方法。對於abstract方法,只允許聲明,不允許實現,而且不能使用final修飾abstract方法(因為final方法不能被重寫)。
對於abstract類,不能使用new運算符創建該類的對象,需產生其子類,由子類創建對象,如果一個類是abstract類的子類,那麼它必須實現父類的abstract方法
6.super關鍵字
(1)子類不能繼承父類的構造方法,因此,子類如果想使用父類的構造方法,必須在子類的構造方法中使用,並且必須使用關鍵字super來調用,且super必須在子類構造方法的第一條語句。
(2)如果類裡面定義了一個或多個構造方法,那麼java不提供默認的構造方法(不帶參數的構造方法),因此,當在父類中定義了多個構造方法時,應該包括一個不帶參數的構造方法,以防子類省略super時出現錯誤。評價答案 您已經評價過!好:0 您已經評價過!不好:0 您已經評價過!原創:0 您已經評價過!非原創:0 大提琴 回答採納率:10.8% 2010-08-04 11:22 檢舉 滿意答案好評率:0% Abstract 抽象的
一個Java語言中的關鍵字,用在類的聲明中來指明一個類是不能被實例化的,但是可以被其它類繼承。一個抽象類可以使用抽象方法,抽象方法不需要實現,但是需要在子類中被實現
break
一個Java的關鍵字,用來改變程序執行流程,立刻從當前語句的下一句開始執行從。如果後面跟有一個標簽,則從標簽對應的地方開始執行
case

Java語言的關鍵字,用來定義一組分支選擇,如果某個值和switch中給出的值一樣,就會從該分支開始執行。
catch
Java的一個關鍵字,用來聲明當try語句塊中發生運行時錯誤或非運行時異常時運行的一個塊。
char
Java語言的一個關鍵字,用來定義一個字元類型

continue
一個Java的關鍵字,用來打斷當前循環過程,從當前循環的最後重新開始執行,如果後面跟有一個標簽,則從標簽對應的地方開始執行。
do
一個Java語言的關鍵字,用來聲明一個循環,這個循環的結束條件可以通過while關鍵字設置
double
一個Java語言的關鍵字,用來定義一個double類型的變數
else
一個Java語言的關鍵字,如果if語句的條件不滿足就會執行該語句。
final
一個Java語言的關鍵字。你只能定義一個實體一次,以後不能改變它或繼承它。更嚴格的講:一個final修飾的類不能被子類化,一個final修飾的方法不能被重寫,一個final修飾的變數不能改變其初始值。
finally
一個Java語言的關鍵字,用來執行一段代碼不管在前面定義的try語句中是否有異常或運行時錯誤發生。
float
一個Java語言的關鍵字,用來定義一個浮點數變數
for
一個Java語言的關鍵字,用來聲明一個循環。程序員可以指定要循環的語句,推出條件和初始化變數。
if
Java編程語言的一個關鍵字,用來生成一個條件測試,如果條件為真,就執行if下的語句。
implements
Java(TM)編程語言的一個關鍵字,在類的聲明中是可選的,用來指明當前類實現的介面。
import
Java(TM)編程語言的一個關鍵字,在源文件的開始部分指明後面將要引用的一個類或整個包,這樣就不必在使用的時候加上包的名字。
instanceof
一個二操作數的Java(TM)語言關鍵字,用來測試第一個參數的運行時類型是否和第二個參數兼容。
int
Java(TM)的一個關鍵字,用來定義一個整形變數
Java(TM)的一個關鍵字,用來定義一系列的方法和常量。它可以被類實現,通過implements關鍵字。
long

Java語言的一個關鍵字,用來定義一個long類型的變數。
private
Java語言的一個關鍵字,用在方法或變數的聲中。它表示這個方法或變數只能被這個類的其它元素所訪問。
protected
Java語言的一個關鍵字,在方法和變數的聲明中使用,它表示這個方法或變數只能被同一個類中的,子類中的或者同一個包中的類中的元素所訪問。
public
Java語言的一個關鍵字,在方法和變數的聲明中使用,它表示這個方法或變數能夠被其它類中的元素訪問。
return
Java語言的一個關鍵字,用來結束一個方法的執行。它後面可以跟一個方法聲明中要求的值。
short
Java語言的關鍵字,用來定義一個short類型的變數。
static
Java語言的關鍵字,用來定義一個變數為類變數。類只維護一個類變數的拷貝,不管該類當前有多少個實例。"static" 同樣能夠用來定義一個方法為類方法。類方法通過類名調用而不是特定的實例,並且只能操作類變數。

this
Java語言的關鍵字,用來代表它出現的類的一個實例。this可以用來訪問類變數和類方法。
throw
Java語言的關鍵字,允許用戶拋出一個exception對象或者任何實現throwable的對象
throws
Java語言的關鍵字,用在方法的聲明中來說明哪些異常這個方法是不處理的,而是提交到程序的更高一層。

transient
Java語言的關鍵字,用來表示一個域不是該對象串列化的一部分。當一個對象被串列化的時候,transient型變數的值不包括在串列化的表示中,然而非transient型的變數是被包括進去的。
try
Java語言的關鍵字,用來定義一個可能拋出異常語句塊。如果一個異常被拋出,一個可選的catch語句塊會處理try語句塊中拋出的異常。同時,一個finally語句塊會被執行,無論一個異常是否被拋出。

void
Java語言的關鍵字,用在Java語言的方法聲明中說明這個方法沒有任何返回值。"void"也可以用來表示一句沒有任何功能的語句。
volatile
Java語言的關鍵字,用在變數的聲明中表示這個變數是被同時運行的幾個線程非同步修改的。

while
Java語言的一個關鍵字,用來定義一段反復執行的循環語句。循環的退出條件是while語句的一部分。

關於break和continue。

continue語句與break語句相關,但較少用到。continue語句用於使其所在的for、while或do-while語句開始下一次循環。在while與do-while語句中,continue語句的執行意味著立即執行測試部分;在for循環語句中,continue語句的執行則意味著使控制傳遞到增量部分。C#中的關鍵字C#(讀做 "C sharp",中文譯音「夏普」)是微軟公司發布的一種面向對象的、運行於.NET Framework之上的高級程序設計語言,並定於在微軟職業開發者論壇(PDC)上登台亮相.C#是微軟公司研究員Anders Hejlsberg的最新成果.C#看起來與Java有著驚人的相似;它包括了諸如單一繼承,界面,與Java幾乎同樣的語法,和編譯成中間代碼再運行的過程.但是C#與Java有著明顯的不同,它借鑒了Delphi的一個特點,與COM(組件對象模型)是直接集成的,而且它是微軟公司.NET windows網路框架的主角. 76個關鍵字:

abstract as base bool break

byte case catch char checked

class const continue decimal default

delegate do double else enum

event explicit extern false finally

fixed float for foreach goto

if implicit in int interface

internal is lock long namespace

new null object operator out

override params private protected public

readonly ref return sbyte sealed

short sizeof stackalloc static string

struct switch this throw true

try typeof uint ulong unchecked

unsafe ushort using virtual void

while

5個在某些情況下是關鍵字:

get set value add remove

C#中有76個在任何情況下都有固定意思的關鍵字。另外還有5個在特定情況下才有固定意思的標識符。例如,value能用來作為變數名,但有一種情況例外,那就是它用作屬性/索引器的set語句的時候是一關鍵字。

但你可以在關鍵字前加@來使它可以用作變數名:

int @int = 42;

不過在一般情況下不要使用這種變數名。

你也可以使用@來產生跨越幾行的字元串,這對於產生正則表達式非常有用。例如:

string pattern = @"

( # start the group

abra(cad)? # match abra and optional cad

)+"; # one or more occurrences

如果你要在字元串中包含雙引號,那你可以這樣:

string quote = @"""quote""&q

❼ C#和JAVA區別,具體應用,關鍵字,語法

c#與java的區別

1.屬性:
java中定義和訪問均要用get和set方法,可以不成對出現。
c#中是真正的屬性,定義時get和set必須同時出現,房問時用.號即可。不用get,set

2.對象索引
就是對象數組
public Story this [int index] {

3.C#中,不用任何范圍修飾符時,默認的是protect,因而不能在類外被訪問.

4.因為JAVA規定,在一個文件中只能有一個public類,而且這個類的名稱必須與文件名一模一樣,這是一個區別

5.在C#中,它是以Main方法來定位入口的.如果一個程序中沒有一個名為Main的方法,就會出"找不到入口的錯誤".不要把Main寫成main喲

6.C#預定義的簡單數據類型比Java多。例如,C#有unit,即無符號整數

7.忘掉Java中的static final修飾符。在C#中,常量可以用const關鍵詞聲明
C#的設計者還增加了readonly關鍵詞,readonly域只能通過初始化器或類的構造函數設置
8.公用類的入口點:c#是可以對Main進行重載(java中是main),允許有int返回值和空參數的Main

9.在Java中,switch語句只能處理整數。但C#中的switch語句不同,它還能夠處理字元變數。請考慮下面用switch語句處理字元串變數的C#代碼

10.C#沒有>>>移位操作符

11.goto關鍵詞:
Java不用goto關鍵詞。在C#中,goto允許你轉到指定的標簽。不過,C#以特別謹慎的態度對待goto,比如它不允許goto轉入到語句塊的內部。在Java中,你可以用帶標簽的語句加上break或continue取代C#中的goto。

12.int[] x = { 0, 1, 2, 3 };
int x[] = { 0, 1, 2, 3 };
但在C#中,只有第一行代碼合法,[]不能放到變數名字之後。

13.與Java不同的是,C#允許為名稱空間或者名稱空間中的類指定別名:
using TheConsole = System.Console;

14.在Java中,包的名字同時也是實際存在的實體,它決定了放置.java文件的目錄結構。在C#中,物理的包和邏輯的名稱之間是完全分離的
.NET中包的實體稱為程序集(Assembly)。每一個程序集包含一個manifest結構。manifest列舉程序集所包含的文件,控制哪些類型和資源被顯露到程序集之外,並把對這些類型和資源的引用映射到包含這些類型與資源的文件。程序集是自包含的,一個程序集可以放置到單一的文件之內,也可以分割成多個文件。.NET的這種封裝機制解決了DLL文件所面臨的問題,即臭名昭著的DLL Hell問題。

15.在Java中,java.lang包是默認的包,C#中不存在默認的包

16.C#中的訪問修飾符與Java中的基本對應,但多出了一個internal。簡而言之,C#有5種類型的可訪問性,如下所示:

public:成員可以從任何代碼訪問。
protected:成員只能從派生類訪問。
internal:成員只能從同一程序集的內部訪問。
protected internal:成員只能從同一程序集內的派生類訪問。
private:成員只能在當前類的內部訪問。

17.由於C#中不存在final關鍵詞,如果想要某個類不再被派生,你可以使用sealed關鍵詞

18.與Java不同,C#中的介面不能包含域(Field)。
另外還要注意,在C#中,介面內的所有方法默認都是公用方法。在Java中,方法聲明可以帶有public修飾符(即使這並非必要),但在C#中,顯式為介面的方法指定public修飾符是非法的。例如,下面的C#介面將產生一個編譯錯誤。

19.C#中的is操作符與Java中的instanceof操作符一樣,兩者都可以用來測試某個對象的實例是否屬於特定的類型。在Java中沒有與C#中的as操作符等價的操作符。as操作符與is操作符非常相似,但它更富有「進取心」:如果類型正確的話,as操作符會嘗試把被測試的對象引用轉換成目標類型;否則,它把變數引用設置成null。

20.C#仍舊保留了C++的內存手工管理方法,它適合在速度極端重要的場合使用,而在Java中這是不允許的

21.在C#中,所有的異常都從一個名為Exception的類派生

22.枚舉器即enum類型(java無),把它作為一個變數值的類型使用,從而把變數可能的取值范圍限制為枚舉器中出現的值。

23.結構(Struct)與類很相似,而結構是一種值類型,它存儲在棧中或者是嵌入式的,結構可以實現介面,可以象類一樣擁有成員,但結構不支持繼承

24.屬性聲明語法的第一部分與域聲明很相似,第二部分包括一個set過程和/或一個get過程

25.傳值方式:
在java中簡單數據類型的值傳參時,都以傳值方式;
在c#中如果加ref則會以引用的方式傳值(方法內部改變該參數,則外部變數一起跟著變);
加out與ref基本相同,但out不要求參數一定要初始化.

26.c#保留了指針。unsafe

27.代理:代理(delegate)可以看作C++或者其他語言中的函數指針
代理用來封裝可調用方法。你可以在類裡面編寫方法並在該方法上創建代理,此後這個代理就可以被傳遞到第二個方法。這樣,第二個方法就可以調用第一個方法。
代理是從公共基類System.Delegate派生的引用類型。定義和使用代理包括三個步驟:聲明,創建實例,調用。代理用delegate聲明語法聲明。

❽ java 中assert的使用

一、assertion的意義和用法

J2SE 1.4在語言上提供了一個新特性,就是assertion功能,它是該版本在Java語言方面最大的革新。

從理論上來說,通過 assertion方式可以證明程序的正確性,但是這是一項相當復雜的工作,目前還沒有太多的實踐意義。

在實現中,assertion就是在程序中的一條語句,它對一個boolean表達式進行檢查,一個正確程序必須保證這個boolean表達式的值為true;如果該值為false,說明程序已經處於不正確的狀態下,系統將給出警告或退出。

一般來說,assertion用於保證程序最基本、關鍵的正確性。assertion檢查通常在開發和測試時開啟。為了提高性能,在軟體發布後,assertion檢查通常是關閉的。

1、語法表示

在語法上,為了支持assertion,Java增加了一個關鍵字assert。它包括兩種表達式,分別如下:
assert expression1;
assert expression1:expression2;

在兩種表達式中,expression1表示一個boolean表達式, expression2表示一個基本類型或者是一個對象(Object),基本類型包括boolean,char,double,float,int和 long。由於所有類都為Object的子類,因此這個參數可以用於所有對象。

2、含義

在運行時,如果關閉了assertion功能,這些語句將不起任何作用。如果打開了assertion功能,那麼expression1的值將被計算,如果它的值為false,該語句強拋出一個AssertionError對象。

如果assertion語句包括expression2參數,程序將計算出 expression2的結果,然後將這個結果作為AssertionError的構造函數的參數,來創建AssertionError對象,並拋出該對 象;如果expression1值為true,expression2將不被計算。

一種特殊情況是,如果在計算表達式時,表達式本身拋出Exception,那麼assert將停止運行,而拋出這個Exception。

3、編譯

由於assert是一個新關鍵字,使用老版本的JDK是無法編譯帶有assert的 源程序。因此,我們必須使用JDK1.4(或者更新)的Java編譯器,在使用Javac命令時,我們必須加上-source 1.4作為參數。-source 1.4表示使用JDK 1.4版本的方式來編譯源代碼,否則編譯就不能通過,因為預設的Javac編譯器使用JDK1.3的語法規則。

大家在使用eclipse,jbuilder等IDE工具的時候,要注意編譯器的版本,使用的jre,不等於是javac 的版本

一個簡單的例子如下:javac -source 1.4 AssertTest.java

4、運行

由於我們可以選擇開啟assertion功能,或者不開啟,另外我們還可以開啟一部 分類或包的assertion功能。通過這些選項,我們可以過濾所有我們不關心的類,只選擇我們關心的類或包來觀察。
參數 -esa 和 -dsa:

它們含義為開啟(關閉)系統類的assertion功能。由於新版本的Java的系統類中,也使了assertion語句,因此如果用戶需要觀察它們的運行情況,就需要打開系統類的assertion功能 ,我們可使用-esa參數打開,使用 -dsa參數關閉。

-esa和-dsa的全名為-enablesystemassertions和-disenablesystemassertions,全名和縮寫名有同樣的功能。

參數 -ea和-ea:

它們含義為開啟(關閉)用戶類的assertion功能:通過這個參數,用戶可以打 開某些類或包的assertion功能,同樣用戶也可以關閉某些類和包的assertion功能。打開assertion功能參數為-ea;如果不帶任何 參數,表示打開所有用戶類;如果帶有包名稱或者類名稱,表示打開這些類或包;如果包名稱後面跟有三個點,代表這個包及其子包;如果只有三個點,代表無名 包。關閉assertion功能參數為-da,使用方法與-ea類似。

-ea和-da的全名為-enableassertions和-disenableassertions,全名和縮寫名有同樣的功能。下面表示了參數及其含義。

參數 例子 說明

-ea java -ea 打開所有用戶類的assertion

-da java -da 關閉所有用戶類的assertion

-ea: java -ea:MyClass1 打開MyClass1的assertion

-da: java -da: MyClass1 關閉MyClass1的assertion

-ea: java -ea:pkg1 打開pkg1包的assertion

-da: java -da:pkg1 關閉pkg1包的assertion

-ea:... java -ea:... 打開預設包(無名包)的assertion

-da:... java -da:... 關閉預設包(無名包)的assertion

-ea:... java -ea:pkg1... 打開pkg1包和其子包的assertion

-da:... java -da:pkg1... 關閉pkg1包和其子包的assertion

-esa java -esa 打開系統類的assertion

-dsa java -dsa 關閉系統類的assertion

綜合使用 java -dsa:MyClass1:pkg1 關閉MyClass1和pkg1包的assertion

其中...代表,此包和其子包的含義。例如我們有兩個包為pkg1和pkg1.subpkg。

那麼pkg1...就代表pkg1和pkg1.subpkg兩個包。

另外,Java為了讓程序也能夠動態開啟和關閉某些類和包的assertion功能,Java修該了Class和ClassLoader的實現,增加了幾個用於操作assert的API。下面簡單說明一下幾個API的作用。

ClassLoader類中的幾個相關的API:

setDefaultAssertionStatus:

用於開啟/關閉assertion功能

setPackageAssertionStatus:

用於開啟/關閉某些包的assertion功能

setClassAssertionStatus:

用於開啟/關閉某些類的assertion功能

clearAssertionStatus:

用於關閉assertion功能

二、assertion的設計問題

首先,我們認為assertion是必要的。因為,如果沒有統一的assertion機制,Java程序通常使用if-then-else或者switch-case語句進行assertion檢查,而且檢查的數據類型也不完全相同。

assertion機制讓Java程序員用統一的方式處理assertion問題, 而不是按自己的方式處理。另外,如果用戶使用自己的方式進行檢查,那麼這些代碼在發布以後仍然將起作用,這可能會影響程序的性能。而從語言言層次支持 assertion功能,這將把assertion對性能帶來的負面影響降到最小。

Java是通過增強一個關鍵字assert實現支持assertion,而不是 使用一個庫函數支持,這說明Java認為assertion對於語言本身來說是非常重要的。C語言就是 通過Assert.h函數庫實現斷言的支持。

Java的assertion的開啟也和C語言不太一樣,我們都知道在C語言中,assertion的開啟是在編譯時候決定的。當我們使用debug方式編譯程序時候,assertion被開啟,而使用release方式編譯時候,assertion自動被關閉。

而Java的assertion卻是在運行的時候進行決定的。其實,這兩種方式是各有優缺點。如果採用編譯時決定方式,開發人員將處理兩種類型的目標碼,debug版本和release版本,這加大了文檔管理的難度,但是提高了代碼的運行效率。

Java採用運行時決定的方式,這樣所有的assertion信息將置於目標代碼 中,同一目標代碼可以選擇不同方式運行,增強目標代碼的靈活性,但是它將犧牲因為assertion而引起一部分性能損失。

另外,我們注意到AssertionError作為Error的一個子類,而不 是RuntimeException。Error代表一些異常的錯誤,通常是不可以恢復的,而 RuntimeException強調該錯誤在運行時才發生的特點。AssertionError通常為非常關鍵的錯誤,這些錯誤往往是不容易恢復的,而且assertion機制也不鼓勵程序員對這種錯誤進行恢復。

三、assertion與繼承

如果一個assert語句在父類,而當它的子類調用它時,該assert為false。父類的assert語句將只有在父類的assert開啟才起作用,如果僅僅開啟子類的assert,父類的assert仍然不運行。因此,assert語句不具有繼承功能。

四、assertion的使用

assertion的使用是一個復雜的問題,通常來說,assertion用於檢查一些關鍵的值,並且這些值對整個程序,或者局部功能的完成有很大的影響,並且這種錯誤不容易恢復的。

assertion表達式應該短小、易懂,如果需要評估復雜的表達式,應該使用函數計算。以下是一些使用assertion的情況的例子,這些方式可以讓java程序的可靠性更高。

檢查控制流; 在if-then-else和swith-case語句中,我們可以在不應該發生的控制支流上加上assert false語句。如果這種情況發生了,assert能夠檢查出來。

在私有函數計算前,檢查輸入參數是否有效;對於一私有些函數,要求輸入滿足一些特定的條件,那麼我們可以在函數開始處使用assert進行參數檢查。

對於公共函數,我們通常不使用assertion檢查,因為一般來說,公共函數必須對無效的參數進行檢查和處理。而私有函數往往是直接使用的。例如:某函數可能要求輸入的參數必須不為null。那麼我們可以在函數的一開始加上:

assert parameter1!=null : "paramerter is null in test method";

在函數計算後,檢查函數結果是否有效;對於一些計算函數,函數運行完成後,某些值需要保證一定的性質,因此我們可以通過assert檢查該值。例如,我們有一個計算絕對值的函數,那麼我們就可以在函數的結果處,加上一個語句:

assert value>=0:"Value should be bigger than 0:"+value;

通過這種方式,我們可以對函數計算完的結果進行檢查。檢查程序不變數;有些程序中,存在一些不變數,在程序的運行生命周期,這些不變數的值都是不變的。這些不變數可能是一個簡單表達式,也可能是一個復雜的表達式。

對於一些關鍵的不變數,我們可以通過assert進行檢查。例如,在一個財會系統中,公司的支出和收入必須保持一定的平衡關系,因此我們可以編寫一個表達式檢查這種平衡關系,如下表示:

private boolean isBalance() { …… }

在這個系統中,在一些可能影響這種平衡關系的方法的前後,我們都可以加上assert驗證:

assert isBalance():"balance is destoried";

五、補充

必須清楚AssertionError是繼承自Error得,因此你可以不再程序中catch它的,當然你也可以在程序中catch它然後程序可以繼續執行。

例如:
public class AssertTest
{
public static void main(String[] args)
{
AssertTest at = new AssertTest();
try
{
at.assertMe(true);
at.assertMe(false);
}
catch(AssertionError ae)
{
System.out.println("AsseriontError catched");
}
System.out.println("go on");

}

private void assertMe(boolean boo)
{
assert boo?true:false;
System.out.println("true condition");
}

}

Assert最好不要濫用,原因是assert並不一定都是enable的,下面兩種情況就不應該用assert
不要再public的方法裡面檢查參數是不是為null之類的操作
例如public int get(String s)
{
assert s != null;
}
如果需要檢查也最好通過if s = null 拋出NullPointerException來檢查
不要用assert來檢查方法操作的返回值來判斷方法操作的結果
例如 assert list.removeAll();這樣看起來好像沒有問題 但是想想如果assert 被disable呢,那樣他就不會被執行了 所以removeAll()操作就沒有被執行 可以這樣代替
boolean boo = list.removeAl();
assert boo;

❾ java中在定義類時關鍵字public是否可以省略

如果在一個文件中,有多類,但只有一個有main()方法時可以省略,jdk會自己識別,但當多個類有main()方法時,就必須表明哪個類是public的,否則jdk找不到運行入口

❿ 在C語言中的32個關鍵字具體是哪些

由ANSI標準定義的共32個 :
auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if while static

註:關鍵字auto用於說明自動變數,通常不用;volatile(易變的)表示該變數不經過賦值,其值也可能被改變(例如表示時鍾的變數、表示通信埠的變數等)。

auto :聲明自動變數 一般不使用
double :聲明雙精度變數或函數
int: 聲明整型變數或函數
struct:聲明結構體變數或函數
break:跳出當前循環
else :條件語句否定分支(與 if 連用)
long :聲明長整型變數或函數
switch :用於開關語句
case:開關語句分支
enum :聲明枚舉類型
register:聲明積存器變數
typedef:用以給數據類型取別名(當然還有其他作用)
char :聲明字元型變數或函數
extern:聲明變數是在其他文件正聲明(也可以看做是引用變數)
return :子程序返回語句(可以帶參數,也看不帶參數)
union:聲明聯合數據類型
const :聲明只讀變數
float:聲明浮點型變數或函數
short :聲明短整型變數或函數
unsigned:聲明無符號類型變數或函數
continue:結束當前循環,開始下一輪循環
for:一種循環語句(可意會不可言傳)
signed:生命有符號類型變數或函數
void :聲明函數無返回值或無參數,聲明無類型指針(基本上就這三個作用)
default:開關語句中的「其他」分支
goto:無條件跳轉語句
sizeof:計算數據類型長度
volatile:說明變數在程序執行中可被隱含地改變
do :循環語句的循環體
while :循環語句的循環條件
static :聲明靜態變數
if:條件語句

熱點內容
微信視頻如何重新緩存 發布:2025-01-21 04:44:41 瀏覽:879
pdf壓縮文件大小 發布:2025-01-21 04:40:24 瀏覽:798
linux解壓文件到指定 發布:2025-01-21 04:38:36 瀏覽:874
自己做的安卓app怎麼下載 發布:2025-01-21 04:35:07 瀏覽:163
機頂盒加密頻道 發布:2025-01-21 04:26:48 瀏覽:318
騰訊應用加密 發布:2025-01-21 04:24:38 瀏覽:988
無法訪問f 發布:2025-01-21 04:24:36 瀏覽:539
sql實時 發布:2025-01-21 04:24:27 瀏覽:998
怎麼在linux伺服器上配ip地址 發布:2025-01-21 04:22:10 瀏覽:251
咖搭姆編程 發布:2025-01-21 04:19:45 瀏覽:674