2021年9月11日

今天的内容

1.反射

2.线程

3.BaseDao

1.反射

1.1理解Class类

对象照镜子以后可以得到的信息:某个类数据的成员属性,方法,构造方法,实现了哪些接口。对于每一个类而言,JRE都活会保留为其保留一个不变的Class类对象。(字节码文件)。一个Class对象特定的一个类的信息

Class 对象只能是系统来建立对象。

每个类的实例都会记得自己是由哪个Class对象生成的。

Class是什么?

Class是一个类,java封装好的

class 是一个类修饰。 仅仅是一个修饰符

Class这个类封装了什么信息?

Class这个类,封装了当前对象所对应的类的信息(属性,方法,构造等)

一个类中有属性,方法,构造器等,比如一个Person,Book,Dog。这些都是不同的类,需要一个类来描述这些类?怎么办?可以Class类就是描述类的。Class就是用来描述类的类

Class类是一个对象照镜子的结果,对象可以看到自己属性,方法,构造方法等。

一个类(Dog, Person, Book)在JVM中只会有一个Class实例

我想要把Class类搞出来,第一步要干嘛?

首先要写一个类(Dog, Person,Book)

通过Class来获取这些类的信息。你照镜子,先有你。空气照镜子,别扯犊子

类写好以后就可以通过这个类获取Class类

package com.qfedu.a_reflect;


public class Person {
   String name;
   private int age;

   public Person() {
  }

   public Person(String name, int age) {
       this.name = name;
       this.age = age;
  }

   public String getName() {
       return name;
  }

   public void setName(String name) {
       this.name = name;
  }

   public int getAge() {
       return age;
  }

   public void setAge(int age) {
       this.age = age;
  }

}
package com.qfedu.a_reflect;

import org.junit.Test;

import java.lang.reflect.Field;

public class Demo1 {
   @Test
   public void testClass() {
       //1.得到Class对象
       //personClass这个使用来描述Peron这个类的所有信息的
       Class personClass = Person.class;
       System.out.println(personClass);
       //personClass对应的Person这个类的详细信息
       //这个类下面应该有属性,方法,构造方法
       //2.通过Class获取属性?能
       Field[] declaredFields = personClass.getDeclaredFields();
       //Field 是咱们Person类下面的属性,Class类对象把Person
       //下面的属性变成了一个Field对象了
       for (Field declaredField : declaredFields) {
           System.out.println(declaredField);
           //获取Person下面属性的,之不过这个属性是一个类对象Field
           //举这个例子的目的就是告诉大家来获取这个类下面的信息的
      }

  }
}

为什么要用反射?

获取当前类的信息。直接new不行吗?直接实例化就获取信息了。为什么还有照镜子用反射?

1.有可能这个对象是别人传过来的

2.有可能没有对象,只有一个全类名(com.qfedu.a_reflect.Person)

Constructor 构造方法

Field 属性

Method 方法

自己翻看之前的笔记就可以了,因为也就是几个重要的方法而已

package com.qfedu.a_reflect;

import org.junit.Test;

import java.lang.reflect.InvocationTargetException;

public class Demo2 {
   @Test
   public void test1() throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
       //1.h获取Class对象
       Class<Person> personClass = Person.class;
       //2.t通过构造方法区实例化出来一个的对象
       //getConstructor(null) 通无参数的构造方法获取Constructor这个对象
       //通过反射机制获取Person类的对象
       //newInstance实例化的意思,因为BaseDao里面就是行代码
       //之前实例化对象 Person person = new Person();
       //现在通过反射 1.Class类对象 类的详细信息 2.Class类对象获取构造方法对象   3.通过构造方法区实例化出来对象
       Person person = personClass.getConstructor(null).newInstance(null);
       //3.可以对person对象进行操作
       //对属性进行赋值,对成员方法进行调用
       person.setName("狗蛋");
       person.setAge(23);
       System.out.println(person);

  }
}

2.重新封装BaseDao

1.新建一个java项目

2.导包(mysql, druid,beanutils)

3.在src下面写一个druid.propertiess

4.开始封装一个获取Connection对象的一个类JdbcUtil

5.开始封装一个BaseDao这个类主要用作增删改查的

3.线程

先线程先给大家发一个博客,你们先学,线程池有不要看。

线程池以前的看看。然后下周回顾线程。组长再统计一下还需要将哪些?

然后到时候我提问。你们知道有些人能找到18,你只能找到10k知道为什么吗?

因为你完全没有把这个些东西当回事。以后记住我一句话,你无论干什么工作。如果不用心,

干什么都干不好!!!比如打个游戏,你不去思考一些东西,你就找不到成就感!!!

https://blog.csdn.net/cuigx1991/article/details/48219741#



posted @ 2021-09-11 16:07  张三疯321  阅读(25)  评论(0)    收藏  举报