【JavaWeb】day1 课程介绍及前言引入

课程介绍

  1. Java web框架

请添加图片描述

  1. 课程安排:
    数据库 -> 前端 -> web -> 项目实践
  2. 后期学习:
    SSM框架:简化web开发的经典框架 ->
    spring boot:简化spring开发的框架 ->
    spring cloud:微服务开发解决方案 ->
    中间件技术 ->
    docker:容器技术 ->
    业务解决方案

导入

Junit单元测试

以前我们通常是新建test类写main方法去测试,现在可以使用Junit进行测试

步骤 :

  1. 定义一个测试类(测试用例)
    • 建议 :
    • 测试类名:被测试的类名 TestCalculatorTest
    • 包名 : xxx,xxx.xx.test cn.itcast.test
  2. 定义测试方法:可以独立运行
    • 建议 :方法名: test测试的方法名 testAdd()
    • 返回值 :void
    • 参数列表:void
  3. 给方法加@Test
  4. 引入Junit依赖执行

结果:

使用断言判断测试结果是否正确:Assert.assertEquals(expected, result)

提高代码复用提高代码复用

反射——框架设计的灵魂

  • Class类对象:用来描述编译后的字节码对象
  • 反射:将类的各个组成部分封装为类对象
  • 用处:
    1. 可以在运行时获取操作对象,比如定义了String对象时能自动找到该类的方法
    2. 可以解耦,提高程序的可扩展性
      在这里插入图片描述

获取Class对象的三种方法:

  1. class.forName(“全类名”) : 将字节码文件加载进内存,返回class对象(源代码阶段)
    • 多用于配置文件,将类名定义在配置文件中。读取文件,加载类 spring配置文件的原理
  2. 类名.class:通过类名的属性class获取(类对象阶段)
    • 多用于参数的传递
  3. 对象.getCClass() :getClass()方法在obiect类中定义
    • 多用于对象的获取字节码的方式
  • 结论
    同一个字节码文件(*,class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的lass对象都是同一个。

使用Class对象:

  1. 获取成员变量:
    Field[] getFields() 获取所有public成员
    Field getField(string name)
    Field[] getDeclaredFields() 获取所有的成员,不考虑修饰符
    Field getDeclaredField(string name)

Field : 成员变量
设置值:void set(object obj, object value)
获取值:get(object obj)
忽略访问权限修饰符的安全检查:setAccessible(true) 暴力反射

  1. 获取构造方法:
    Constructor<?>[] getConstructors()
    Constructor<T> getConstructor(类<?>... parameterTypes)
    Constructor<T> getDeclaredConstructor(类<?>... parameterTypes)
    Constructor<?>[] getDeclaredConstructors()

Constructor:构造方法
创建对象:T newInstance(object... initargs)
如果使用空参数构造方法创建对象,可以不用获取构造函数,简化为class对象的newInstance方法

  1. 获取成员方法:
    Method[] getMethods()
    Method getMethod(string name,类<?>... parameterTypes)
    Method[] getDeclaredMethods()
    Method getDeclaredMethod(string name,类<?>... parameterTypes)

Method:方法对象
获取方法名称:String getName()
执行方法:Object invoke(Object obj, Object…args)

Method eatMethod = cls.getMethod(eat, Sting.class);
Person p = new Person();
eatMethod.invoke(p, "rice");
  1. 获取类名:
    String getName()

案例

  1. 将需要创建的对象的全类名和需要执行的方法定义在配置文件
  2. 在程序中加载读取配置文件
  3. 使用反射技术来加载类文件进内存
  4. 创建对象
  5. 执行方法
    在这里插入图片描述在这里插入图片描述

注解

  • 注解:用来说明程序的
  • 作用:
    1. 生成文档:javadoc .java文件生成doc文档
    2. 代码分析:
    3. 编译检查:让编译器实现基本的编译检查 如override

JDK内置注解

@Override检测该注解标注的方法是否是继承自父类(接口)的
@Deprecated表示该注解标注的内容已过时
@SuppressWarnings忽略警告 一般传递参数all:@SuppressWarnings("all")

自定义注解

  • 定义:
    public @interface 注解名称{}
  • 本质:注解本质上就是一个接口,该接口默认继承Annotation接口
    public interface MyAnno extends java.lang.annotation.Annotation {}
  • 属性:指接口中的抽象方法
    1. 属性的返回值类型有下列取值
      1.1 基本数据类型
      1.2 String
      1.3 枚举
      1.4 注解
      1.5 以上类型的数组
    2. 定义了属性,在使用时需要给属性赋值
      2.1 如果定义属性时,使用default关键字给属性默认初始化值,则使用注解时,可以不进行属性的赋值。
      2.2 如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义值即可。
      2.3 数组赋值时,值使用{}包裹。如果数组中只有一个值,则可以省略。
public @interface MyAnno {
	int value() default 1;
	String name(); 
}
  • 元注解:描述注解的注解
    @Target:描述注解作用的位置:类、方法、变量上
    @Retention:描述注解被保留的阶段

@Documented:描述注解是否用于生成api文档
@Inherited:描述注解是否被子类继承

案例:用注解简化配置文件

在程序使用(解析)注解: 获取注解中定义的属性值

  1. 获取注解定义的位置的对象 (Class, Method, Field)
  2. 获取指定的注解getAnnotation(Class)
    其实就是在内存中生成了一个该注解接口的子类实现对象:
public class ProImpl implements Pro {
	public string className() {
		return "cn.itcast .annotation .Demo1"
	}
	public string methodName() {
		return "show";
	}
}
  1. 调用注解中的抽象方法获取配置的属性值
    在这里插入图片描述

案例: 简单的测试框架

当TestCheck类执行主方法时,会自动执行加了check注解的方法,判断方法是否有异常并记录到文件在这里插入图片描述
在这里插入图片描述

  • 小结:
    1. 大多数时候,我们都是使用注解,而不是自定义注解
    2. 注解一般时给编译器和解析的程序用
    3. 注解不是程序的一部分,可以理解注解为标签
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值