當前位置:首頁 » 編程軟體 » java編譯注釋

java編譯注釋

發布時間: 2023-08-17 16:02:08

1. java編譯時,注釋是否編譯

不編譯!編譯只編譯JAVA中的保留字和你定義的變數

2. 什麼是注釋如何在Java程序中加入注釋

試想一下,一個沒有一句注釋的程序源碼,怎麼讀,一個程序要上萬條代碼不可能全部記得住哪一塊是什麼用,而且一個項目也不會是一個人獨自完成,那樣效率太低,多人合作就要給別人說明,每一塊是什麼用,方便他人使用,方便自己更正,而這些說明文字就是注釋,注釋不會被執行,不影響運行結果。

Java中代碼的注釋有三種:

// 注釋一行
/* ...... */ 注釋若干行
/** ...... */ 注釋若干行,並寫入 javadoc 文檔

前兩種比較容易理解,至於第三種,你學習Java看的api文檔就是javadoc程序根據第三種的注釋生成的。

(2)java編譯注釋擴展閱讀

注釋就是對代碼的解釋和說明,其目的是讓人們能夠更加輕松地了解代碼。注釋是編寫程序時,寫程序的人給一個語句、程序段、函數等的解釋或提示,能提高程序代碼的可讀性。

3. Java編譯時註解和運行時註解有什麼區別

重寫,重載,泛型,分別是在運行時還是編譯時執行的

1. 方法重載是在編譯時執行的,因為,在編譯的時候,如果調用了一個重載的方法,那麼編譯時必須確定他調用的方法是哪個。如:

當調用evaluate("hello")時候,我們在編譯時就可以確定他調用的method #1.

2.
方法的重寫是在運行時進行的。這個也常被稱為運行時多態的體現。編譯器是沒有辦法知道它調用的到底是那個方法,相反的,只有在jvm執行過程中,才知曉到底是父子類中的哪個方法被調用了當有如下一個介面的時候,我們是無法確定到底是調用父類還是子類的方法

3.
泛型(類型檢測),這個發生在編譯時。編譯器會在編譯時對泛型類型進行檢測,並吧他重寫成實際的對象類型(非泛型代碼),這樣就可以被JVM執行了。這個過程被稱為"類型擦除"。

類型擦除的關鍵在於從泛型類型中清除類型參數的相關信息,並且再必要的時候添加類型檢查和類型轉換的方法。

類型擦除可以簡單的理解為將泛型java代碼轉換為普通java代碼,只不過編譯器更直接點,將泛型java代碼直接轉換成普通java位元組碼。類型擦除的主要過程如下:

1). 將所有的泛型參數用其最左邊界(最頂級的父類型)類型替換。

2). 移除所有的類型參數。

在編譯後變成:

4. 註解。註解即有可能是運行時也有可能是編譯時。

如java中的@Override註解就是典型的編譯時註解,他會在編譯時會檢查一些簡單的如拼寫的錯誤(與父類方法不相同)等

同樣的@Test註解是junit框架的註解,他是一個運行時註解,他可以在運行時動態的配置相關信息如timeout等。

5. 異常。異常即有可能是運行時異常,也有可能是編譯時異常。

RuntimeException是一個用於指示編譯器不需要檢查的異常。RuntimeException
是在jvm運行過程中拋出異常的父類。對於運行時異常是不需要再方法中顯示的捕獲或者處理的。

已檢查的異常是被編譯器在編譯時候已經檢查過的異常,這些異常需要在try/catch塊中處理的異常。

6. AOP. Aspects能夠在編譯時,預編譯時以及運行時使用。

1).
編譯時:當你擁有源碼的時候,AOP編譯器(AspectJ編譯器)能夠編譯源碼並生成編織後的class。這些編織進入的額外功能是在編譯時放進去的。

2). 預編譯時:織入過程有時候也叫二進制織入,它是用來織入到哪些已經存在的class文件或者jar中的。

3). 運行時:當被織入的對象已經被載入如jvm中後,可以動態的織入到這些類中一些信息。

7. 繼承:繼承是編譯時執行的,它是靜態的。這個過程編譯後就已經確定

8. 代理(delegate):也稱動態代理,是在運行時執行。

4. java 中的幾種注釋方式

我看動力節點的java基礎大全301集教中的三種注釋方法:

1、單行注釋 //注釋的內容

2、多行注釋/*......*/

3、/**......*/,這種方式和第二種方式相似。這種格式是為了便於javadoc程序自動生成文檔。

下面介紹一下Javadoc的標記:

特別聲明:

(1)javadoc針對public類生成注釋文檔

(2)javadoc只能在public、protected修飾的方法或者屬性之上

(3)javadoc注釋的格式化:前導*號和HTML標簽

(4)javadoc注釋要僅靠在類、屬性、方法之前

下面主要舉例說明第三種注釋的應用:

(1)首先編寫.java文件

(2)在命令行中執行以下dos命令:

javadoc *.java //根據相應的Java源代碼及其說明語句生成HTML文檔

//javadoc標記:是@開頭的,對javadoc而言,特殊的標記。

(3)在當前目錄下就會產生doc文件夾,裡面有一系列的.html文件

附上代碼:

[java]view plain

  • <spanstyle="font-size:18px;">*/

  • /**javadoc注釋的內容

  • */

  • publicclassHello{

  • /**屬性上的注釋*/

  • publicStringname;

  • /**這是main方法,是程序的入口

  • *@paramargs用戶輸入參數

  • */

  • publicstaticvoidmain(String[]args){

  • System.out.println("HelloWorld!");

  • f1();

  • }

  • /**這是第1個方法,其作用是...*/

  • publicstaticvoidf1(){

  • System.out.println("f1()!");

  • }

  • }</span>

  • [java]view plain

  • <spanstyle="font-size:18px;">importjava.io.IOException;

  • /**javadoc注釋內容

  • *@since1.0

  • *@version1.1

  • *@authorBlueJey

  • *<br>鏈接到另一個文檔{@linkHello},就這些

  • *seeHello

  • */

  • publicclassHelloWorld{

  • /**非public,protected屬性上的注釋不生成*/

  • publicStringname;

  • /**這是main方法,是程序的入口

  • *@paramargs用戶輸入的參數,是數組

  • *@throwsIOExceptionmain方法io異常

  • */

  • publicstaticvoidmain(Stringargs[])throwsIOException{

  • System.out.println("helloWorld!");

  • f1();

  • f2(1);

  • }

  • /**這是第一個方法,其作用是....

  • *@deprecated從版本1.2開始,不再建議使用此方法

  • */

  • publicstaticvoidf1(){

  • System.out.println("fl()!");

  • }

  • /**這是第二個方法,其作用是....

  • *@return返回是否OK

  • *@parami輸入參數i

  • *@seeHello

  • *@throwsIOExceptionio異常

  • */

  • publicstaticStringf2(inti)throwsIOException{

  • System.out.println("f1()!");

  • return"OK";

  • }

  • }</span>

  • 注意:

    如果源文件中有用到@version,@author標記,則在執行javadoc命令時,要加-version-author

    javadoc-version-author-ddoc*.java

    (其中用-version用於提取源文件中的版本信息-author用於提取源文件中的作者信息)

5. Java 什麼是註解及註解原理詳細介紹

1、註解是針對Java編譯器的說明。

可以給Java包、類型(類、介面、枚舉)、構造器、方法、域、參數和局部變數進行註解。Java編譯器可以根據指令來解釋註解和放棄註解,或者將註解放到編譯後的生成的class文件中,運行時可用。

2、註解和註解類型

註解類型是一種特殊的介面類型,註解是註解註解類型的一個實例。

註解類型也有名稱和成員,註解中包含的信息採用鍵值對形式,可以有0個或多個。

3、Java中定義的一些註解:

@Override 告訴編譯器這個方法要覆蓋一個超類方法,防止程序員覆蓋出錯。

@Deprecated 這個標識方法或類(介面等類型)過期,警告用戶不建議使用。

@SafeVarargs JDK7新增,避免可變參數在使用泛型化時候警告」執行時期無法具體確認參數類型「,當然,也可以用@SuppressWarnings來避免檢查,顯然後者的抑制的范圍更大。

@SuppressWarnings(value={"unchecked"}) 抑制編譯警告,應用於類型、構造器、方法、域、參數以及局部變數。 value是類型數組,有效取值為:

all, to suppress all warnings

boxing, to suppress warnings relative to boxing/unboxing operations

cast, to suppress warnings relative to cast operations

dep-ann, to suppress warnings relative to deprecated annotation

deprecation, to suppress warnings relative to deprecation

fallthrough, to suppress warnings relative to missing breaks in switch statements

finally, to suppress warnings relative to finally block that don't return

hiding, to suppress warnings relative to locals that hide variable

incomplete-switch, to suppress warnings relative to missing entries in a switch statement (enum case)

javadoc, to suppress warnings relative to javadoc warnings

nls, to suppress warnings relative to non-nls string literals

null, to suppress warnings relative to null analysis

rawtypes, to suppress warnings relative to usage of raw types

restriction, to suppress warnings relative to usage of discouraged or forbidden references

serial, to suppress warnings relative to missing serialVersionUID field for a serializable class

static-access, to suppress warnings relative to incorrect static access

static-method, to suppress warnings relative to methods that could be declared as static

super, to suppress warnings relative to overriding a method without super invocations

synthetic-access, to suppress warnings relative to unoptimized access from inner classes

unchecked, to suppress warnings relative to unchecked operations

unqualified-field-access, to suppress warnings relative to field access unqualified

unused, to suppress warnings relative to unused code and dead code

4、註解的定義

使用 @interface 關鍵字聲明一個註解

public @interface MyAnnotation1

註解中可以定義屬性

String name default 「defval」;

value是註解中的特殊屬性

註解中定義的屬性如果名稱為 value, 此屬性在使用時可以省寫屬性名

例如,聲明一個註解:

@Retention(RetentionPolicy.RUNTIME)

public @interface MyAnno1 {

String msg();

int value();

}

6. java開發中常用的註解有哪些

Java 註解全面解析,學習java做一個java工程師不但待遇高,而且前途無可限量。為什麼這樣說呢?因為java程序語言作為最流行的計算機開發語言之一,幾乎所有的系統、軟體、app、網頁等都是需要用到java的。
1.基本語法
註解定義看起來很像介面的定義。事實上,與其他任何介面一樣,註解也將會編譯成class文件。
@Target(ElementType.Method)
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {}
除了@符號以外,@Test的定義很像一個空的介面。定義註解時,需要一些元註解(meta-annotation),如@Target和@Retention
@Target用來定義註解將應用於什麼地方(如一個方法或者一個域)
@Retention用來定義註解在哪一個級別可用,在源代碼中(source),類文件中(class)或者運行時(runtime)
在註解中,一般都會包含一些元素以表示某些值。當分析處理註解時,程序可以利用這些值。沒有元素的註解稱為標記註解(marker annotation)
四種元註解,元註解專職負責註解其他的註解,所以這四種註解的Target值都是ElementType.ANNOTATION_TYPE
註解 說明
@Target 表示該註解可以用在什麼地方,由ElementType枚舉定義
CONSTRUCTOR:構造器的聲明
FIELD:域聲明(包括enum實例)
LOCAL_VARIABLE:局部變數聲明
METHOD:方法聲明
PACKAGE:包聲明
PARAMETER:參數聲明
TYPE:類、介面(包括註解類型)或enum聲明
ANNOTATION_TYPE:註解聲明(應用於另一個註解上)
TYPE_PARAMETER:類型參數聲明(1.8新加入)
TYPE_USE:類型使用聲明(1.8新加入)
PS:當註解未指定Target值時,此註解可以使用任何元素之上,就是上面的類型
@Retention 表示需要在什麼級別保存該註解信息,由RetentionPolicy枚舉定義
SOURCE:註解將被編譯器丟棄(該類型的註解信息只會保留在源碼里,源碼經過編譯後,註解信息會被丟棄,不會保留在編譯好的class文件里)
CLASS:註解在class文件中可用,但會被VM丟棄(該類型的註解信息會保留在源碼里和class文件里,在執行的時候,不會載入到虛擬機(JVM)中)
RUNTIME:VM將在運行期也保留註解信息,因此可以通過反射機制讀取註解的信息(源碼、class文件和執行的時候都有註解的信息)
PS:當註解未定義Retention值時,默認值是CLASS
@Documented 表示註解會被包含在javaapi文檔中
@Inherited 允許子類繼承父類的註解
2. 註解元素
– 註解元素可用的類型如下:
– 所有基本類型(int,float,boolean,byte,double,char,long,short)
– String
– Class
– enum
– Annotation
– 以上類型的數組
如果使用了其他類型,那編譯器就會報錯。也不允許使用任何包裝類型。註解也可以作為元素的類型,也就是註解可以嵌套。
元素的修飾符,只能用public或default。
– 默認值限制
編譯器對元素的默認值有些過分挑剔。首先,元素不能有不確定的值。也就是說,元素必須要麼具有默認值,要麼在使用註解時提供元素的值。
其次,對於非基本類型的元素,無論是在源代碼中聲明,還是在註解介面中定義默認值,都不能以null作為值。這就是限制,這就造成處理器很難表現一個元素的存在或缺失狀態,因為每個註解的聲明中,所有的元素都存在,並且都具有相應的值。為了繞開這個限制,只能定義一些特殊的值,例如空字元串或負數,表示某個元素不存在。
@Target(ElementType.Method)
@Retention(RetentionPolicy.RUNTIME)
public @interface MockNull {
public int id() default -1;
public String description() default 「」;
}
3. 快捷方式
何為快捷方式呢?先來看下springMVC中的Controller註解
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
String value() default 「」;
}
可以看見Target應用於類、介面、註解和枚舉上,Retention策略為RUNTIME運行時期,有一個String類型的value元素。平常使用的時候基本都是這樣的:
@Controller(「/your/path」)
public class MockController { }
這就是快捷方式,省略了名-值對的這種語法。下面給出詳細解釋:
註解中定義了名為value的元素,並且在應用該註解的時候,如果該元素是唯一需要賦值的一個元素,那麼此時無需使用名-值對的這種語法,而只需在括弧內給出value元素所需的值即可。這可以應用於任何合法類型的元素,當然了,這限制了元素名必須為value。
4. JDK1.8註解增強
TYPE_PARAMETER和TYPE_USE
在JDK1.8中ElementType多了兩個枚舉成員,TYPE_PARAMETER和TYPE_USE,他們都是用來限定哪個類型可以進行註解。舉例來說,如果想要對泛型的類型參數進行註解:
public class AnnotationTypeParameter<@TestTypeParam T> {}
那麼,在定義@TestTypeParam時,必須在@Target設置ElementType.TYPE_PARAMETER,表示這個註解可以用來標注類型參數。例如:
@Target(ElementType.TYPE_PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestTypeParam {}
ElementType.TYPE_USE用於標注各種類型,因此上面的例子也可以將TYPE_PARAMETER改為TYPE_USE,一個註解被設置為TYPE_USE,只要是類型名稱,都可以進行註解。例如有如下註解定義:
@Target(ElementType.TYPE_USE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {}
那麼以下的使用註解都是可以的:
List<@Test Comparable> list1 = new ArrayList<>();
List<? extends Comparable> list2 = new ArrayList<@Test Comparable>();
@Test String text;
text = (@Test String)new Object();
java.util. @Test Scanner console;
console = new java.util.@Test Scanner(System.in);
PS:以上@Test註解都是在類型的右邊,要注意區分1.8之前的枚舉成員,例如:
@Test java.lang.String text;
在上面這個例子中,顯然是在進行text變數標注,所以還使用當前的@Target會編譯錯誤,應該加上ElementType.LOCAL_VARIABLE。
@Repeatable註解
@Repeatable註解是JDK1.8新加入的,從名字意思就可以大概猜出他的意思(可重復的)。可以在同一個位置重復相同的註解。舉例:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Filter {
String [] value();
}
如下進行註解使用:
@Filter({「/admin」,」/main」})
public class MainFilter { }
換一種風格:
@Filter(「/admin」)
@Filter(「/main」)
public class MainFilter {}
在JDK1.8還沒出現之前,沒有辦法到達這種「風格」,使用1.8,可以如下定義@Filter:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Repeatable(Filters.class)
public @interface Filter {
String value();
}
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Filters {
Filter [] value();
}
實際上這是編譯器的優化,使用@Repeatable時告訴編譯器,使用@Filters來作為收集重復註解的容器,而每個@Filter存儲各自指定的字元串值。
JDK1.8在AnnotatedElement介面新增了getDeclaredAnnotationsByType和getAnnotationsByType,在指定@Repeatable的註解時,會尋找重復註解的容器中。相對於,getDeclaredAnnotation和getAnnotation就不會處理@Repeatable註解。舉例如下:
@Filter(「/admin」)
@Filter(「/filter」)
public class FilterClass {
public static void main(String[] args) {
Class<FilterClass> filterClassClass = FilterClass.class;
Filter[] annotationsByType = filterClassClass.getAnnotationsByType(Filter.class);
if (annotationsByType != null) {
for (Filter filter : annotationsByType) {
System.out.println(filter.value());
}
}
System.out.println(filterClassClass.getAnnotation(Filter.class));
}
}
日誌如下:
/admin
/filter
null

望採納!

7. Java class文件反編譯中的注釋有什麼作用

注釋的內容是java位元組碼,注釋掉是為了防止IDE等工具報語法錯誤。
出現這個現象的原因是反編譯失敗了,也就是說反編譯不出該方法的源碼,為了不讓用戶誤認為這是個空方法,直接將位元組碼顯示出來是個好主意,但是直接將位元組碼顯示出來,IDE等工具是會報語法錯誤的,這時候以注釋的形式來表現我覺得是最好的方式。

8. 如何實現自定義Java編譯時註解功能

自定義註解,可以應用到反射中,比如自己寫個小框架。
如實現實體類某些屬性不自動賦值,或者驗證某個對象屬性完整性等
本人自己用過的驗證屬性值完整性:

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface IgnoreProperty {
}
然後實體類中:
public class TarResearch implements Serializable{

@IgnoreProperty
private static final long serialVersionUID = 1L;

@IgnoreProperty
private Integer researchId;

@IgnoreProperty
private TarUser userId;

private String version;

private String grade;
....
}

然後action類中
// 驗證數據完整性

Class<TarResearch > userClass = TarResearch .class;

Field[] field = userClass.getDeclaredFields();

for (int i = 0; i < field.length; i++) {

if (field[i].getAnnotation(IgnoreProperty.class) != null) {

continue;

}

String fie = field[i].getName().substring(0, 1).toUpperCase()

+ field[i].getName().substring(1);

Method method = userClass.getMethod("get" + fie);

Object obj = method.invoke(u);

if (obj == null) {

sendResponseMsg(response, "數據錯誤");

return null;

}

}

9. java中常用註解分別是什麼及漢語意思!

Annotation(註解)是JDK5.0及以後版本引入的。它可以用於創建文檔,跟蹤代碼中的依賴性,甚至執行基本編譯時檢查。注釋是以『@注釋名』在代碼中存在的,根據注釋參數的個數,我們可以將注釋分為:標記注釋、單值注釋、完整注釋三類。它們都不會直接影響到程序的語義,只是作為注釋(標識)存在,我們可以通過反射機制編程實現對這些元數據的訪問。另外,你可以在編譯時選擇代碼里的注釋是否只存在於源代碼級,或者它也能在class文件中出現。

元數據的作用
如果要對於元數據的作用進行分類,目前還沒有明確的定義,不過我們可以根據它所起的作用,大致可分為三類:
編寫文檔:通過代碼里標識的元數據生成文檔。
代碼分析:通過代碼里標識的元數據對代碼進行分析。
編譯檢查:通過代碼里標識的元數據讓編譯器能實現基本的編譯檢查。

基本內置註解

@Override java中覆寫
@Deprecated的作用是對不應該在使用的方法添加註釋,當編程人員使用這些方法時,將會在編譯時顯示提示信息,它與javadoc里的
@deprecated標記有相同的功能,准確的說,它還不如javadoc
@deprecated,因為它不支持參數

@SuppressWarnings,其參數有:
deprecation,使用了過時的類或方法時的警告
unchecked,執行了未檢查的轉換時的警告
fallthrough,當 Switch 程序塊直接通往下一種情況而沒有 Break 時的警告
path,在類路徑、源文件路徑等中有不存在的路徑時的警告
serial,當在可序列化的類上缺少 serialVersionUID 定義時的警告
finally ,任何 finally 子句不能正常完成時的警告
all,關於以上所有情況的警告

自定義注釋
它類似於新創建一個介面類文件,但為了區分,我們需要將它聲明為@interface,如:public @interface NewAnnotation {}............

熱點內容
apachemodpython 發布:2025-02-04 12:33:53 瀏覽:671
linuxphp安裝mysql 發布:2025-02-04 12:32:55 瀏覽:148
小米手機怎麼擴大配置 發布:2025-02-04 12:27:34 瀏覽:980
金x五毒桃花安卓版哪裡有下載 發布:2025-02-04 12:27:29 瀏覽:483
思快四編程 發布:2025-02-04 12:15:35 瀏覽:134
安卓手機哪個日歷好用無廣告 發布:2025-02-04 12:15:32 瀏覽:935
伺服器動態ip啟動程序 發布:2025-02-04 11:58:10 瀏覽:154
怎麼自己開個我的世界伺服器地址 發布:2025-02-04 11:51:44 瀏覽:810
整數是數存儲 發布:2025-02-04 11:39:44 瀏覽:694
12123六位密碼是多少 發布:2025-02-04 11:34:43 瀏覽:798