Annotation
        多例模式特点:
            1. 多例类可以有多个实例
            2. 多例类必须自己创建自己的实例,并管理自己的实例,和向外界提供自己的实例
            
        实际的例子....一副麻将有两颗色子.色子就是多例类,每颗都代表不同的状态...

public class Dice {
private static final Dice dice1 = new Dice();
private static final Dice dice2 = new Dice();
private static List<Dice> list = new ArrayList<Dice>();//用于放多个实例的list
private static final int maxCount = 2;//最多的实例数
static{
list.add(dice1);
list.add(dice2);
}
private Dice(){}//私有构造方法,避免外部创建实例 /**
* @description: 随机拿取实例
* /
public static Dice getInstance(){
Random random = new Random();
int current = random.nextInt(maxCount);
return list.get(current);
} /**
* @description: 指定拿取某一个实例
*/
public static Dice getInstance(int index){
return list.get(index);
}
}

*/
/*    Annotation
        Annotation 可以说是子2005年之后java最大的特色,而且合理的使用 Annotation 可以更加方便程序的编写开发
        也就是说在现在的开发之中, Annotation 的使用频率是非常高的。
        对于程序开发模式经历了三个阶段:
            一:将所有的服务配置信息都写在程序之中,这样一来如果某个服务器的地址发生了改变,那么必须要有开发者去修改程序源代码,并且从一个很庞大项目里面去准确的找到这样的配置路径进行变更
            二:程序 + 配置文件,也就是说将所有需要的配置项写到一个文件里面,程序通过该配置文件进行内容的加载后正常执行程序逻辑,如果要进行一些配置的修改,修改配置文件即可
            三:将一些配置写会到程序之中,因为有些配置有可能需要开发者进行编写,但是用一个特殊的方式将配置部分与程序部分进行分离,这个阶段就是注解阶段( Annotation )
            
        Annotation 也分为两个部分:程序配置的 Annotation 程序编译的 Annotation ,就是指的不同运行范围的 Annotation
        而在JDK里面针对程序结构提供有三个基础的 Annotation : @Override,@Deprecated,@SuppresWarnings
        
    准确的覆写: @Override
        覆写:是发生在继承关系之中的,并且子类定义了与父类相同的方法的时候所产生的概念,但是在进行覆写的时候最简单的做法是将父类中的方法直接拷贝过来使用,但是也有可能出现一些手误的情况
        
        范例:观察覆写可能带来的问题

    package cn.mysterious;

    public class Annotation {

        public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(new Member());
}

class Member{
public String tostring(){ // 预备覆写toString
return "一个神";
}
}

那么此时在程序编译的时候是无法确定出此问题的。那么如果想在程序编译的时候就能够把这些错误额覆写检查出来,那么就必须明确的使用一个注解

    package cn.mysterious;

    public class Annotation {

        public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(new Member());
}
}
class Member{
@Override
public String toString(){ // 预备覆写toString
return "一个神";
}
}

对于这样的注解,最好利用开发工具编写
            
    过期声明: @Deprecated
        如果说你现在一个项目在项目的1.版本开发出了一个类,并且这个类在很长一段时间之内都在使用着,后来某一个项目到达了5.0版本,这个时候发现这个类之中的某些方法已经不再适用了
        此时有两个选择:
            一;直接删除掉这个方法
            二:旧版本继续使用(没问题),新版本做一个提示(不要用有问题)
            
        所谓的过期声明指的是方法可以继续使用,但是会出现有警告信息

    package cn.mysterious;

    public class Annotation {

        public static void main(String[] args) {
// TODO Auto-generated method stub
new Member().print();
}
} class Member{
@Deprecated
public void print() {
// TODO Auto-generated method stub
System.out.println("Member.print()");
}
}

在一些进行系统结构设计的时候才会使用到这样的设计方案
        在一些正规的开发公司里面都会有一个严格要求:不允许使用过期方法

    压制警告: @SuppressWarnings
        在一些代码开发过程之中,有可能有一些警告信息是你不关注的

    package cn.mysterious;

    public class Annotation {

        @SuppressWarnings({ "rawtypes", "unused" })
public static void main(String[] args) {
// TODO Auto-generated method stub
Member mem = new Member();
}
} class Member<T>{
public void print() { }
}

警告信息挺多的,但是从整体来讲没有必要去记这些警告信息

菜鸡的Java笔记 第三十四 Annotation的更多相关文章

  1. 菜鸡的Java笔记 第三十 - java 异常的捕获及处理

    异常的捕获及处理        1.异常的产生分析以及所带来的影响        2.异常的处理的基本格式        3.异常的处理流程        4.异常的处理模式        5.自定义 ...

  2. 菜鸡的Java笔记 第三十五 接口定义增强

    接口定义增强        在java从一开始到现在接口之中的核心组成部分:抽象方法与全局常量,但是随着技术的不断发展,用户在使用过程之中发现了有一些问题        如果说现在有一个接口经过了长年 ...

  3. 菜鸡的Java笔记 第三十六 - java 函数式编程

    StudyLambda    Lambda 指的是函数式编程,现在最为流行的编程模式为面向对象,很多的开发者并不认可面向对象,所以很多的开发者宁愿继续使用 C 语言进行开发,也不愿意使用java,c+ ...

  4. 菜鸡的Java笔记 第三十二 - java 静态导入的实现

    静态导入的实现        为了理解静态导入的操作产生的动机,下面通过一个具体的代码来观察        范例:现在有一个 Import 的类,这个类中的方法全部都是 static 方法 packa ...

  5. 菜鸡的Java笔记 第三十七 - java 线程与进程

    线程与进程        线程与进程的区别                最早的的时候DOS 系统有一个特点:只要电脑有病毒,那么电脑就死机了,是因为传统的DOS 系统属于单进程的操作系统       ...

  6. 菜鸡的Java笔记 第三十三 - java 泛型

    泛型 GenericParadigm        1.泛型的产生动机        2.泛型的使用以及通配符        3.泛型方法的使用                JDK1.5 后的三大主 ...

  7. 菜鸡的Java笔记 第三十一 扩展结构

    .新特性        可变参数的意义以及实现                那么下面通过一个简单的思考来分析可变参数的存在意义        范例:如果说现在要定义一个方法,这个方法可以实现任意多个 ...

  8. 菜鸡的Java笔记第三 - java 自动转换原则

    自动转换原则 数据范围保存大的数据类型要转换为数据范围保存小的数据类型,使用强制转换(强制转型就是在变量的前面加括号,在括号里写上需要强制要转的类型.) 数据范围保存小的数据类型可以自动转换为数据范围 ...

  9. “全栈2019”Java多线程第三十四章:超时自动唤醒被等待的线程

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

随机推荐

  1. AI 事件驱动场景 Serverless 实践

    作者 | 李鹏(元毅) 来源 | Serverless 公众号 一.事件驱动框架:Knative Eventing 事件驱动是指事件在持续事务管理过程中,进行决策的一种策略.可以通过调动可用资源执行相 ...

  2. Markdown数学公式

    1. 显示位置与大小 正文(inline)中的LaTeX公式用$...$定义, 显示在当前行内. $\sum_{i=0}^N\int_{a}^{b}g(t,i)\text{d}t$ \(\sum_{i ...

  3. OutOfMemoryException异常解析

    一.概述 在国庆休假快结束的最后一天晚上接到了部门老大的电话,某省的服务会出现崩溃问题.需要赶紧修复,没错这次的主角依旧是上次的"远古项目"没有办法同事都在休假没有人能帮忙开电脑远 ...

  4. Vue2源码解读 - 响应式原理及简单实现

    直接进入主题了,想必大家都知道实现vue响应式核心方法就是 Object.defineProperty,那就从它开始说 Object.defineProperty 缺点: 深度监听,需要递归到底,一次 ...

  5. 安装pytorch后import torch显示no module named 'torch'

    问题描述:在pycharm终端里通过pip指令安装pytorch,显示成功安装但是python程序和终端都无法使用pytorch,显示no module named 'torch'. 起因:电脑里有多 ...

  6. 剑指offer:JZ12 矩阵中的路径

    JZ12 矩阵中的路径 描述 请设计一个函数,用来判断在一个n乘m的矩阵中是否存在一条包含某长度为len的字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上, ...

  7. Redis:学习笔记-02

    Redis:学习笔记-02 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 4. 事物 Redis 事务本 ...

  8. 【二食堂】Beta - Scrum Meeting 6

    Scrum Meeting 6 例会时间:5.19 18:30~18:50 进度情况 组员 当前进度 今日任务 李健 1. 实体标注的优化基本已经实现,后端有bug,还没有进行接口调用 issue 2 ...

  9. spring cloud config的使用

    在传统的应用中,我们的配置文件都是放在项目中,这个影响不大.但是在一个微服务架构的系统中,我们的微服务可能存在几十上百个,并且每个小的微服务可能又部署在多台机器上,那么这个时候如果我们的配置文件在都放 ...

  10. 联赛膜你测试20 T1 Simple 题解 && NOIP2017 小凯的疑惑 题解(赛瓦维斯特定理)

    前言: 数学题,对于我这种菜B还是需要多磨啊 Simple 首先它问不是好数的数量,可以转化为用总数量减去是好数的数量. 求"好数"的数量: 由裴蜀定理得,如果某个数\(i\)不能 ...