guyanqing 1 year ago
parent
commit
ca8b436201

+ 27 - 0
src/main/java/com/sf/day23/Person.java

@@ -0,0 +1,27 @@
+package com.sf.day23;
+
+public class Person {
+    private int cardNo;
+
+    public Person() {
+    }
+
+    public Person(int cardNo) {
+        this.cardNo = cardNo;
+    }
+
+    public int getCardNo() {
+        return cardNo;
+    }
+
+    public void setCardNo(int cardNo) {
+        this.cardNo = cardNo;
+    }
+
+    @Override
+    public String toString() {
+        return "Person{" +
+                "cardNo=" + cardNo +
+                '}';
+    }
+}

+ 245 - 0
src/main/java/com/sf/day23/Test01.java

@@ -0,0 +1,245 @@
+package com.sf.day23;
+
+import org.junit.Test;
+import org.omg.IOP.TAG_JAVA_CODEBASE;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.annotation.ElementType;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Arrays;
+import java.util.Properties;
+
+/**
+ * 反射获取class类的四种方法
+ */
+public class Test01 {
+    @Test
+    public void t1() throws ClassNotFoundException {
+       Class clazz =  String.class;
+        /**
+         * 获取user类的class类
+         * class
+         */
+
+        Class<User> userClass = User.class;
+        /**
+         * 方式二
+         * getClass()
+         */
+        User user = new User();
+        Class<? extends User> aClass = user.getClass();
+
+        /**
+         * 方式三
+         * Class.forName();
+         */
+        Class<?> aClass1 = Class.forName("com.sf.day23.User");
+        Class<?> aClass2 = Class.forName("java.lang.String");
+
+
+        /**
+         * 方式四
+         *了解     通过类的加载器进行获取
+         */
+
+        ClassLoader classLoader = this.getClass().getClassLoader();
+        Class<?> aClass3 = classLoader.loadClass("com.sf.day23.User");
+
+        Class c1 = String.class;
+        String obj = new String();
+        Class c2 = obj.getClass();
+        Class c3 = Class.forName("java.lang.String");
+        Class c4 = ClassLoader.getSystemClassLoader().loadClass("java.lang.String");
+
+        System.out.println("c1 = " + c1);
+        System.out.println("c2 = " + c2);
+        System.out.println("c3 = " + c3);
+        System.out.println("c4 = " + c4);
+
+        System.out.println(c1 == c2); //true
+        System.out.println(c1 == c3); //true
+        System.out.println(c1 == c4);  //true
+
+    }
+
+    @Test
+    public void t2(){
+     /**
+      * 所有的java类型都具有Class类
+      */
+     Class<Object> objectClass = Object.class;
+     Class<Comparable> comparableClass = Comparable.class;
+     Class<byte[]> aClass = byte[].class;
+     Class<int[]> aClass1 = int[].class;
+     Class<ElementType> elementTypeClass = ElementType.class;
+     Class<Void> voidClass = void.class;
+     Class<Class> classClass = Class.class;
+     Class<Test> testClass = Test.class;
+     Class<Override> overrideClass = Override.class;
+    }
+
+      @Test
+      public void t3(){
+          int[] a= new int[1];
+          int[] b= new int[10];
+          int[][]  c = new int[1][2];
+       /**
+        * 元素类型和维度相同    所对应的class类就相同
+        */
+     //     System.out.println(a.getClass());
+          System.out.println(a.getClass() == b.getClass());
+       Class<? extends int[]> aClass = a.getClass();
+       Class<? extends int[][]> aClass1 = c.getClass();
+     //  System.out.println();
+      }
+
+ /**
+  * Class类的常用方法
+  */
+
+ @Test
+ public void t4() throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, NoSuchFieldException {
+     Class<?> aClass = Class.forName("com.sf.day23.User");
+     //  object    --- User    获取当前的id
+     Object o = aClass.newInstance();   //创建实例
+     if(o instanceof User){
+         User user= (User) o;
+         Integer id = user.getId();
+     }
+     System.out.println(aClass);
+     System.out.println(o);
+     System.out.println(aClass.getName());
+     System.out.println(aClass.getSuperclass());
+     System.out.println(Arrays.toString(aClass.getInterfaces()));
+     System.out.println(aClass.getClassLoader());
+
+
+     /**
+      * Returns:  the array of Constructor objects representing the public constructors of this class
+      *
+      * Class.getConstructors())   获取当前类的所有 public 构造器
+      */
+     System.out.println(Arrays.toString(aClass.getConstructors()));
+
+     /**
+      * 获取的(public)无参构造器
+      */
+     System.out.println(aClass.getConstructor());
+
+     /**
+      * 获取(public)有参构造器(指定入参的有参构造器)
+      */
+     System.out.println(aClass.getConstructor(Integer.class));
+
+     /**
+      *Returns: the array of Constructor objects representing all the declared constructors of this class
+      * 返回所有声明的构造器
+      */
+     System.out.println(Arrays.toString(aClass.getDeclaredConstructors()));
+     System.out.println(aClass.getDeclaredConstructor());
+     System.out.println(aClass.getDeclaredConstructor(Integer.class));
+
+
+     /**
+      * 获取所有public修饰的属性
+      */
+     System.out.println("=================");
+     System.out.println(aClass.getField("height"));
+     System.out.println(Arrays.toString(aClass.getFields()));
+     /**
+      * 获取所有声明的属性
+      */
+     System.out.println(aClass.getDeclaredField("id"));
+     //获取属性   进行赋值
+     Field field = aClass.getDeclaredField("height");
+     /**
+      * aClass.newInstance()  当前类的实例
+      * 1000      给id这个属性赋的值
+      */
+     Object o1 = aClass.newInstance();
+     field.set(o1,1000.0);
+     System.out.println("==========="+o1);
+     System.out.println(Arrays.toString(aClass.getDeclaredFields()));
+
+     System.out.println("==============");
+     System.out.println(aClass.getMethod("setId",Integer.class));
+     System.out.println(Arrays.toString(aClass.getMethods()));
+     /**
+      * Returns:
+      * the array of Method objects representing all the declared methods of this class
+      */
+     System.out.println(Arrays.toString(aClass.getDeclaredMethods()));
+ }
+
+
+
+ @Test
+ public void t5() throws ClassNotFoundException {
+     //获取默认的系统类的加载器
+     ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
+
+     /**
+      * 查看某个类是哪个类加载器加载的
+      * 是     根加载器加载的    == null
+      */
+     ClassLoader classLoader = Class.forName("java.lang.String").getClassLoader();
+     System.out.println(classLoader);
+
+     /**
+      * classLoader   == null
+      *
+      *                     null.getParent();
+      */
+     ClassLoader parent = classLoader.getParent();
+     System.out.println(parent);
+ }
+
+    /**
+     * 使用ClassLoader获取流
+     */
+
+    @Test
+    public void t6() throws IOException {
+        Properties properties = new Properties();
+        InputStream resourceAsStream = ClassLoader.getSystemClassLoader().getResourceAsStream("db.properties");
+        properties.load(resourceAsStream);
+        String jdbcusername = properties.getProperty("jdbcusername");
+        System.out.println(jdbcusername);
+        String jdbcpassword = properties.getProperty("jdbcpassword");
+        System.out.println(jdbcpassword);
+    }
+
+
+    @Test
+    public void t7() throws InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
+
+        /**
+         * 获取class类的实例
+         * 方式一
+         * newInstance();
+         */
+        Class<User> userClass = User.class;
+        User user = userClass.newInstance();
+
+        /**
+         * 方法二  通过构造器的方式进行获取实例
+         */
+
+        Constructor<User> declaredConstructor = userClass.getDeclaredConstructor(Integer.class,String.class);
+        User user1 = declaredConstructor.newInstance(1001,"admin");
+        System.out.println(user1);
+
+        Constructor<User> declaredConstructor1 = userClass.getDeclaredConstructor(String.class);
+        declaredConstructor1.setAccessible(true);   //取消java语言的检查机制   (强行创建)
+        User user2 = declaredConstructor1.newInstance("admin");
+
+        System.out.println(user2);
+
+        userClass.getModifiers();
+
+
+    }
+}

+ 48 - 0
src/main/java/com/sf/day23/User.java

@@ -0,0 +1,48 @@
+package com.sf.day23;
+
+public class User extends Person{
+    private Integer id;
+    private String name;
+
+    public Double height;
+
+    public User() {
+    }
+
+    private User(String name){
+        this.name = name;
+    }
+
+    public User(Integer id, String name) {
+        this.id = id;
+        this.name = name;
+    }
+    public User(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Override
+    public String toString() {
+        return "User{" +
+                "id=" + id +
+                ", name='" + name + '\'' +
+                ", height=" + height +
+                '}';
+    }
+}

+ 43 - 0
src/main/java/com/sf/uuuuuu/Person.java

@@ -0,0 +1,43 @@
+package com.sf.uuuuuu;
+
+public class Person {
+    private int cardNo;
+
+        public String pName;
+
+    public Person() {
+    }
+
+    private Person(int cardNo) {
+        this.cardNo = cardNo;
+    }
+
+    public Person(int cardNo, String pName) {
+        this.cardNo = cardNo;
+        this.pName = pName;
+    }
+
+    public int getCardNo() {
+        return cardNo;
+    }
+
+    public void setCardNo(int cardNo) {
+        this.cardNo = cardNo;
+    }
+
+    public String getpName() {
+        return pName;
+    }
+
+    public void setpName(String pName) {
+        this.pName = pName;
+    }
+
+    @Override
+    public String toString() {
+        return "Person{" +
+                "cardNo=" + cardNo +
+                ", pName='" + pName + '\'' +
+                '}';
+    }
+}

+ 29 - 0
src/main/java/com/sf/uuuuuu/Test01.java

@@ -0,0 +1,29 @@
+package com.sf.uuuuuu;
+
+import org.junit.Test;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+public class Test01 {
+    @Test
+    public void t1() throws NoSuchFieldException {
+
+
+        /**
+         * getField("pName");   获取属性  包含父类 (public)
+         * getFields():获得某个类的所有的公共(public)的字段,包括父类中的字段。
+         * getDeclaredFields():获得当前类的所有声明的字段,不包含父类  即包括public、private和proteced,
+         *
+         * getConstructors()   获取当前类的构造器(public)
+         * getDeclaredConstructors()   获取当前类的构造器(所有声明的)
+         *
+         * getMethods是获取类中所有公共方法,包括继承自父类的
+         * getDeclaredMethods是获取类中自己声明的方法,即自己声明的任何权限的方法,包括私有方法  不包含父类方法
+         */
+
+
+
+    }
+}

+ 42 - 0
src/main/java/com/sf/uuuuuu/User.java

@@ -0,0 +1,42 @@
+package com.sf.uuuuuu;
+
+public class User extends Person{
+
+    private int id;
+    public String name;
+
+    public User() {
+    }
+    private User(String name) {
+        this.name = name;
+    }
+
+    public User(int id, String name) {
+        this.id = id;
+        this.name = name;
+    }
+
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Override
+    public String toString() {
+        return "User{" +
+                "id=" + id +
+                ", name='" + name + '\'' +
+                '}';
+    }
+}

+ 2 - 0
src/main/resources/ db.properties

@@ -0,0 +1,2 @@
+jdbcusername=root
+jdbcpassword=123456

+ 2 - 0
target/classes/ db.properties

@@ -0,0 +1,2 @@
+jdbcusername=root
+jdbcpassword=123456

BIN
target/classes/com/sf/day23/Person.class


BIN
target/classes/com/sf/day23/Test01.class


BIN
target/classes/com/sf/day23/User.class


BIN
target/classes/com/sf/uuuuuu/Person.class


BIN
target/classes/com/sf/uuuuuu/Test01.class


BIN
target/classes/com/sf/uuuuuu/User.class