15、java反射
java反射
什么是反射?
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制
获取反射的三种方法
-
通过Class.forName(包名.类名);
比如: Class cls = Class.forName ("day02.com.instance.Dog");
-
通过 类名.class();
比如: Class cls = Dog.class () ;
-
通过对象的getClass();
比如: Dog dog = new Dog();
Class cls = dog.getClass ();
//获取反射的三种方式
//1.直接通过包名类名获取
Class cls = Class.forName("day02.com.instance.Dog");
//2.通过类名获取
cls = Dog.class;
//3.通过对象获取
Dog wangcai = new Dog("旺财",10);
cls = wangcai.getClass();
通过反射获取属性:
-
通过cls 调用 getDeclaredFields() 得到field[],获取到所有的属性,包括私有的。
-
返回一个类名。
**getSimpleName**()
//获取反射中的对象的所有属性
/** Field [] fs = cls.getDeclaredFields();
for (Field field : fs) {
//获取属性的名字
System.out.println(field.getName());
//获取属性的类型
System.out.println(field.getType().getName());
//获取属性的值(要通过对象获取特定对象的某个属性值)
//要看访问修饰符,不然会报异常
System.out.println(field.get(wangcai));
//给属性赋值
if("name".equals(field.getName())) {
field.set(wangcai, "大黄");
}
}
System.out.println(wangcai);*/
通过反射获取方法:
//获取到反射中所有的方法(不包含构造方法)
Method[] me = cls.getDeclaredMethods();
for (Method method : me) {
//获取方法的mingc
//System.out.println(method.getName());
//获取所有方法的返回值类型
//System.out.println(method.getReturnType().getName());
//以整数形式返回此 Method 对象所表示方法的 Java 语言修饰符
//System.out.println(method.getModifiers());
// 按照声明顺序返回 Class 对象的数组,
//这些对象描述了此 Method 对象所表示的方法的形参类型
//System.out.println(method.getParameterTypes());
//利用方法来调用对象的方法
if("getName".equals(method.getName())) {
System.out.println(method.invoke(wangcai));
}
}
通过反射创建对象:
//利用反射来创建对象
Object obj = cls.newInstance();
通过反射获取所有的构造方法:
cls.getDeclaredConstructors()
返回 Constructor 对象的一个数组,这些对象反映此 Class 对象表示的类声明的所有构造方法
ResultSetMetaData
通过ResultSet.getMetaData()获取,可以得到数据库中的列的个数,列名,列的类型。
ResultSetMetaData rsmd = ResultSet.getMetaData();
- 获取指定列的个数: rsmd.getColumnCount(int index );
- 获取指定列名: rsmd.getColumnName(int index);
- 获取指定列的类型: rsmd.getColumnType(int index);
有什么用呢?
可以通过指定的列名跟实体类的成员变量是相同的情况下,我们就可以直接给实体类赋值了。
代码分层
为什么要代码分层呢?
在大型的项目中,代码量很多,如果都放在一个包中,在检查bug的时候就不利于我们改bug,也不利于我们进行维护。所有我们将代码分类,分成三层架构,控制层(controller),业务逻辑层(Service),数据层(dao),以及我们的实体类(po),还可以有更的包将他们分类,比如说专门提供工具的类的包util等。
我们在写的时候也许增加我们的代码量,但在我们维护的过程中,就可以通过层次来排查,大大的提高了我们维护的效率。
三层架构

在业务逻辑层和数据层,我们定义一个接口,然后用接口对象引用一个实现类的对象,比如:
接口 接口的引用 实现类
UserDao userDao = new UserDaoImpl();
这样降低代码的耦合,当我们的业务逻辑改变的时候,我们只需要改变实现类就行,其他的代码就不能改,这就是接口编程。

浙公网安备 33010602011771号