1. 程式人生 > 實用技巧 >Java反射4

Java反射4

1.執行環境

jdk1.8.0_77 Intellij IDEA2018.3 x64

——————————————————————————————————————————————————————————————————

2.簡介

# 1.tomcat,jdk,mysql,idea,markdown的使用

# 2.xml,使用jsoup來解析xml

# 3.理解反射,並重點講述反射的使用場景,

# 反射是框架的基礎,框架的底層實現很多都是基於反射,反射使得java語言具有動態特性;

# 例如在jdbc中 InputStream is = DBUtils.class.getClassLoader().getResourceAsStream("path"); Class.forName("com.mysql.jdbc.Driver");

# 4.好的學習習慣的養成:總結本,部落格,作息

(對於每一個類在載入時都會有一個唯一的Class物件,Class物件中包含了所有需要動態獲取的類的資訊, 所以Class類是Reflection API 中的核心類 。)

——————————————————————————————————————————————————————————————————

3.獲取Class的方法

getClass

.class

Class.forName();

ClassLoader

——————————————————————————————————————————————————————————————————

4.在JDK中,主要由以下類來實現Java反射機制,這些類都位於java.lang.reflect包中:

Class類:代表一個類。

Field 類:代表類的成員變數(成員變數也稱為類的屬性)。

Method類:代表類的方法。

Modifier類:代表修飾符。

lConstructor 類:代表類的構造方法。

Array類:提供了動態建立陣列,以及訪問陣列的元素的靜態方法。

——————————————————————————————————————————————————————————————————

5.程式碼展示

public static void main(String[] args) {
String s=new String("hello");
//1.getClass()
Class clz=s.getClass();
System.out.println("類名:"+clz.getName());
System.out.println("包名:"+clz.getPackage());
System.out.println("是否為介面:"+clz.isInterface());
System.out.println("是否為陣列:"+clz.isArray());
System.out.println("String類的父類:"+clz.getSuperclass());

//2.Class
Class clz2=s.getClass();
System.out.println("類名:"+clz2.getName());
System.out.println("包名:"+clz2.getPackage());
System.out.println("是否為介面:"+clz2.isInterface());
System.out.println("是否為陣列:"+clz2.isArray());
System.out.println("String類的父類:"+clz2.getSuperclass());

//3.ForName
Class clz3;
try {
clz3=Class.forName("demo1.demo1");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}

//4.int
Class intClz=int.class;

//4.ClassLoader
try {
Class clazz4=ClassLoader.getSystemClassLoader().loadClass("java.lang.String");
System.out.println("clazz4:"+clazz4.getName());

System.out.println(clz==clazz4);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}

===============================================================================================
public static void main(String[] args) {
//1.getClass()
String s = new String("hello");
Class clazz = s.getClass();

//2..class
Class clazz2 = String.class;

//3.Class.forName();
Class clazz3 = null;
try {
clazz3 = Class.forName("java.lang.String");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}

//4.ClassLoder()
Class clazz4 = null;
try {
clazz4 = ClassLoader.getSystemClassLoader().loadClass("java.lang.String");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
System.out.println(clazz == clazz2);
System.out.println(clazz == clazz3);
System.out.println(clazz == clazz4);
System.out.println(clazz3 == clazz4);

//3Class.forName()
Class clzdemo2 = null;
try {
clzdemo2 = Class.forName("demo1.demo2");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}

//4.ClassLoader.
Class clzdemo22 = null;
try {
clzdemo22 = ClassLoader.getSystemClassLoader().loadClass("java.lang.String");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
System.out.println(clzdemo2 == clzdemo22);
System.out.println(clzdemo2.getName());
System.out.println(clzdemo2.getSimpleName());
System.out.println(clazz.getSigners());
}
public String[] test(){
System.out.println("test");
String[] arr={"a","b","c"};
return arr;
}

===========================================================================public static void main(String[] args) {
    student student=new student();
Class clzstu=student.getClass();
Field[] fields=clzstu.getDeclaredFields();
System.out.println(Arrays.toString(fields));
try {
Field field=clzstu.getDeclaredField("name");
System.out.println("field = " + field);
Field[]fields1=clzstu.getDeclaredFields();
System.out.println("fields1 = " + fields1);
System.out.println(Arrays.toString(fields1));
try {
Method method=clzstu.getMethod("test",String.class);
System.out.println("method = " + method);

Method[]method2=clzstu.getMethods();
System.out.println("method2 = " + method2);
System.out.println(Arrays.toString(method2));
System.out.println("=======================================");
Method[]method3=clzstu.getDeclaredMethods();
System.out.println("methods:"+Arrays.toString(method3));

int num=clzstu.getModifiers();
System.out.println("num = " + num);

Constructor constructor=clzstu.getConstructor(String.class);
System.out.println("constructor = " + constructor);

Constructor[] constructors=clzstu.getConstructors();
System.out.println("constructor1 = " + constructors);
System.out.println("=======================================");
System.out.println(Arrays.toString(constructors));

Constructor[] constructors1=clzstu.getDeclaredConstructors();
System.out.println("=======================================");
System.out.println(Arrays.toString(constructors1));

} catch (NoSuchMethodException e) {
e.printStackTrace();
}
} catch (NoSuchFieldException e) {
e.printStackTrace();
}

——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————


5.執行結果

類名:java.lang.String
包名:package java.lang, Java Platform API Specification, version 1.8
是否為介面:false
是否為陣列:false
String類的父類:class java.lang.Object
類名:java.lang.String
包名:package java.lang, Java Platform API Specification, version 1.8
是否為介面:false
是否為陣列:false
String類的父類:class java.lang.Object
clazz4:java.lang.String
true

---------------------------------------------------------------------------------------------------------------------

true
true
true
true
false
demo1.demo2
demo2
null

------------------------------------------------------------------------------------------------------------------

[private java.lang.String demo2.student.name, private int demo2.student.age]
field = private java.lang.String demo2.student.name
fields1 = [Ljava.lang.reflect.Field;@74a14482
[private java.lang.String demo2.student.name, private int demo2.student.age]
method = public void demo2.student.test(java.lang.String)
method2 = [Ljava.lang.reflect.Method;@677327b6
[public java.lang.String demo2.student.toString(), public java.lang.String demo2.student.getName(), public void demo2.student.setName(java.lang.String), public void demo2.student.test(java.lang.String,int), public void demo2.student.test(java.lang.String), public int demo2.student.getAge(), public void demo2.student.setAge(int), public void demo2.student.pipi(), public final void java.lang.Object.wait() throws java.lang.InterruptedException, public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException, public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException, public boolean java.lang.Object.equals(java.lang.Object), public native int java.lang.Object.hashCode(), public final native java.lang.Class java.lang.Object.getClass(), public final native void java.lang.Object.notify(), public final native void java.lang.Object.notifyAll()]
=======================================
methods:[public java.lang.String demo2.student.toString(), public java.lang.String demo2.student.getName(), public void demo2.student.setName(java.lang.String), public void demo2.student.test(java.lang.String,int), public void demo2.student.test(java.lang.String), public int demo2.student.getAge(), public void demo2.student.setAge(int), private void demo2.student.gege(), public void demo2.student.pipi()]
num = 1
constructor1 = [Ljava.lang.reflect.Constructor;@14ae5a5
=======================================
[public demo2.student(), public demo2.student(java.lang.String,int)]
=======================================
[public demo2.student(), public demo2.student(java.lang.String,int)]

6.心得

失敗是什麼?沒有什麼,只是更走近成功一步;成功是什麼?就是走過了所有通向失敗的路,只剩下一條路,那就是成功的路。