2021-06-24

单例设计模式:

核心思想:确保类的实例只有一个

好处:可以节省内存空间,方便控制资源的使用

实现思路:

1.构造方法私有化--阻止外部直接调用本类的构造方法创建对象

2.创建本类对象且私有化--为了防止外部多次获取本类对象

3.对外提供一个公共的全局访问点--按照我们预先设定的方式来获取对象

@Target 注解用在哪里:类上、方法上、属性上等等

@Retention 注解的生命周期:源文件、字节码文件中、运行中

SOURCE在源文件中有效(即源文件保留)

CLASS在class文件中有效(即class保留)

RUNTIME在运行时有效(即运行时保留)

反射要用到的API:

Class.forName("类的全路径")

类名.class

对象.getClass();

package cn.tedu.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/*本类用于测试自定义注解,熟悉注解 相关的规则*/
public class TestAnnotation {
}
/*0.首先注意:自定义注解的语法与java不同,不要套用java的格式*/

/*1.注解定义要使用“@interface注解名的方式来定义”*/
/*1.1需要通过@Target注解来描述当前自定义注解可以使用的位置*/
/*注意@Target注解使用的时候需要导包
* 它的值通过“ElementType.静态常量”来指定
* 如果需要指定多个值,可以使用{ ,}的格式来写*/
@Target({ElementType.METHOD,ElementType.FIELD,ElementType.TYPE})
/*1.2通过@Retention注解表明此自定义注解的生命周期
* 注意:@Retention使用时也需要导包
* 它的值通过“RetentionPolicy.静态常量”来指定
* 也就是自定义注解可以存活多久:源文件中/字节码文件中/运行时
* 而且,这三个值只能选一个,不能写多个*/

@Retention(RetentionPolicy.SOURCE)
//1.定义自定义注解,注解名为Test,并指定此注解作用的位置
@interface Test{
    /*3.自定义注解可以添加功能--给自定义注解添加属性
    * 注意:int age();不是方法的定义,而是自定义注解中定义age属性的语法*/
    /*如果为了使用方便,还可以给属性指定默认值,这样注解就可以不赋值直接使用
    * int age()default 0;*/
    int age()default 0;
    /*4.注解中还可以添加功能,可以定义特殊属性value
    * 特殊属性的定义于其他普通属性的定义相同,主要是使用方式不同
    * 使用此注解时,属性赋值不再需要写属性名,直接写值就可以
    * 也就是说:@Test(value = "apple")可以简写成@Test("apple")
    * 但是自定义注解中的特殊属性赋予默认值时的格式不能简写
    * 如果给特殊属性赋予了默认值,使用时可以不赋值,使用默认值即可*/
    //4.给注解定义一个特殊属性value
    String value()default "lemon";

}
/*2.使用注解时,只要在自定义注解名字前加@符号即可使用此注解*/
//2.定义一个类来测试自定义注解
//@Test
class TestAnno{
    /*测试一:分别给TestAnno类/name属性/eat方法都添加了@Test注解,只有方法上不报错
    * 结论:自定义注解能够加在什么位置,取决于@Target注解的值*/
    /*测试二:修改@Target注解的值:
    * @Target({ElementType.METHOD,ElementType.FIELD,ElementType.TYPE})
    * 结论:@Test可以存在于多个位置,如果有多个值,格式为{ ,}
    * 原因:Target注解的源码:ElementType[] value();*/
    //@Test
    String name;
    /*测试三:当我们添加了注解的age属性后,@Test注解报错
    * 结论:当没有给自定义注解定义属性时,可以直接使用但是如果有属性了,必须给属性赋值
    * 测试四:给@Test注解的属性赋值以后,就不报错了
    * 结论:给属性赋值的格式“@Test(age = 18)”,注意不能直接写值,这是错误的格式
    * 测试五:给age属性赋值以后,可以不加属性值直接使用注解
    * 此时使用的属性值是age的默认值*/
    //@Test(age = 18)
    //@Test(value = "apple")
    /*测试六:给特殊属性value赋值时可以简写,相当于value=“apple”*/
    /*测试七:因为两个属性均被设置为默认值,所以无需赋值,可以使用@Test注解*/
    //@Test("apple")
    @Test
    public void eat(){
        System.out.println("点个奶茶吧,加冰淇淋");
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值