菜鸡的Java笔记 第三十四 Annotation
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的更多相关文章
- 菜鸡的Java笔记 第三十 - java 异常的捕获及处理
		
异常的捕获及处理 1.异常的产生分析以及所带来的影响 2.异常的处理的基本格式 3.异常的处理流程 4.异常的处理模式 5.自定义 ...
 - 菜鸡的Java笔记 第三十五 接口定义增强
		
接口定义增强 在java从一开始到现在接口之中的核心组成部分:抽象方法与全局常量,但是随着技术的不断发展,用户在使用过程之中发现了有一些问题 如果说现在有一个接口经过了长年 ...
 - 菜鸡的Java笔记 第三十六 - java 函数式编程
		
StudyLambda Lambda 指的是函数式编程,现在最为流行的编程模式为面向对象,很多的开发者并不认可面向对象,所以很多的开发者宁愿继续使用 C 语言进行开发,也不愿意使用java,c+ ...
 - 菜鸡的Java笔记 第三十二 - java 静态导入的实现
		
静态导入的实现 为了理解静态导入的操作产生的动机,下面通过一个具体的代码来观察 范例:现在有一个 Import 的类,这个类中的方法全部都是 static 方法 packa ...
 - 菜鸡的Java笔记 第三十七 - java 线程与进程
		
线程与进程 线程与进程的区别 最早的的时候DOS 系统有一个特点:只要电脑有病毒,那么电脑就死机了,是因为传统的DOS 系统属于单进程的操作系统 ...
 - 菜鸡的Java笔记 第三十三 - java 泛型
		
泛型 GenericParadigm 1.泛型的产生动机 2.泛型的使用以及通配符 3.泛型方法的使用 JDK1.5 后的三大主 ...
 - 菜鸡的Java笔记 第三十一 扩展结构
		
.新特性 可变参数的意义以及实现 那么下面通过一个简单的思考来分析可变参数的存在意义 范例:如果说现在要定义一个方法,这个方法可以实现任意多个 ...
 - 菜鸡的Java笔记第三 - java 自动转换原则
		
自动转换原则 数据范围保存大的数据类型要转换为数据范围保存小的数据类型,使用强制转换(强制转型就是在变量的前面加括号,在括号里写上需要强制要转的类型.) 数据范围保存小的数据类型可以自动转换为数据范围 ...
 - “全栈2019”Java多线程第三十四章:超时自动唤醒被等待的线程
		
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
 
随机推荐
- Cnblogs 主题设置
			
https://www.cnblogs.com/enjoy233/p/cnblogs-markdown-code-display-opt.html 复制: 右上角添加复制按钮:https://www. ...
 - 重新整理 .net core 周边阅读篇————AspNetCoreRateLimit 之规则[二]
			
前言 本文和上文息息相关. https://www.cnblogs.com/aoximin/p/15315102.html 是紧接着上文invoke来书写的,那么现在来逐行分析invoke到底干了啥. ...
 - ElasticSearch7.X.X-初见-模仿京东搜索的实战
			
目录 简介 聊聊Doug Cutting ES&Solr&Lucene ES的安装 安装可视化界面ES head插件 了解ELK 安装Kibana ES核心概念 文档 类型 索引 倒排 ...
 - Docker小白到实战之Docker Compose在手,一键足矣
			
前言 Docker可以将应用程序及环境很方便的以容器的形式启动,但当应用程序依赖的服务比较多,或是遇到一个大系统拆分的服务很多时,如果还一个一个的根据镜像启动容器,那就有点累人了,到这有很多小伙伴会说 ...
 - 树莓派3B上手一二
			
树莓派3B上手一二 早些时间心血来潮买过一个树莓派,但是当时只是玩一玩,买来按照网上的教程摆弄了一下就闲置了.最近毕业设计,做时序数据分析的相关的工作,刚好想起能够用到树莓派+Node-RED来生成模 ...
 - node二进制安装
			
你可能因为重装系统node的npm不管用, 但是node管用, 我不知道为什么, 但是 二进制安装就好了 管他那么多 下面这些网址你就可以了 https://blog.csdn.net/wocaoni ...
 - 2021年1月-第02阶段-前端基础-HTML+CSS进阶-VS Code 软件
			
软件安装 VSCode软件 能够安装 VS Code 能够熟练使用 VS Code 软件 能够安装 VS Code 最常用的插件 1. VS Code简介 1.1 VS Code 简介 Visual ...
 - 【Docker】(10)---详细说说 Dockerfile文件
			
一.基础概念 1.基本概念 Dockerfile 是一个文本文件,其内包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建.有了 Dockerfile,当我们需要定制 ...
 - (一)、Docker 简介
			
1.Docker镜像是什么? 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码.运行时.库.环境变量和配置文件. 2.Do ...
 - x64 InlineHook 黑魔法
			
目录 x64 InlineHook 黑魔法 为什么不能用X86 的HOOK方式? 原理:jmp + rip 进行寻址6字节方式跳转 手动InlineHook 临时地址x(找一块空内存) 计算偏移 源地 ...