00:00
我们来看一看啊,就是在什么情况下,我们这个这个注解用在什么,什么情况下,就是注解有什么用。注解它有什么用对吧,我们学到现在,我们这个注解也快讲完了,就这点儿东西。是不是,哎,那么注解它有什么用呢?思考一下各位。比如说我在这里我提个需求吧,行吧。没有需求,我觉得肯定是不行的,得提一个需求。嗯。来。呃,提一个什么样的需求,各位大家大家看啊看这有这么一个需求啊,我先提个需求来package。嗯,Annoation t啊annotation t有这样一个package啊,然后这里呢,我们啊,嗯。
01:06
先给个需求吧,把需求先给了啊,不给需求这块咱们没法往下进行。就注解在开发中有什么用呢?我们这样给个需求啊。呃,假设有这样一个注解啊。注脚了啊注解啊叫做ID。叫做ID啊。ID。凡是啊,凡是累上面啊,累上面。这个注解啊。只能什么出现在类上面。
02:03
假设有这样一个注解啊,叫做ID注解,这个注解呢,只能出现类上面。啊。这个类上有这个注解的时候。要求,要求这个类中必须有一个。Int类型的ID属性。如果有,如果没有这个属性。就报异常。如果有这个属性,则正常执行。就理理解什么意思吧,大家分析一下,就假设有这样一个注解。啊,叫做ID注解,如果这个注解只能出现在类上面。啊,这个这个注解只能出现类上面啊,当这个注解,当这个类上有这个注解的时候,要求这个类中必须有个int类型的属性,Int类型的ID属性,如果没有这个属性就报异常,如果有这个属性则正常执行。
03:12
那针对于这个需求,我们应该怎么实现啊各位?我们得先给一个注解吧。是不是这个注解叫ID对不对?是不是,哎,那么这个注解只能注解类,所以这加什么呀?加target element type点什么。哎,Tap是不是,哎表示这个注解是不是只能说在类上面啊,对吧,表示这个注解只能出现在。类上面。来第二个我们的一个保持性策略retention policy runtime就表示该注解。该注解可以被反射机制读取到。
04:00
那么这里边儿没有属性,各位啊,没有属性这个需求的背景是什么?这个注解ID。啊,用来标注类。被标注的类中必须有一个ID,必须有一个int类型的ID属性。啊,没有就报异常。你你明白吗?那么这个时候呢,我们在这儿啊,有一个class叫。U端这个类上呢,哎,有一个什么呀,ID这样的注解,那么这个时候你这里就必须得有一个什么呀,哎,得有一个int类型的ID属性。啊,你要没有这个ID属性,我我就给你报异常。你有就无所谓。啊,你看类型string内蒙是吧,哎,String password等等啊,这是属性吗。是不是啊,那么接下来我们来测试一下,我们来测试一下啊。
05:04
我们来class test,那么这个test程序呢?在这里干什么呀?首先我们要获取这个类。再获取这个类上的ID,对吧,怎么获取类啊,Class user什么呀,Class我们叫class,什么for nameme是吧?哎,这个类名呢,我们直接拿过来呀,这个user呗。是不是我们复制一下,诶拿过来放到这儿,那接下来我们在这块拿到类了,对不对,我们判断一下这是获取类啊叫获取类,那获取判断类上是否存在什么呀?ID注解,那判断一下users user class是不是,哎,点什么呀?Is annotation present有没有这个ID这个注解。如果有的话没关系,如果没有的话,对不起。报异常啊。不不不对啊,如果有的话,你看这叫有ID注解吧,判断类上是否存在ID注解对不对啊,有ID注解,当一个类上面有ID注解的时候,要求类中必须存在什么int类型的ID属性。
06:21
对吧,如果没有ID属性。没有int啊类型的ID属性则报异常。那么这个时候呢,我们就可以获取类的属性吗?是不是怎么获取这个类属性,咱们今天讲过吧,User class get declared fields,是不是拿到所有的。属性啊,拿到这个属性之后,我们来获取for循环便利对吧,Field。
07:01
啊,Field fields每遍历一次呢,我们可以取出这个属性的名字。对吧?If,如果对吧,点get name,它属性的名字是ID。啊id.ES它如果有这个属性,那就是程序正常。对吧,哎表示啊,表示这个类是合法的类。啊,有ID注解,则这个类中必须有int类型的ID,哦,对了,你还得继续往下判断,如果id.ES有这个对吧,并且说。并且就是并且说还还得是int对吧,并且还是得是int field点什么呀?Get type是不是,哎,Get type,然后点get什么呀,Simple name啊,然后这个是一个int类型,这不是属性的类型吗?对吧,int.equals它。
08:08
如果你是个ID,并且你是个int类型,恭喜你,这就表示可以用。可以用对吧,哎,你可以在外边儿呢,准备一个布尔类型对吧,Is right。是否正确,默认值是false对吧?给一个默认的标记,给一个默认的标记对吧?哎。是否OK?默认值是false啊,如果这个条件一旦成立,有ID对吧,你就是有这个注解吗?有ID并且是int类型,恭喜你,那这个OK值我就可以附上一个值叫处表示什么呀?哎,表示合法。对吧?哎,别人合法,那么就没必要再往下循环了,Break就完事。就完事了。而我们这个布尔标记也可以怎么着啊,放到外边。
09:01
对吧,我们可以在外边给个布尔标记,获取这个类给个默认值对吧?哎,如果这个类上有这个ID的话,哎,那怎么办啊?哎,我们往下循环对吧?哎,循环便利每一个属性,如果这个属性叫ID,并且是int,恭喜你可以。那么当我们这个for循环结束之后,这个波尔也可以放里边无所谓啊。无所谓啊,放里边也行啊来,那这个for循环结束之后,你就可以判断一下对吧,哎,判断是否合法对吧,判断一下if是什么呀?哎,如果说我们这个OK值是true。如果不OK吧,对吧,不OK啊,叹号是不不OK,那就抛异常。是不是那异常这块呢,你就可以定义一个这个class,来咱们综合性的来一个对吧,这个class我们教叫做嗯。Not。
10:00
Have not has ID property。Exception。啊,这这英语,你看这这英语是多烂,是不是not has has has not hasn't hasn't。Hasn'TD property。Exception。表示没有对吧,没有还是not吧。Has not ID。Property啊ion,然后接下来让他去继这个run也行,对吧,可以的,没问题啊,这是一个自定义异常啊,对吧?啊,这是自定义异常,那提供两个构造方法,这个构造方法一个是无参的对不对,一个是有餐的,当时让大家背过,我不知道你背没背super。
11:05
好,那写上去之后你就可以抛这个异常对吧,如果不OK new一个这样的异常对吧?哎,被被ID注解标注的类中,必须要有一个int类型的ID属性。对吧,那这样的话你就去运行就行了,你看运行。你看有没有毛病。就没问题,程序不出任何异常对吧,但如果说你这个user这个类,它上面有ID属性,但是你没有加这个,呃,它有这个ID注解,但是你却没有加这个ID属性,那你再运行一下,你看它有什么问题,你看它就异常了。就报异常了是吧,说exception发生在main方法当中,说呀说这个异常就has not ID property exception被ID注解标注的类必须要有一个int类型的ID属性,那于是乎你看到上面有个注解对吧?哎,那么你这个时候就得强行加上去,你不加这个东西啊,它就报错。
12:15
你看。是吧,运行你看这这回就没问题了。没问题了,你看。是吧,程序一切正常,那么经过我的一个讲解,大家思考一下,注解这种东西我们开发中到底有什么用?有什么用?就是注解有什么用?就注解这种东西有啥用?干啥的?你们总结总结注解有什么用?有啥用啊?各位思考一下。其实注解就是用来做做什么,做参考的。对这个程序的一种注释,对吧。我们将来可以拿这个注解,如果有这个注解都怎么着,没有这个注解怎么着,是不是有这个注解,注解就相当于是个标记对吧,相当于在程序当中一种标记是不是。
13:07
哎,就是注解在程序当中注解。在程序当中。等同于一种标记。对吧,如果这个注解上,如果这个元素上有这个注解怎么办。对吧,没有这个注解怎么办。是不是,所以它叫注释类型,或者叫注解类型。对不对,你看。ID注解,这是我们自定义的呀。自定义一个注解吗?然后呢,这个类上面如果加上这个ID,加上这个ID注解,那你这个就必须得写一个ID属性,你看你不写,你不写你你执行一下,你看它报错。报错是吧,那这个时候你就得加上,加上你只能加,你说永恒老师,我加个钝行不行,对不起,那这个够呛,你加个钝不好使,来走一个。
14:13
那为什么要写印这个现在讲不了,为什么一定要写印ID后后。你看咱俩就根本没在一个频道上,我重点讲的是这个,你你你你你你问我,你问我为啥是这个it是干啥用的。咱重点没在这儿。啊,重点不是在这个上面。也许我们要这个IDID我还没有想好他要干啥,明白吧。明白什么意思吧,他只是现在是一种约束,这个ID到底用这个ID干啥呀?没有啊,往后的需求我没写呀。对吧,我只是写了这么一个需求。假设有这样一个注解,这个注解只能出现类上面,当这个注解,当这个类上有这个注解的时候。
15:04
要求这个类中必须有一个性的ID属性,如果没有这个属性就报异常,如果有这个属性则正常。你的意思不就是ID用来干什么的吗?文杰不是说为什么一定要写TID?就是你,你的意思不就是这个in ID用来干什么的,那存在这个东西干啥的。但是。什么意思?自己定义的,所以只能写ID。咱们一直都纠结在这个问题,我的意思不是在这个ID是咋的,我的意思是说我想给大家讲一讲这个类上啊,就这个注解的。我的天,是因为注解里面可以包含属性。所以类必须得说明这个属性。
16:05
因为注解里面可以包含属性。所以类必须得说明这个属性。嗯,不是不是不是不是这意思不是意思。啊。呃,毫无关系,毫无关系啊,没关系,没有任何关系啊,没有任何关系。没有任何关系,没有任何关系啊。那改改美容软件吧。刚刚没别叫别叫ID了啊,别叫ID了啊。我的错啊,叫must has。ID property annotation,行吧。嗯,就必须有ID属性行吧。Rename一下啊。有这么一个注解行吧,我们加到这儿。
17:01
行不行?来我们点一下这个啊。嗯。嗯。如果你U这个类上有这个注解的话。啊,当这个类上面有这个注解的时候。要求类中必须存在int类型的ID属性,如果没有idt类型的ID属性则报异常。我只是为了描述这个业务啊。BA。这个注解标注的类必须要有一个int类型的ID属性。都换个名啊,省得大家这个老老是感觉这个ID咋的跟那个ID咋的。没关系,没没半毛钱关系啊,不不是不是讲讲这个东西来看一下走。
18:01
嗯。没事吧,是吧,哎,加这个注解的,你看它里边是不是有这个东西啊,你不写这个东西你试试。对,只是一个需求啊,只是一个需求罢了。你看你没写ID,你看就就出问题了。是不是,哎,你没写就出问题了,你看。是不是你写上就好了,为什么,因为你加了这个注解呀,这个注解在这起到一个标记的作用,就是标记的作用。现在没有合适的业务跟大家聊这个东西啊。后期会用的,后期我们现在的开发方式都是注解方式开发。注解模式开发啊,都是基于注解的方式开发,哎,我们。都是基于注解的方式进行开发的,有这个注解怎么着,没有利润怎么着,都是通过反射机制去读这个注解,对吧?啊读这个注解。行吧,那咱们这个Java SE这块就终结了各位啊,咱们所有的内容都已经结束了啊,已经结束了,但咱们还有一个叫做JDK的新特性,JDK的新特性我现在这里还没有讲,各位。
19:08
啊,这个我找时间去讲,或者说我给后边这个老师讲也行啊,都行。都行啊。咱们下节课再讲的话就是数据库了,各位啊,就是数据库了。数据库还有一个JDK的新特性,新特性还得讲一下。只要有注解,类中必须得有台D。呃,这只是个需求啊,家辉是只是个需求,别多想啊。呃,我再强调,下节课咱们就讲数据库了,买circle啊,买circle,然后呢,三天买circle啊,然后呢,再加一天JDBC啊,咱们这个第一阶段就结束了。第一阶段就结束了啊,整个深圳的这个校区的这个课程是四大阶段。
20:02
啊,四大阶段。行好了啊。
我来说两句