注解
-
注释:用文字描述程序,给人看的
-
注解(JDK1.5之后的新特性):说明程序的,给计算机看的
使用分类:1、编写文档:通过代码里标识的注解生成文档(生成doc文档)(预定义注解) 2、编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查(@override)(预定义注解) 3、代码分析:通过代码里表示的注解对代码进行分析(使用反射)
-
JDK中预定义的一些注解
1、@Override:检测被该注解标注的方法是否继承自父类(接口) 2、@Deprecated:该注解标注的内容已过时(但是也可以使用,使用的时候该方法会有横线,提示该方法已经过时有更新的方法可以使用) 3、@SuppressWarnings:压制警告(黄色的警告消失) 一般传入参数all,@SuppressWarnings(“all”)
-
自定义注解:
自定义注解格式:
元注解
public @interface 注解名称(){...}
2、注解的本质:
注解本质上是一个接口,该接口默认继承Annotation接口(可以通过反编译的方法查看)
3、注解的属性:接口中的抽象方法
注解是一个接口,接口中可以定义什么方法,注解中就可以定义什么方法。
注意:
(1)属性的返回值类型只能是以下几种,其他都不行
* 基本数据类型
* String
* 枚举
* 注解
* 以上类型的数组
(2)* 定义了属性,在使用时需要给属性赋值,如果不想给属性赋值,在定义时可以在属性后加default(...)设置默认值
* 如果只有一个属性需要赋值,并且属性的名称是value,那么在使用注解给属性赋值时可以省略value直接写值
(3)数组赋值时使用{}包裹,如果数组中只有一个值,那么{}可以省略
元注解
元注解是描述注解的注解
常用的元注解:
1、@Target:描述注解能够作用的位置
2、@Retention:描述注解被保留的阶段
3、@Document:描述注解是否被抽取到API文档中
4、@Inherited:描述注解是否被子类继承
在程序中解析(使用注解)
解析注解:
获取注解中定义的属性值
可以使用注解代替之前所做框架的配置文件
要求:创建一个“框架”,使用该框架可以创建任何类的对象,使用任何类的方法
分析:因为解析注解可以获取注解中的属性值,可以使用注解来代替之前的配置文件
步骤:
1、创建一个注解,在该注解中定义类名和方法名两个属性
2、在框架类中调用这个注解
3、解析注解
(1)获取该类的字节码文件对象
(2)获取上面使用的注解对象
注意:注解作为一个接口但是能直接创建对象调用方法的原因是JVM偷偷在生成了该注解接口的子类,并且实现了注解的属性
(3)调用注解对象中的方法,获取返回值,注解中传入的参数不同,获取的返回值不同
实例——简单的测试框架(使用框架)
要求:使用注解来完成一个Calculator类(实现写好的类)的测试框架,当主方法被执行之后会自动执行要被检测的方法(加了自定义注解@check就是要被检测的方法)判断方法是否有异常,并记录到文件中。
步骤:
1、创建一个框架测试类
2、在类中创建一个字符缓冲输入流对象和一个文档,用于存放异常信息
3、创建要测试的类的对象 (本例是Calculator类)(创建该对象,可以使用对象名.getClass()来获取类对象,后面使用方法的时候也要传入该类对象作为参数)
4、获取字节码文件
5、获取类中的所有方法
6、判断方法上是否加了Check注解,如果有就执行
7、捕获异常,并且把异常写入刚刚创建的文档中
代码实现(测试框架中主方法的代码):
// number ---> 出异常的次数
int number = 0;
// 创建一个缓冲输入流,把异常信息写入到一个指定文件中(缓冲输入流更高效)
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("bug.txt"));
// 创建要测试类的对象
Calculator calculator = new Calculator();
// 获取该类的字节码文件,getClass在内存中获取
Class calClass = calculator.getClass();
// 获取该类的所有方法
Method[] declaredMethods = calClass.getDeclaredMethods();
// 遍历所有方法,判断方法上是否加了Check注解,如果有就执行
for (Method declaredMethod : declaredMethods) {
// 判断遍历的方法上有没有Check注解
if (declaredMethod.isAnnotationPresent(Check.class)) {
try {
// 执行该方法
declaredMethod.invoke(calculator);
} catch (Exception e) {
// 捕获异常,把异常信息写入到文档中
number++;//异常出现的次数
bufferedWriter.write(declaredMethod.getName() + "出异常啦!");
bufferedWriter.newLine();
// 写入出现的异常的简短名称,而不是有包名的全名称
// 其中getCause()是异常出现的原因,getClass()是在内存中获取类对象
bufferedWriter.write("出现异常的名称是:"+
e.getCause().getClass().getSimpleName());
bufferedWriter.newLine();
// 出现异常的原因是:
bufferedWriter.write("异常出现的原因是:"+e.getCause().getMessage());
bufferedWriter.newLine();
// 一个异常信息结束,用分割线分割
bufferedWriter.write("--------------------------------------");
bufferedWriter.newLine();
}
}
}
bufferedWriter.write("本次测试出现了" + number + "次异常");
// flush() 方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。
一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法。
// 注意:flush()和close()必须要有一个,否则就无法写入文档
bufferedWriter.flush();
bufferedWriter.close();
结果展示:
注意:
我们一般是使用注解,但是如果要自定注解的话,不要忘记加注解的注解(写这个程序时,因为忘记加注解的注解,导致框架类代码中判断方法上是否有注解时无法判断)
小结:
1、以后大多数时候,我们会使用注解,而不是自定义注解
2、注解是给编译器和解析程序用的
3、注解不是程序的一部分,注解就像是一个标签
数据库的基本概念
-
什么是数据库(DadaBase 简称DB)
用于存储和管理数据的仓库
-
数据库的特点:
(1)用于持久化存储数据,实际上数据库就是一个文件系统 (2)方便存储和管理数据 (3)使用统一的方式操作数据库——SQL
-
常见的数据库软件(数据库软件是对数据库概念的具体实现,就像蛋糕的不同品牌)
(1)Oracle:收费的大型数据库(很贵) (2)MySQL:本来在sun公司下是不收费的,被Oracle公司收购之后就收费了(MySQL6.x之后就收费了) (3)SQLServer (4)...
数据库的安装卸载与配置
-
安装:此处省略…
-
卸载:
(1)去MySQL的安装目录找到my.ini文件,复制其中的datadir=”...“ (2)卸载MySQL (3)粘贴刚刚复制的目录找到MySQL文件夹,将它删除,如果不删除再次安装就不会成功
-
配置
(1)MySQL的启动与关闭:
①手动
②在命令行敲入“service.msc”
③以管理员身份打开命令行
(输入cmd显示cmd之后不要直接打开命令行,右键以管理员方式运行,如果不以管理员方式运行就没有权限),敲入”net stop mysql”,MySQL就会成功停止。使用”net start mysql”就会成功启动MySQL
(2)MySQL登录与退出
①登录本地MySQL:“mysql -u登录名 -p密码”(mysql -uroot -p111111)
②远程连接MySQL:”mysql -h要登录的IP地址 -u登录名 -p密码”
③“mysql --host=登录IP --user=登录名 --password=连接目标的密码
④退出:exit quit
(3)MySQL的目录结构
①安装目录:bin ---> 存放指令文件
data ---> 存放日志文件等数据
include ---> C语言的头信息
lib ---> 存放jar包
share ---> 存放MySQL的错误信息
my.ini ---> mysql的配置文件
②数据目录:就是配置文件my.ini中的datadir后面的目录
Mysql服务器 = 硬件 + 软件(MySQL软件)
Mysql服务器其实就是安装了Mysql软件的主机
数据库:主机上的文件夹(一个数据库对应一个文件夹)
表:数据库文件夹中的文件
数据:文件中的数据
(该图片源自学习视频的软件)
SQL
-
什么是SQL
SQL(Structured Query Language 结构化查询语言):就是定义了操作所有关系型数据库的规则。 Oracle和MySQL、DB2都是关系型数据库,也就是说学会了SQL语言,就可以操作所有的关系型数据库软件
注意:每一种数据库操作的方式都有一些不一样的地方——”方言“,SQL是中国的普通话,大家都能听懂普通话,但是每个地区都会有方言
-
SQL的三种注释
(1)-- 注释内容(--后面一定要加空格!)(单行注释) (2)#注释内容(可以不加空格)(单行注释) (3)/*注释内容*/(多行注释)
-
SQL分类
(1)DDL(Definition):数据定义 (2)DML(Manipulation):数据操作 (3)DQL(Query):数据查询 (4)DCL(Control):数据控制
SQL中的数据类型
几种常见的数据类型:
-
int:整数类型 —— age int
-
double:小数类型 —— score double(5 , 2) 一共有五位,小数点后保留两位
-
date:日期,只包含年月日——yyyy-MM-dd
-
dateTime:日期,年月日 时分秒 ——yyyy-MM-dd HH:mm:ss
-
timestamp:日期,年月日 时分秒 ——yyyy-MM-dd HH:mm:ss
注意:如果将来不给这个字段赋值,或赋值为null,则默认使用系统时间来自动赋值
-
varchar:字符串 —— name varchar(20):姓名最大20个字符(张三 两个字符 zhangsan 八个字符)