国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網 會員登陸 & 注冊

Java反射,調用方法,配置文件,打印屬性,參數個數,類型名,構造方法【詩書畫唱】

2020-08-28 08:22 作者:詩書畫唱  | 我要投稿


1、創(chuàng)建一個Car類,包含車牌和價格兩個屬性,通過反射打印出這個類中的所有屬性(如name)和屬性類型(如java.lang.String等),里面有一個public void run方法,通過反射調用(即為打?。┻@個run方法。


package Car;




public class Car {


? ? private String name;

?

? ? private Double price;


? ? public Car(){

? ?

? ? }

? ?

? ? public void run(){

? ? System.out.println("正在跑");

? ? }

? ?

}

package Car;


import java.lang.reflect.Constructor;

import java.lang.reflect.Field;

import java.lang.reflect.Method;


public class FanShe {


public static void main(String[] args)? ?throws Exception{


System.out.println("__________\n"

+ "獲取Car類對應的Class實例:");

try {

//下面的類型為Class的c就是打開反射世界的鑰匙:

Class c = Class.forName("Car.Car");




//聲明數組,遍歷數組等步驟獲取Car類的所有成員屬性Field(private的也可以獲取到):

Field[]FieldShuZu = c.getDeclaredFields();

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

//拿出每個成員屬性前要聲明i為下標數組的成員(內容等):

Field f = FieldShuZu[i];

//下面是用getName獲取這個成員屬性的名字:

String n = f.getName();

System.out.println("\n名字是:" + n);

//下面是用getType獲取這個成員屬性的類型:

Class t = f.getType();

System.out.println("類型是:" + t.getName());

}


System.out.println("__________\n"

+ "獲取Car類中的構造方法(特征就是沒有void的)"

+ "(用上Constructor):");

//獲取Car類中的構造方法(Constructor)

Constructor[]cs = c.getDeclaredConstructors();

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

//取出Car類中的每個構造方法:

Constructor con = cs[i];

//獲取構造方法的參數的個數:

int count = con.getParameterCount();

System.out.println("\n其中的一個構造方法的參數的個數是:" + count);

//獲取構造方法的參數的類型(數組),

//類型為Class的數組pt,pt(為getParameterTypes的字母)

Class[]pt = con.getParameterTypes();

for(int j = 0;j < pt.length;j ++) {

//取出當前構造方法中的每個參數

Class t = pt[j];

System.out.println("這個構造方法的參數類型其中一個為:"+t.getName());

}

}

//獲取Car類中的所有的方法(Method)

System.out.println("__________\n"

+ "獲取Car類中的所有的方法(特征就是有void)"

+ "(用上Method):");

Method[]ms = c.getDeclaredMethods();

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

//取出每個方法

Method m = ms[i];

//取出方法名

String methodName = m.getName();

System.out.println("方法名為:"+methodName);

? ?

}


System.out.println("\n"

+ "下面是調用類中的方法,打印有void的方法中的內容:\n");

//通過反射創(chuàng)建Car對象

Object car = c.newInstance();

//通過反射調用方法

//獲取eat方法對象

Method m1 = c.getDeclaredMethod("run");

//反射調用eat方法,方法.對象

m1.invoke(car) ;


} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}


}





2、創(chuàng)建一個Cat類,里面有一個public void cry方法,通過反射調用cry方法。


package fanShe;


import java.util.Date;


public class Cat {


? ? private String name;

? ? private Integer age;

? ?

? ? public Cat(){

? ?

? ? }

? ??

? ? public Cat(String n,Integer a){

? ? this.name = n;

? ? this.age = a;

? ?

? ? }

? ??

? ? public void cry(){

? ? System.out.println("正在叫");

? ? }

? ?

}


package fanShe;


import java.lang.reflect.Constructor;

import java.lang.reflect.Field;

import java.lang.reflect.Method;


public class FanShe {


public static void main(String[] args)? ?throws Exception{



try {


Class c = Class.forName("fanShe.Cat");



System.out.println("\n"

+ "下面是調用類中的方法,打印有void的方法中的內容:\n");


Object Cat = c.newInstance();


Method M = c.getDeclaredMethod("cry");


M.invoke(Cat) ;


} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}


}


3、創(chuàng)建一個Apple類,包含顏色和價格以及類型三個屬性,通過反射打印出所有屬性和屬性類型,里面有一個public void grow方法,通過反射調用grow方法。

package fanShe;


import java.util.Date;


public class Apple {

public String color;

? ? private String type;

? ?

? ? private Double price;

? ?

? ? public Apple(){

? ?

? ? }

? ?

? ? public Apple(String type,Double price){

? ? this.type = type;

? ?

? ? this.price = price;

? ?

? ? }

? ??

? ? public void grow(){

? ? System.out.println("詩書畫唱獨到的種蘋果的方法");

? ? }

? ?

}

package fanShe;


import java.lang.reflect.Constructor;

import java.lang.reflect.Field;

import java.lang.reflect.Method;


public class AppleFanShe {


public static void main(String[] args)? ?throws Exception{



try {


Class c = Class.forName("fanShe.Apple");



Field[]FieldShuZu = c.getDeclaredFields();

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


Field f = FieldShuZu[i];


String shuXing = f.getName();

System.out.println("\n屬性的名字是:" + shuXing);


Class type = f.getType();

System.out.println("屬性的類型是:" + type.getName());

}



System.out.println("\n"

+ "下面是調用類中的方法,打印有void的方法中的內容:\n");


Object Apple = c.newInstance();


Method fangFa = c.getDeclaredMethod("grow");


fangFa.invoke(Apple) ;


} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}


}




4、在控制臺接收一個字符串,這個字符串是一個類的全路徑名,再接收一個方法名,通過反射調用這個類中的這個方法。

效果如下:



請輸入類的全路徑:

net.sf.Person

請輸入方法名:

study

好好學習

package net.sf;


import java.util.Date;


public class Person {

public String name;

? ? private String sshc;

? ?

? ?

? ?

? ? public Person(){

? ?

? ? }

? ?

? ??

? ??

? ? public void study(){

? ? System.out.println("好好學習");

? ? }

? ?

}



package net.sf;


import java.lang.reflect.Constructor;

import java.lang.reflect.Field;

import java.lang.reflect.Method;

import java.util.Scanner;


public class PfanShe {


public static void main(String[] args)? ?throws Exception{



try {

Scanner Sca = new Scanner(System.in);

? ? ? ?

? ? ? ? System.out.println("請輸入類的全路徑:");

? ? ? ? String Src = Sca.next();


Class c = Class.forName(Src);


System.out.println("請輸入方法名:");


String FangFaName = Sca.next();

System.out.println("\n"

+ "下面是調用類中的方法,打印有void的方法中的內容:\n");


Object Person = c.newInstance();


Method fangFa = c.getDeclaredMethod(FangFaName);


fangFa.invoke(Person) ;


} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}


}




5、創(chuàng)建一個properties文件,包含下面的數據:

cls=net.sf.Person

method=study

運行程序后直接執(zhí)行Person類中的study方法。

package net.sf;


import java.util.Date;


public class Person {

public String name;

? ? private String sshc;

? ?

? ?

? ?

? ? public Person(){

? ?

? ? }

? ?

? ??

? ??

? ? public void study(){

? ? System.out.println("好好學習");

? ? }

? ?

}

package net.sf;


import java.io.IOException;

import java.io.InputStream;

import java.lang.reflect.Constructor;

import java.lang.reflect.Field;

import java.lang.reflect.Method;

import java.util.Properties;

import java.util.Scanner;



public class PfanShe {




// private static String Src = null;

// private static String FangFaName = null;


public static void main(String[] args)? ?throws Exception{

Properties prop = new Properties();

? ? //將db.properties文件讀取到內存中去:

? ? InputStream is = PfanShe.class.getClassLoader()

? ? .getResourceAsStream("db.properties");

? ? //加載內容:

? ?

prop.load(is);

//讀取內容:


String Src = prop.getProperty("cls");

String FangFaName = prop.getProperty("method");


// System.out.println(Src+FangFaName);?



// Scanner Sca = new Scanner(System.in);

//? ? ? ?

//? ? ? ? System.out.println("請輸入類的全路徑:");

//? ? ? ? String Src = Sca.next();


Class c = Class.forName(Src);


//System.out.println("請輸入方法名:");

//

//String FangFaName = Sca.next();

// System.out.println("\n"

//+ "下面是調用類中的方法,打印有void的方法中的內容:\n");


Object Person = c.newInstance();


Method fangFa = c.getDeclaredMethod(FangFaName);


fangFa.invoke(Person) ;



}


}



原型例子:

(自己出和寫的題目:)

用反射打印出聲明的類屬性名和屬性的類型名(類可以先寫在同一個界面,也可以分開寫等):




package fanShe;


import java.sql.*;

import java.lang.reflect.Field;


public class Text {

public static void main(String[] args) {

? ? ? ? ? ? try{

? ? ? ? ? ? Class c=Class.forName("fanShe.Student");

? ? ? ? ? ? Field[]fs=c.getDeclaredFields();

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

? ? ? ? ? ? Field f=fs[i];

? ? ? ? ? ? String n=f.getName();

? ? ? ? ? ? System.out.println("\n名字是:"+n);

? ? ? ? ? ? Class t=f.getType();

? ? ? ? ? ? System.out.println("類型是:"+t.getName());

? ? ? ? ? ? }

? ? ? ? ? ? }catch(ClassNotFoundException e){

? ? ? ? ? ?

? ? ? ? ? ? }

}

}

?class Student {

? ? ? ? ? ? ? public Integer id;

? ? ? ? ? ? ? public String? name;

? ? ? ? ? ? ? public Date birth;

? ? ? ? ? ? ? public Cat pet;

}

class Cat{


}



用反射的知識打印出自己聲明為包裝類等類型的變量名(就是屬性名),


和相關的屬性類型的名稱,構造方法名和構造方法的參數和參數類型,參數的個數,方法名等。



package com.sshc;


import java.util.Date;


public class Cat {

public String sshc;

? ? private String name;

? ? private Integer age;

? ? private Double price;

? ? private Date birth;

? ? public Cat(){

? ?

? ? }

? ? public Cat(String n) {

? ? this.name = n;

? ? }

? ? public Cat(String n,Integer a,Double p,Date b){

? ? this.name = n;

? ? this.age = a;

? ? this.price = p;

? ? this.birth = b;

? ? }

? ??

? ? public void eat(){

? ? System.out.println("正在吃東西");

? ? }

? ? public void play(){

? ? System.out.println("正在玩耍");

? ? }

}



package sshc;


import java.lang.reflect.Constructor;

import java.lang.reflect.Field;

import java.lang.reflect.Method;


public class Test {


public static void main(String[] args) {

// ————

? ? ? ? //下面Date的Class實例(共三種獲得Date的內容的方法):

// ————

//方法一:直接通過類名.class

// Class c1 = Date.class;

// ————

//方法二:創(chuàng)建一個Date對象,然后通過對象.getClass()方法

//Date now = new Date();

//Class c2 = now.getClass();

//類的全路徑:包名+.+類名

// ————

//方法三:Class.forName(類的全路徑)

// try {

// //使用反射技術的核心代碼

// Class c3 = Class.forName("java.util.Date");

// } catch (ClassNotFoundException e) {

// // TODO Auto-generated catch block

// e.printStackTrace();

// }

// ————

//下面是獲取Cat類對應的Class實例:

System.out.println("__________\n"

+ "獲取Cat類對應的Class實例:");

try {

//下面的類型為Class的c就是打開反射世界的鑰匙:

Class c = Class.forName("com.sshc.Cat");

//聲明數組,遍歷數組等步驟獲取Cat類的所有成員屬性Field(private的也可以獲取到):

Field[]FieldShuZu = c.getDeclaredFields();

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

//拿出每個成員屬性前要聲明i為下標數組的成員(內容等):

Field f = FieldShuZu[i];

//下面是用getName獲取這個成員屬性的名字:

String n = f.getName();

System.out.println("\n名字是:" + n);

//下面是用getType獲取這個成員屬性的類型:

Class t = f.getType();

System.out.println("類型是:" + t.getName());

}


System.out.println("__________\n"

+ "獲取Cat類中的構造方法(特征就是沒有void的)"

+ "(用上Constructor):");

//獲取Cat類中的構造方法(Constructor)

Constructor[]cs = c.getDeclaredConstructors();

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

//取出Cat類中的每個構造方法:

Constructor con = cs[i];

//獲取構造方法的參數的個數:

int count = con.getParameterCount();

System.out.println("\n其中的一個構造方法的參數的個數是:" + count);

//獲取構造方法的參數的類型(數組),

//類型為Class的數組pt,pt(為getParameterTypes的字母)

Class[]pt = con.getParameterTypes();

for(int j = 0;j < pt.length;j ++) {

//取出當前構造方法中的每個參數

Class t = pt[j];

System.out.println("這個構造方法的參數類型其中一個為:"+t.getName());

}

}

//獲取Cat類中的所有的方法(Method)

System.out.println("__________\n"

+ "獲取Cat類中的所有的方法(特征就是有void)"

+ "(用上Method):");

Method[]ms = c.getDeclaredMethods();

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

//取出每個方法

Method m = ms[i];

//取出方法名

String methodName = m.getName();

System.out.println("方法名為:"+methodName);

}

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}


}



Java反射,調用方法,配置文件,打印屬性,參數個數,類型名,構造方法【詩書畫唱】的評論 (共 條)

分享到微博請遵守國家法律
苏尼特左旗| 江口县| 东阿县| 漳州市| 博白县| 什邡市| 怀集县| 花垣县| 临朐县| 铁岭县| 威宁| 名山县| 桃源县| 莲花县| 南靖县| 谢通门县| 马边| 嵩明县| 鄂州市| 静乐县| 武功县| 宁远县| 徐州市| 和田市| 桐柏县| 宁武县| 休宁县| 合作市| 全南县| 谢通门县| 左权县| 绥阳县| 通化市| 合山市| 突泉县| 冷水江市| 萨嘎县| 乌拉特中旗| 汝阳县| 黔西县| 准格尔旗|