1. 程式人生 > >反射(二)Class類,Method類,Field類,反射獲得帶引數的物件

反射(二)Class類,Method類,Field類,反射獲得帶引數的物件

package com.ygl.reflect;


import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;


public class ReflectTest {
public Object  copy(Object  object) throws IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException{
//使用物件的getClass()方法,前提先有物件例項
Class<?> clazz=object.getClass();
System.out.println(clazz.getName());//com.ygl.reflect.Customer
try {
/*//無參的構造器
Constructor  cons=clazz.getConstructor(new Class[]{});
//無參的例項
Object obj=cons.newInstance(new Object[]{});
System.out.println(obj);
//上面兩個方法等價於
Object obj2=clazz.newInstance();//只能構造無參的物件
*/

Constructor  cons=clazz.getConstructor(new Class[]{String.class,int.class});
Object obj=cons.newInstance(new Object[]{"ygl",25});
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


return object;

}


public static void main(String[] args) {
ReflectTest  reflectTest=new ReflectTest();
try {
reflectTest.copy(new Customer());
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println();
}
}




class Customer{
private Long id;
private String name;
private int age;

public Customer() {

}

public Customer(String name,int age) {
this.name=name;
this.age=age;
}


public Long getId() {
return id;
}


public void setId(Long id) {
this.id = id;
}


public String getName() {
return name;
}


public void setName(String name) {
this.name = name;
}


public int getAge() {
return age;
}


public void setAge(int age) {
this.age = age;
}
}

相關推薦

反射Class,Method,Field反射獲得引數物件

package com.ygl.reflect; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; public class ReflectTe

載入機制與反射

import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.lang.reflect.Method; import java.util.HashMa

蘋果新的編程語言 Swift 語言進階--基本數據

保持 popu 多條語句 常量 num access 對象 程序 進制 一 、 常量和變量 Swift語言 對常量和變量的聲明進行了明白的區分 Swift語言的常量類型比C 語言的co

J2SE核心開發實戰——字符串與包裝

刪除 i++ cnblogs amp 分支語句 核心 最大 用途 else 字符串與包裝類 一、實驗簡單介紹 在本章。我們將學習一些用於處理字符串的API以及包裝類的相關知識。 本章知識點 字符串API 包裝類及其應用 二、認識字符

學習之路淺談:bash及其特性命令歷史以及用戶管理及權限shell的

bash 管理權限 過了一周了,進度似乎有點懈怠,不過過了周末重整旗鼓啦shell(外殼)GUI:Gnome,KDE,xfceCLI:sh,csh,ksh,bashbash(父進程)-----bash(子進程)他們相互獨立彼此不知命令歷史:historybash支持的引號:‘ ’命令替換(鍵盤~的按鍵

java 反射 反射Class常見的方法和屬性

package com.reflect; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * 反射中Class常見的方法和屬

Java原始碼分析——java.util工具包解析——HashSet、TreeSet、LinkedHashSet解析

    Set,即集合,與數學上的定義一樣,集合具有三個特點: 無序性:一個集合中,每個元素的地位都是相同的,元素之間是無序的。 互異性:一個集合中,任何兩個元素都認為是不相同的,即每個元素只能出現一次。 確定性:給定一個集

《資料結構與演算法 python語言描述》學習筆記————抽象資料型別和Python

第一部分:學習內容概要 抽象資料型別 Python的類 第二部分:學習筆記 抽象資料型別   1.抽象資料型別(Abstract Data Type,ADT),通過一套介面闡述說明這一程式部分的可用功能,但不不限制功能的實現方法。      2.抽象資料型

Composer筆記:建立自己的PHP

一、在建立類庫之前,你必須有一個github的賬號,作為程式碼託管,github是非常好的一個選擇 >github主頁:https://github.com 二、在windows下載並安裝gi

實現Action——Action介面和ActionSupport基

本文摘自:李剛 著 《輕量級 Java EE企業應用實戰 Struts2+Spring+hibernate整合開發》 續 實現Action(一)         為了讓使用者開發的Action類更加規範,Struts2提供了一個Action介面,這個介面定義了Strut

學習php反射2——不用new方法例項化

上一篇簡單介紹了 php 反射的幾個常見類的使用方法,但是用反射能做些什麼,你可能還是想象不到, 下面我稍微應用反射類來做點東西,大家知道例項化一個類需要用new 關鍵字,不用 new 可以嗎?答案是可以的,用反射就能實現: 首先建立一個檔案 student.php

閱讀《C++Primer》的個人記錄——2.1基本內置型-關於浮點數、補碼

一個數 過程 取反 反碼 結果 直接 深入 相關 完美解決 學習第二章基本內置類型的過程中,對於書上描寫的單精度浮點數和雙精度浮點數的相關內容和補碼的作用原理沒弄清楚,經過查閱相關資料,整理如下: 現從簡單的補碼說起,原碼:正數的原碼就是它的本身,負數用最高位是1表示負數

ES6學習筆記:教你玩轉的繼承和物件

繼承 程式中的繼承: 子類可以繼承父類的一些屬性和方法 class Father { //父類 constructor () { } money () { console.log(100) } } class Son extends Father { //子類繼承父類 } l

C++實現反射

找了一些資料,參考了 C++反射——開源中國 這篇,做了一些修改和簡化,成為了 Version3. 思路其實並不複雜,可以進行反推: 1. 反射是根據類名動態生成類,如果我們有一個全域性的對映關係,可以從類名得到類的相關資訊 ClassInfo,包括類的建構函式,那麼我們便能實現這

反射:annotation理解

1.通過getAnnotation獲取所有的執行時註解 @Deprecated @SuppressWarnings("student") class Student implements Serializable { } Class<?> s

IO多路複用 -- select、poll、epoll實現TCP反射程式

接著上文IO多路複用(一)-- Select、Poll、Epoll,接下來將演示一個TCP回射程式,原始碼來自於該博文https://www.cnblogs.com/Anker...,在這裡將其進行了整合,突出select、poll和epoll不同方法之間的比較,但

詳解C#特性和反射

  使用反射(Reflection)使得程式在執行過程中可以動態的獲取物件或型別的型別資訊,然後呼叫該型別的方法和建構函式,或訪問和修改該型別的欄位和屬性;可以通過晚期繫結技術動態的建立型別的例項;可以獲取程式集中的所有型別資訊;可以在動態構建新型別;還可以檢索元素所新增的特性;  ※反射相關的類基本都位於名

Java反射——Class物件

1 Class物件 Java的反射機制離不開一個被稱為Class物件的特殊物件,它包含了與類有關的資訊。 為什麼說離不開Class物件呢? 因為Java反射機制就是: 在執行狀態中,對任意一個實體類,都能夠知道這個類的所有屬性和方法;對任意一個物件,都能夠呼叫

C++反射機制:可變引數模板實現C++反射

### 1. 概要   2018年Bwar釋出了[《C++反射機制:可變引數模板實現C++反射》](https://www.cnblogs.com/bwar/p/9304261.html),文章非常實用,Bwar也見過好幾個看了那篇文章後以同樣方法實現反射的專案,也見過不少從我的文章抄過去連程式碼風格類名函式

Python地理位置信息庫geopy的使用:根據中心點坐標方向距離計算坐標

block 我們 code ram des int pri 經緯 kilo 上一篇文章我們介紹了geopy的基本使用,這一篇文章我們根據中心點坐標,方向,距中心點距離計算出對應的坐標點,這種用法官網並沒有給出詳細的文檔,我們這裏做一下說明 生成坐標點的具體方法 impor