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.心得
失败是什么?没有什么,只是更走近成功一步;成功是什么?就是走过了所有通向失败的路,只剩下一条路,那就是成功的路。
原文:https://www.cnblogs.com/nanren/p/13555624.html