国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - 關(guān)于Java反射機(jī)制 你需要知道的事情

關(guān)于Java反射機(jī)制 你需要知道的事情

2021-01-07 11:40方志朋 Java教程

這篇文章主要介紹了Java反射機(jī)制的相關(guān)內(nèi)容,涉及了class類的動(dòng)態(tài)加載,獲取成員變量、構(gòu)造函數(shù)信息等信息,需要的朋友可以參考下。

大家都知道,要讓Java程序能夠運(yùn)行,那么就得讓Java類要被Java虛擬機(jī)加載。Java類如果不被Java虛擬機(jī)加載,是不能正常運(yùn)行的。現(xiàn)在我們運(yùn)行的所有的程序都是在編譯期的時(shí)候就已經(jīng)知道了你所需要的那個(gè)類的已經(jīng)被加載了。

Java的反射機(jī)制是在編譯并不確定是哪個(gè)類被加載了,而是在程序運(yùn)行的時(shí)候才加載、探知、自審。使用在編譯期并不知道的類。這樣的特點(diǎn)就是反射。

反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法;對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)方法和屬性;這種動(dòng)態(tài)獲取的信息以及動(dòng)態(tài)調(diào)用對(duì)象的方法的功能稱為java語言的反射機(jī)制。

本篇將從以下幾個(gè)方面講述反射的知識(shí):

calss的使用 方法的反射 構(gòu)造函數(shù)的反射 成員變量的反射

一、什么是class類

在面向?qū)ο蟮氖澜缋铮f物皆對(duì)象。類是對(duì)象,類是java.lang.Class類的實(shí)例對(duì)象。另外class類只有java虛擬機(jī)才能new出來。任何一個(gè)類都是Class 類的實(shí)例對(duì)象。這實(shí)例對(duì)象有三種表達(dá)方式:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class User{
}
public class ClassTest{
User u=new User();
 //方式1:
 Class c1=User.class;
//方式2:
Class c2=u.getClass();
//方式3:
Class c3=Class.forName("com.forezp.User");
 
//可以通過類的類型創(chuàng)建該類的實(shí)例對(duì)象
User user=(User)c1.newInstance();
}

二、class類的動(dòng)態(tài)加載

Class.forName(類的全稱);該方法不僅表示了類的類型,還代表了動(dòng)態(tài)加載類。編譯時(shí)刻加載類是靜態(tài)加載、運(yùn)行時(shí)刻加載類是動(dòng)態(tài)加載類。

三、獲取方法信息

基本的數(shù)據(jù)類型,void關(guān)鍵字都Class 類的實(shí)例;可以通過get
ame();getSimpleName()獲取類的名稱。

?
1
2
3
4
5
Class c1=String.class;
Class c2=int.class;
Class c3=void.class;
System.out.println(c1.getName());
System.out.println(c2.getSimpleName());

獲取類的所有方法,并打印出來:

?
1
2
3
4
5
6
7
8
9
10
11
public static void printClassInfo(Object object){
  Class c=object.getClass();
  System.out.println("類的名稱:"+c.getName());
  /**
   * 一個(gè)成員方法就是一個(gè)method對(duì)象
   * getMethod()所有的 public方法,包括父類繼承的 public
   * getDeclaredMethods()獲取該類所有的方法,包括private ,但不包括繼承的方法。
   */
  Method[] methods=c.getMethods();//獲取方法
  //獲取所以的方法,包括private ,c.getDeclaredMethods();
  for(int i=0;i<methods.length;i++){ parametertypes="methods[i].getParameterTypes();" pre="" returntype="methods[i].getReturnType();"></methods.length;i++){>
?
1
2
3
4
5
6
public class ReflectTest {
  public static void main(String[] args){
    String s="ss";
    ClassUtil.printClassInfo(s);
  }
}

運(yùn)行:

?
1
2
3
4
5
類的名稱:java.lang.String
booleanequals(java.lang.Object,)
java.lang.StringtoString()
inthashCode()

四、獲取成員變量的信息

也可以獲取類的成員變量信息

?
1
2
3
4
5
6
7
8
9
10
11
12
13
public static void printFiledInfo(Object o){
  Class c=o.getClass();
  /**
  * getFileds()獲取public
  * getDeclaredFields()獲取所有
  */
  Field[] fileds=c.getDeclaredFields();
  for(Field f:fileds){
   //獲取成員變量的類型
   Class filedType=f.getType();
   System.out.println(filedType.getName()+" "+f.getName());
  }
 }
?
1
2
3
4
5
public static void main(String[] args){
    String s="ss";
    //ClassUtil.printClassInfo(s);
    ClassUtil.printFiledInfo(s);
  }

運(yùn)行:

?
1
2
3
4
5
6
7
[C value
int hash
long serialVersionUID
[Ljava.io.ObjectStreamField; serialPersistentFields
java.util.Comparator CASE_INSENSITIVE_ORDER
int HASHING_SEED
int hash32

五、獲取構(gòu)造函數(shù)的信息

?
1
2
3
4
5
6
7
8
9
10
11
12
public static void printConstructInfo(Object o){
  Class c=o.getClass();
  Constructor[] constructors=c.getDeclaredConstructors();
  for (Constructor con:constructors){
   System.out.print(con.getName()+"(");
   Class[] typeParas=con.getParameterTypes();
   for (Class class1:typeParas){
    System.out.print(class1.getName()+" ,");
   }
   System.out.println(")");
  }
 }
?
1
2
3
4
5
6
public static void main(String[] args){
    String s="ss";
    //ClassUtil.printClassInfo(s);
    //ClassUtil.printFiledInfo(s);
    ClassUtil.printConstructInfo(s);
  }

運(yùn)行:

?
1
2
3
4
5
6
7
8
9
10
java.lang.String([B ,)
java.lang.String([B ,int ,int ,)
java.lang.String([B ,java.nio.charset.Charset ,)
java.lang.String([B ,java.lang.String ,)
java.lang.String([B ,int ,int ,java.nio.charset.Charset ,)
java.lang.String(int ,int ,[C ,)
java.lang.String([C ,boolean ,)
java.lang.String(java.lang.StringBuilder ,)
java.lang.String(java.lang.StringBuffer ,)

六、方法反射的操作

獲取一個(gè)方法:需要獲取方法的名稱和方法的參數(shù)才能決定一個(gè)方法。

方法的反射操作:

?
1
method.invoke(對(duì)象,參數(shù)列表);

舉個(gè)例子:

?
1
2
3
4
5
6
7
8
class A{
 public void add(int a,int b){
  System.out.print(a+b);
 }
 public void toUpper(String a){
  System.out.print(a.toUpperCase());
 }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
public static void main(String[] args) {
  A a=new A();
  Class c=a.getClass();
  try {
   Method method=c.getMethod("add",new Class[]{int.class,int.class});
   //也可以 Method method=c.getMethod("add",int.class,int.class);
   //方法的反射操作
   method.invoke(a,10,10);
  }catch (Exception e){
   e.printStackTrace();
  }
 }

運(yùn)行:

?
1
 

本篇文章已經(jīng)講解了java反射的基本用法, 它可以在運(yùn)行時(shí)判斷任意一個(gè)對(duì)象所屬的類;在運(yùn)行時(shí)構(gòu)造任意一個(gè)類的對(duì)象;在運(yùn)行時(shí)判斷任意一個(gè)類所具有的成員變量和方法;在運(yùn)行時(shí)調(diào)用任意一個(gè)對(duì)象的方法;生成動(dòng)態(tài)代理。

以上就是本文關(guān)于Java反射機(jī)制的全部?jī)?nèi)容,希望對(duì)大家有所幫助。

原文鏈接:https://www.2cto.com/kf/201612/578119.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 国产一区二区视频在线 | 国产一区二区在线免费观看 | 麻豆av电影在线观看 | 日本色综合| 午夜资源 | 国产精品亚洲第一区在线暖暖韩国 | 精品无人乱码一区二区三区 | 欧美专区在线观看 | 欧美日韩国产精品一区 | 久久丁香 | 国产精品久久久久久久久久久久久 | 黄桃av| 色九九| 国产成人精品综合 | 精品久久久久久国产 | 亚洲电影在线观看 | 午夜电影 | 在线免费看黄 | 毛片网站大全 | 欧美日韩国产精品一区二区 | 亚洲国产精品99久久久久久久久 | 国产欧美日韩综合精品一区二区 | 在线91网 | 性欧美精品久久久久久久 | 日韩欧美国产精品 | 日韩在线播放一区二区三区 | 欧州一区二区三区 | 四影虎影www4hu23cmo| 北条麻妃在线一区二区 | 欧美黄网站 | 日韩欧美在线视频 | 免费成人在线观看 | 一区亚洲| 不卡一区 | 成人免费高清 | 欧洲精品视频在线观看 | 激情欧美日韩一区二区 | 亚洲成a人片在线 | 日本久久综合 | 国产精品高潮呻吟久久av野狼 | 亚洲成人激情在线观看 |