當前位置:首頁 » 編程軟體 » 註解編譯器

註解編譯器

發布時間: 2022-08-10 03:47:08

c語言的注釋中存在錯誤會被編譯器檢查出來

不會。
所謂注釋,便是用自然語言對源代碼中某些語句或方法進行說明。並且注釋的內容不會被編譯器編譯。可以在源代碼中添加任何想要添加的說明。
注釋可以出現在代碼中的任何位置,用來向用戶提示或解釋代碼的含義。程序編譯時,會忽略注釋,不做任何處理,就好像它不存在一樣。

② 為什麼java里的注釋不起作用呢

不是注釋,是註解,
注釋是你自己用//標識的,編譯的時候不轉化為位元組碼文件,對編譯器來講,注釋沒有實際意義。
annotations為註解,是編譯器可以理解的部分,對編譯有實際意義,就像重寫@override或者對應資料庫里的主鍵@id都是有代碼意義的,如果你沒有對方法構成重寫或者對應的不是主鍵的話,編譯器會知道並報錯。注釋的話你怎麼寫都無所謂的。
簡單的說
注釋是給人看的,annotations註解是給機器看的

③ 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):也稱動態代理,是在運行時執行。

④ 註解的類型;編譯時註解和運行時註解的區別

註解在何種時刻可獲取由Retention註解決定RetentionPolicy.RUNTIME表示在運行時可見,它將被寫入class文件的VisibleAnnotation屬性中CLASS表示寫入class文件但不會在運行時獲取,它們被寫入位元組碼的InvisibleAnnotation屬性中。這些通常是為了方便ide或者工具開發者的。當然,通過一些位元組碼庫,應用程序員無需了解位元組碼結構一樣可以獲取它們。剩下一個表示只在編譯期可見,不會被寫入class文件。它們用於指示編譯器行為,例如檢查重載,設置過時,抑制警告等。這類註解是給編譯器開發者准備的。題主說的 運行時也能獲取到,我猜是指Class.forName("java.lang.Override")吧?類型肯定可以取得,不然也就談不上書寫這些註解了。但是method.isAnnotationPresent(Override.class)肯定會返回false。Override註解甚至不會被編譯到位元組碼中。

⑤ 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 [email protected] 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

望採納!

⑥ 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();

}

⑦ java中注釋和註解於什麼區別啊

首先來說注釋有三種:// /* */ /** */ 前兩種編譯器直接跳過,從來不閱讀,第三種編譯器是可以看懂的,當你使用javadoc這樣的命令時會用到,用來生成API時用的。

註解:這東東完全就是給編譯器看的。 比如@Ovrride表示這個方法是重寫了父類中的方法,而不是自定義的,所以這個時候編譯器會去檢查你的方法名是否和父類一樣,是否寫錯了。

起初,註解是比較簡單的,後來註解裡面可以加入變數和參數,以節省代碼(這些代碼都是大家共同認可的,用一個公式給代替了)

註解是對計算機的說明,也可以不用註解,自己寫代碼告訴計算機編譯器。 註解其實就是代碼,只是看起來和我們自己寫的有點不一樣而已。也是代碼的一部分,學習Hibernate和Spring等的時候會大量用到註解,用來節省大量代碼。

⑧ Annotation 註解開發介紹優勢 與好處java為什麼採用註解開發

簡單的舉例一下,
Annotation的作用:
編寫文檔
代碼分析
編譯檢查。
如使用註解注入bean,好處是
1,使用時,不再以平常的new 構造器來創建類的一個實例,丟棄了右邊的new 。。。,只有左邊的bean聲明 ,並在聲明上方添加@resource(name=「。。。。」)注入。只要在編寫程序時添加一些要用到註解,以及註解的說明,就可以生成相應的javaDoc文檔,以便開發人員快速了解程序的整體輪廓。這是不用註解難以做到的
2.java虛擬機可以識別註解,通過註解告訴虛擬機要實現的功能,修正一些編譯期人為的錯誤,如我們要重寫toString,但是卻寫成tostring,如果沒有註解,編譯器就不會作編譯時檢查,就把這個tostring當初普通的方法,不會報錯。
3.使用主流框架開發時,通常會在xml文件配置bean等的注入類型,而xml文件開啟註解支持後自動配置,不需要人工配置,減少開發時間,提高開發效率
等。。。。

⑨ 註解有什麼作用,什麼時候用註解。Java中怎麼樣實現註解的構造函數

注釋起到解釋說明的作用 如果你有幾萬行代碼 你寫完後一個月後 你再看的話,或者你看別人的程序的話, 如果沒有注釋 有些地方你也不知道什麼意思。
構造函數 就是 你寫完一個java類文件 在類文件中 寫一個函數 函數名同方法名沒有返回值 供初始化類的對象用的,默認有個無參的構造函數

⑩ 簡述註解是什麼

定義不同:
註解:英名為Annotation,它是JDK5.0及以後版本引入的一個特性。 與類、介面、枚舉是在同一個層次,可以成為java 的一個類型。用一個詞描述註解------元數據,它是一種描述數據的數據。所以,可以說註解就是源代碼的元數據。
注釋:是對源代碼作介紹、評議或說明的文字。
作用不同:
註解是Java 編譯器可以理解的部分,是給編譯器看的。通過標記包、類、欄位、方法、局部變數、方法參數等元素據,告訴jvm這些元素據的信息。
注釋是程序員對源代碼做一些記憶或提示性描述,是給人來看的。它能告訴開發者這段代碼的邏輯、說明、特點等內容,對代碼起到解釋、說明的作用。

熱點內容
如何寫代碼使安卓應用自動簽到 發布:2022-09-27 16:28:09 瀏覽:364
小學生演算法 發布:2022-09-27 16:23:43 瀏覽:515
不設開機密碼如何設置 發布:2022-09-27 16:23:36 瀏覽:788
解壓磁鐵瓶 發布:2022-09-27 16:22:19 瀏覽:652
筆記本linux推薦 發布:2022-09-27 16:22:14 瀏覽:717
壓縮素材 發布:2022-09-27 16:22:13 瀏覽:760
幽冥ftp 發布:2022-09-27 16:22:04 瀏覽:94
pythonstrformat 發布:2022-09-27 16:17:31 瀏覽:356
資料庫rba 發布:2022-09-27 16:16:46 瀏覽:700
android布局的標簽 發布:2022-09-27 16:16:46 瀏覽:76