Java Web:Java.lang,反射調(diào)用,獲取類(lèi)的對(duì)應(yīng)的Class對(duì)象,屬性,構(gòu)造方法【詩(shī)書(shū)畫(huà)唱】





例子START
反射調(diào)用student中的方法對(duì)象start


import java.lang.reflect.Method;
public class Demo {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
? ? ? ? //反射調(diào)用方法
Class cls = Class.forName("com.SSHC.bean.Student");
//通過(guò)反射創(chuàng)建一個(gè)Student對(duì)象
//Student s = new Student();
Object s = cls.newInstance();//類(lèi)型擦除
//獲取study方法對(duì)象
Method m1 = cls.getDeclaredMethod("study");
//反射調(diào)用
//s.study();
m1.invoke(s);
//獲取buy方法對(duì)象
//s.buy("西游記",88.0);
Method m2 = cls.getDeclaredMethod("buy"
, String.class, Double.class);
m2.invoke(s, "西游記", 88.0);
//獲取exam方法對(duì)象
Method m3 = cls.getDeclaredMethod("exam");
//Integer a = s.exam();
Object a = m3.invoke(s);
System.out.println(a);
//獲取help方法對(duì)象
Method m4 = cls.getDeclaredMethod("help", String.class);
//String str = s.help("紅樓夢(mèng)");
Object str = m4.invoke(s, "紅樓夢(mèng)");
System.out.println(str);
}
}


package com.SSHC.bean;
public class Student {
? ? private String name;
? ? private Integer age;
? ? private String sex;
? ? public Student(){
? ?
? ? }
? ? public Student(String n){
? ? this.name = n;
? ? }
? ? public Student(String n,Integer a){
? ? this.name = n;
? ? this.age = a;
? ? }
? ? //沒(méi)有參數(shù)沒(méi)有返回值的方法
? ? public void study(){
? ? System.out.println("正在學(xué)習(xí)");
? ? }
? ? //有參數(shù)沒(méi)有返回值的方法
? ? public void buy(String bname,Double price){
? ? System.out.println("買(mǎi)了一個(gè)書(shū),書(shū)名是:" + bname);
? ? }
? ? //沒(méi)有參數(shù)有返回值的方法
? ? public Integer exam(){
? ? return 98;
? ? }
? ? //有參數(shù)有返回值的方法
? ? public String help(String name){
? ? return "《" + name + "》";
? ? }
}


反射調(diào)用student中的方法對(duì)象end
輸入一個(gè)類(lèi)名,輸入一個(gè)方法名,反射調(diào)用方法(如eat方法) START

import java.lang.reflect.Method;
public class Tt {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
? ? ? ? //輸入一個(gè)類(lèi)名,輸入一個(gè)方法名,反射調(diào)用方法
String methodName = "eat";
String clsName = "com.SSHC.bean.Dog";
Class cls = Class.forName(clsName);
//創(chuàng)建一個(gè)Student對(duì)象
Object stu = cls.newInstance();
//獲取方法對(duì)象
Method m = cls.getDeclaredMethod(methodName);
m.invoke(stu);
}
}


package com.SSHC.bean;
public class Dog {
? ? public void eat(){
? ? System.out.println("正在吃東西");
? ? }
}


輸入一個(gè)類(lèi)名,輸入一個(gè)方法名,反射調(diào)用方法END
獲取String類(lèi)中的所有的構(gòu)造方法START

package com.SSHC.bean;
public class Student {
? ? private String name;
? ? private Integer age;
? ? private String sex;
? ? public Student(){
? ?
? ? }
? ? public Student(String n){
? ? this.name = n;
? ? }
? ? public Student(String n,Integer a){
? ? this.name = n;
? ? this.age = a;
? ? }
? ? //沒(méi)有參數(shù)沒(méi)有返回值的方法
? ? public void study(){
? ? System.out.println("正在學(xué)習(xí)");
? ? }
? ? //有參數(shù)沒(méi)有返回值的方法
? ? public void buy(String bname,Double price){
? ? System.out.println("買(mǎi)了一個(gè)書(shū),書(shū)名是:" + bname);
? ? }
? ? //沒(méi)有參數(shù)有返回值的方法
? ? public Integer exam(){
? ? return 98;
? ? }
? ? //有參數(shù)有返回值的方法
? ? public String help(String name){
? ? return "《" + name + "》";
? ? }
}


package TEXT;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
? ? ? ? //獲取Student類(lèi)的對(duì)應(yīng)的Class對(duì)象
// Student s = new Student();
// //方法一:
// Class c1 = s.getClass();
// //方法二:
// Class c2 = Student.class;
//方法三:
try {
Class c3 = Class.forName("com.SSHC.bean.Student");
//通過(guò)反射獲取指定類(lèi)的所有屬性Field
Field[]fs = c3.getDeclaredFields();
// for(int i = 0;i < fs.length;i ++) {
// //取出每個(gè)屬性
// Field f = fs[i];
// //獲取每個(gè)屬性的名和類(lèi)型
// String fn = f.getName();
// System.out.println(fn);
// Class ft = f.getType();
// System.out.println(ft.getName());
// }
//java.util.Date類(lèi)有哪些屬性
// Class c = Class.forName("java.util.Date");
// Field[]f1 = c.getDeclaredFields();
// for(int i = 0;i < f1.length;i ++) {
// Field f = f1[i];
// System.out.println(f.getName());
// Class ft = f.getType();
// System.out.println(ft.getName());
// }
//獲取Student類(lèi)中的所有方法Method
// Method[]ms = c3.getDeclaredMethods();
// for(int i = 0;i < ms.length;i ++) {
// //獲取類(lèi)中的每個(gè)方法
// Method m = ms[i];
// //獲取方法名
// String mn = m.getName();
// System.out.println(mn);
// //獲取返回類(lèi)型
// Class mc = m.getReturnType();
// //System.out.println(mc.getName());
// //方法參數(shù)列表的類(lèi)型
// Class[]mps = m.getParameterTypes();
// for(int j = 0;j < mps.length;j ++) {
// //取出每個(gè)方法中的單個(gè)參數(shù)
// Class mpc = mps[j];
// System.out.println("參數(shù)類(lèi)型是:" + mpc.getName());
// }
// }
//獲取Student類(lèi)中所有的構(gòu)造方法Constructor
// Constructor[]cs = c3.getDeclaredConstructors();
// for(int i = 0;i < cs.length;i ++) {
// //獲取每個(gè)構(gòu)造方法
// Constructor ct = cs[i];
// //獲取構(gòu)造方法的參數(shù)類(lèi)型
// Class[]cfs = ct.getParameterTypes();
// System.out.println("第" + i + "個(gè)構(gòu)造方法的參數(shù)列表:");
// for(int j = 0;j < cfs.length;j ++) {
// Class cc = cfs[j];
// System.out.println(cc.getName());
// }
// }
//獲取String類(lèi)中的所有的構(gòu)造方法
Class ck = Class.forName("java.lang.String");
Constructor []cks = ck.getDeclaredConstructors();
for(int i = 0;i < cks.length;i ++) {
Constructor ct = cks[i];
System.out.println("第" + (i + 1) + "個(gè)構(gòu)造方法的參數(shù):");
Class[]cfs = ct.getParameterTypes();
for(int j = 0;j < cfs.length;j ++) {
//取出每個(gè)參數(shù)
Class cfc = cfs[j];
System.out.println(cfc.getName());
}
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}


獲取String類(lèi)中的所有的構(gòu)造方法END
獲取Student類(lèi)中所有的構(gòu)造方法Constructor? ?START
//獲取Student類(lèi)中所有的構(gòu)造方法Constructor
Constructor[]cs = c3.getDeclaredConstructors();
for(int i = 0;i < cs.length;i ++) {
//獲取每個(gè)構(gòu)造方法
Constructor ct = cs[i];
//獲取構(gòu)造方法的參數(shù)類(lèi)型
Class[]cfs = ct.getParameterTypes();
System.out.println("第" + i + "個(gè)構(gòu)造方法的參數(shù)列表:");
for(int j = 0;j < cfs.length;j ++) {
Class cc = cfs[j];
System.out.println(cc.getName());
}
}


獲取Student類(lèi)中所有的構(gòu)造方法Constructor? ?END
獲取Student類(lèi)中的所有方法Method? ?START
//獲取Student類(lèi)中的所有方法Method
Method[]ms = c3.getDeclaredMethods();
for(int i = 0;i < ms.length;i ++) {
//獲取類(lèi)中的每個(gè)方法
Method m = ms[i];
//獲取方法名
String mn = m.getName();
System.out.println(mn);
//獲取返回類(lèi)型
Class mc = m.getReturnType();
//System.out.println(mc.getName());
//方法參數(shù)列表的類(lèi)型
Class[]mps = m.getParameterTypes();
for(int j = 0;j < mps.length;j ++) {
//取出每個(gè)方法中的單個(gè)參數(shù)
Class mpc = mps[j];
System.out.println("參數(shù)類(lèi)型是:" + mpc.getName());
}
}


獲取Student類(lèi)中的所有方法Method? ?END
通過(guò)反射獲取指定類(lèi)的所有屬性Field? ?START
Class c3 = Class.forName("com.SSHC.bean.Student");
//通過(guò)反射獲取指定類(lèi)的所有屬性Field
Field[]fs = c3.getDeclaredFields();
for(int i = 0;i < fs.length;i ++) {
//取出每個(gè)屬性
Field f = fs[i];
//獲取每個(gè)屬性的名和類(lèi)型
String fn = f.getName();
System.out.println(fn);
Class ft = f.getType();
System.out.println(ft.getName());
}


通過(guò)反射獲取指定類(lèi)的所有屬性Field? ?END
java.util.Date類(lèi)有哪些屬性? START
//java.util.Date類(lèi)有哪些屬性
Class c = Class.forName("java.util.Date");
Field[]f1 = c.getDeclaredFields();
for(int i = 0;i < f1.length;i ++) {
Field f = f1[i];
System.out.println(f.getName());
Class ft = f.getType();
System.out.println(ft.getName());
}


java.util.Date類(lèi)有哪些屬性? END
例子END
反射PPT? START




反射PPT? END
Java.lang PPT START


















Java.lang PPT END
講義 START

一、Class類(lèi)
二、反射
小紅,19歲,女
小明,20歲,男
小華,20歲,女
姓名年齡和性別,創(chuàng)建出一個(gè)Student,包含有姓名學(xué)生和年齡
Student,study方法,eat方法,姓名年齡和性別
Cat,play方法,eat方法,毛色品種
Car,run方法,repared方法,品牌價(jià)格顏色
類(lèi)名方法數(shù)組和屬性數(shù)組
創(chuàng)建一個(gè)Class類(lèi),包含類(lèi)名,方法列表和屬性列表,繼承自誰(shuí)
java類(lèi)的使用說(shuō)明書(shū),如果需要了解一個(gè)指定的類(lèi),就需要獲取到指定類(lèi)的使用說(shuō)明書(shū)
如果想了解某一個(gè)類(lèi)包含有哪些方法和屬性以及繼承自誰(shuí),那么就可以直接獲取當(dāng)前這個(gè)類(lèi)對(duì)應(yīng)的Class對(duì)象就可以了
如果需要使用反射技術(shù),就必須要先獲取類(lèi)的Class對(duì)象
為什么不想在程序中使用過(guò)多的import語(yǔ)句?
方法中沒(méi)有包含構(gòu)造方法。