本文目錄一覽:
java反射機制詳解
反射就是把Java的各種成分映射成相應的Java類。
Class類的構造方法是private,由JVM創建。
反射是java語言的一個特性,它允程序在運行時(注意不是編譯的時候)來進行自我檢查並且對內部的成員進行操作。例如它允許一個java的類獲取他所有的成員變量和方法並且顯示出來。Java 的這一能力在實際應用中也許用得不是很多,但是在其它的程序設計語言中根本就不存在這一特性。例如,Pascal、C 或者 C++ 中就沒有辦法在程序中獲得函數定義相關的信息。(來自Sun)
JavaBean 是 reflection 的實際應用之一,它能讓一些工具可視化的操作軟件組件。這些工具通過 reflection 動態的載入並取得 Java 組件(類) 的屬性。
反射是從1.2就有的,後面的三大框架都會用到反射機制,涉及到類”Class”,無法直接new CLass(),其對象是內存里的一份位元組碼.
Class 類的實例表示正在運行的 Java 應用程序中的類和接口。枚舉是一種類,注釋是一種接口。每個數組屬於被映射為 Class 對象的一個類,所有具有相同元素類型和維數的數組都共享該 Class 對象。
基本的 Java類型(boolean、byte、char、short、int、long、float 和 double)和關鍵字 void 也表示為 Class 對象。Class 沒有公共構造方法。
Class 對象是在加載類時由 Java 虛擬機以及通過調用類加載器中的 defineClass 方法自動構造的。
Person p1 = new Person();
//下面的這三種方式都可以得到位元組碼
CLass c1 = Date.class();
p1.getClass();
//若存在則加載,否則新建,往往使用第三種,類的名字在寫源程序時不需要知道,到運行時再傳遞過來
Class.forName(“java.lang.String”);
Class.forName()位元組碼已經加載到java虛擬機中,去得到位元組碼;java虛擬機中還沒有生成位元組碼 用類加載器進行加載,加載的位元組碼緩衝到虛擬機中。
另外,大家可以關注微信公眾號Java技術棧回復:JVM,獲取我整理的系列JVM教程,都是乾貨。
考慮下面這個簡單的例子,讓我們看看 reflection 是如何工作的。
import java.lang.reflect.*;
public class DumpMethods {
public static void main(String args[]) {
try {
Class c = Class.forName(“java.util.Stack”);
Method m[] = c.getDeclaredMethods();
for (int i = 0; i m.length; i++)
System.out.println(m[i].toString());
}
catch (Throwable e){
System.err.println(e);
}
}
}
public synchronized java.lang.Object java.util.Stack.pop()
public java.lang.Object java.util.Stack.push(java.lang.Object)
public boolean java.util.Stack.empty()
public synchronized java.lang.Object java.util.Stack.peek()
public synchronized int java.util.Stack.search(java.lang.Object)
這樣就列出了java.util.Stack 類的各方法名以及它們的限制符和返回類型。這個程序使用 Class.forName 載入指定的類,然後調用 getDeclaredMethods 來獲取這個類中定義了的方法列表。java.lang.reflect.Methods 是用來描述某個類中單個方法的一個類。
以下示例使用 Class 對象來顯示對象的類名:
void printClassName(Object obj) {
System.out.println(“The class of ” + obj +
” is ” + obj.getClass().getName());
}
還可以使用一個類字面值(JLS Section 15.8.2)來獲取指定類型(或 void)的 Class 對象。例如:
System.out.println(“The name of class Foo is: “+Foo.class.getName());
在沒有對象實例的時候,主要有兩種辦法。
//獲得類類型的兩種方式
Class cls1 = Role.class;
Class cls2 = Class.forName(“yui.Role”);
注意第二種方式中,forName中的參數一定是完整的類名(包名+類名),並且這個方法需要捕獲異常。現在得到cls1就可以創建一個Role類的實例了,利用Class的newInstance方法相當於調用類的默認的構造器。
Object o = cls1.newInstance();
//創建一個實例
//Object o1 = new Role(); //與上面的方法等價
學習Java具體都要學什麼內容?
目前java學習除了在高校的專業中學習,還有自學和報班學習兩種途徑,根據每個人的情況最合適的學習方式是不同的。學習java只要掌握好方式和方法,其實學起來並不是非常難。
java學的內容主要有:
①JAVA編程基礎(基礎語法、面向對象、和諧特性等)
②WEB應用開發(靜態網頁製作、Oracle數據庫、Java Web開發技術、Linux技術、網站性能與安全、軟件工程開發流程、Java Web和諧等)
③企業級框架開發(數據結構與算法、SSH框架、JavaEE和諧等)
④項目實訓
你可以考察對比一下開設有IT專業的熱門學校,好的學校擁有根據當下大型企業需求自主研發課程的能力,建議實地考察對比一下。祝你學有所成,望採納。
昆明Java培訓:詳解Java和C語言的區別在哪裡?
1Java與C語言各自的優勢C語言是面向過程的語言,執行效率高;Java是面向對象的語言,執行效率比C語言低。
C語言最關鍵的是比Java多了指針,這也說明了Java的健壯性,還有Java的多線程機制使程序可以並行運行,Java程序多用於網絡。
C語言的安全性不如Java,C語言沒有Java的垃圾回收機制,申請的空間要手動釋放。
Java的通用性好,可以跨平台直接移植,只要有安裝Java虛擬機(JVM)就可以了。
2Java和C語言誰的通用性會比較好在速度上,C語言編寫的程序要優於Java,因為Java必須運行在虛擬機的環境中,但是因為虛擬機,Java獲得的平台無關性,而C語言的程序有可能需要重新修改編譯才能實現平台的移植,另一方面,C語言比Java語言更「底層」,因此可以用C編寫例如硬件的驅動,而Java卻不行。
Java和C語言還有個明顯的不同就是C語言注重的是算法,但是Java卻不一樣,想用的時候導包就可以了。
C語言的算法很重要,但是Java中的算法沒有C語言那麼複雜。
打印的方法:C語言是printf(“??.”);而Java是System.out.print(“??.”),也可以用println,ln表示換行。
Java程序中的基本數據類型(boolean,char,byte,short,int,long,float,double),是對對象的引用;C語言也有許多種基本類型,還有struct,union,enum,數組和指針。
在Java沒有枚舉、聯合類型。
Java採用Unicode字符集,C語言通常採用的是ASCII字符集,A—65,a—97。
C語言的變量可以不進行初始化,但Java的變量要進行初始化。
在C語言中,char類型佔一個位元組,在Java中char類型佔2個位元組。
3Java和C語言各自的特徵Java面向對象的特徵主要有封裝,繼承,多態。
類的繼承關係是單一的、非多重的,一個子類只有一個父類,子類的父類又只有一個父類。
C語言支持「運算符的重載」,這是它的一個很重要的多態特徵,是數據抽象和泛型編程的利器。
它允許直接對對象進行四則運算,正像基本數據類型那樣Java不支持這種多態機制,也是為降低複雜性。
Java可以支持方法重載和重寫,所謂重載就是一個類具備多個相同屬性行為;重寫就是在繼承關係中父類的行為在不同的子類上有不同的實現。
在Java中比C語言多了一些修飾符,如訪問修飾符Public(公共的)、Private(私有的)、Protected(受保護的)、默認。
Java有super關鍵字,指代父類對象,通常被用於調用父類的構造方法或一般方法C語言則沒有super關鍵字,兩者都有this,指代當前對象。
在Java中,除了static、final、private是靜態綁定以外,所有方法一律按動態綁定處理。
Java中可以將類組織起來用Package打包,而C語言沒有。
Java的來源是什麼?
1.Java名字的由來,實際上是一個有趣的故事;
2.我們所見到的Java標誌,總是一杯熱咖啡,這杯熱咖啡你很難與計算機編程聯想到一起。這杯熱咖啡、Java這個名字的由來,是Java創始人員團隊中其中一名成員由於靈感想到的;
3.想起自己在Java島(爪哇島)上曾喝過一種美味的咖啡,於是這種計算機編程語言就命名為Java,與此同時它的標起來是我們最熟悉不過的一杯熱咖啡。
延展閱讀
Java的特點:
1.java的風格類似C++,從某種意義上講,java是C++的一個變種;
2.java摒棄了C、C++中的容易引發錯誤和難以理解的指針,結構,以及內存管理等;
3.java提供了豐富的類庫,很方便開發程序;
4.java是完全面向對象的語言,支持 繼承,重載,多態等面向對象的特性;
5.C++是面向對象和面向過程的混合語言, C是純面向過程的語言;
6.java是一種強類型的語言,比C/C++檢查還要嚴格,java區分大小寫字母;
7.java提供了自動垃圾回收機制gc,有效避免了C、C++的內存泄漏問題;
8.java禁止非法訪問內存,因為java沒有指針,內存的申請和釋放;
9.跨平台,java的源代碼編譯成結構中立的中間格式,這種格式與機器無關,只要在安裝有JVM(java虛擬機)的電腦上,都能運行這種與機器無關的中間文件;java一次編譯,到處運行;
10.對於不同的操作系統,會有不同的java虛擬機,這也就決定了java的可移植性;
11.java支持多線程,簡單理解,如果是單核CPU,那麼會通過時間片輪轉的方式,多線程執行程序,如果是多核CPU,那麼就可以理解為,兩個或多個線程同時運行。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/239756.html