小白入门java基础-注解

一:介绍

Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的高级程序设计语言。

Java 可运行于多个平台,如 Windows, Mac OS 及其他多种 UNIX 版本的系统。Java语言编写的程序,在一次编译后,可以在多个系统平台上运行。

主要特性:

Java 语言是简单的:

Java 语言的语法与 C 语言和 C++ 语言很接近,使得大多数程序员很容易学习和使用。另一方面,Java 丢弃了 C++ 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java 语言不使用指针,而是引用。并提供了自动分配和回收内存空间,使得程序员不必为内存管理而担忧。

Java 语言是面向对象的:

Java 语言提供类、接口和继承等面向对象的特性,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为 implements)。Java 语言全面支持动态绑定,而 C++语言只对虚函数使用动态绑定。总之,Java语言是一个纯的面向对象程序设计语言。

Java语言是分布式的:

Java 语言支持 Internet 应用的开发,在基本的 Java 应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括 URL、URLConnection、Socket、ServerSocket 等。Java 的 RMI(远程方法激活)机制也是开发分布式应用的重要手段。

Java 语言是健壮的:

Java 的强类型机制、异常处理、垃圾的自动收集等是 Java 程序健壮性的重要保证。对指针的丢弃是 Java 的明智选择。Java 的安全检查机制使得 Java 更具健壮性。

Java语言是安全的:

Java通常被用在网络环境中,为此,Java 提供了一个安全机制以防恶意代码的攻击。除了Java 语言具有的许多安全特性以外,Java 对通过网络下载的类具有一个安全防范机制(类 ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类 SecurityManager)让 Java 应用设置安全哨兵。

Java 语言是体系结构中立的:

Java 程序(后缀为 java 的文件)在 Java 平台上被编译为体系结构中立的字节码格式(后缀为 class 的文件),然后可以在实现这个 Java 平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。

二:注解

1、什么是注解?

注解:说明与解释程序,给计算机看的。

注释:用文字描述程序,给程序员看的。

注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元秦进行说明,注释。

2、注解的作用

  • 编写文档:通过代码里标识的元数据朱成文档【生成文档doc文档】
  • 代码分析:通过代码里标识的元数据对代码进行分析【使用反射】
  • 编译检查:通过代码里标识的元数据让编译器能够实现基本的编译检查【override】

3、常见的内置注解

  • @override:检测被该注解标注的方法是否是继承自父类(接口)的。
  • @Deprecated:该注解标注的内容,表示已过时。
  • @suppresswarnings("all"):压制警告,一般写在类上面,压制该类中所有的警告。

4、自定义注解

分为以下两个内容组成:

1)元注解:用于描述注解的注解

  • @Target :描述注解能够作用的位置,ElementType 的取值如下:
    • TYPE:作用于类上
    • METHOD:作用于方法上
    • FIELD:作用于成员变量上
  • @Retention :描述注解被保留的阶段
    • @Retention(RetentionPolicy.RUNTIME)通常我们使用这个,保留到字节码文件中
  • @Documented :描述注解是否被抽取到api文档中
  • @Inherited :描述注解是否被子类继承

2)public @interface 注解名称{}

1.属性的返回值类型有下列取值

  • 基本数据类型
  • string
  • 枚举
  • 注解
  • 以上类型的数组

2.可以定义属性,在使用时需要给属性赋值

  • 如果定义属性时,使用default关键字给属性默认初始化值,则使用注解时,可以不进行属性的赋值。
  • 如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义值即可。
  • 数组赋值时,值使用(包裹。如果数组中只有一个值,则可以省略

备注:本质上是一个接口,该接口默认继承了 Annotation 接口

public interface MyAnno extends java.lang.annotation.Annotation {}

6、获取注解中的属性值

2)目录如下:

2)定义一个注解如下

java 复制代码
package cn.cats.annotation;

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

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface pro {
    String className();
    String methodName();
}

3)Person 和 Student 中的代码如下

java 复制代码
package cn.cats.annotation;

public class Person {
    public void eat(){
        System.out.println("eat...");
    }
}



package cn.cats.annotation;


public class Student {
    public void sleep(){
        System.out.println("sleep...");
    }
}

4)Test 类中代码如下

java 复制代码
package cn.cats.annotation;

import java.lang.reflect.Method;

@pro(className = "cn.cats.annotation.Person",methodName="eat")
public class Test {
    public static void main(String[] args) throws Exception {
        // 1.解析注解
        // 1.1获取该类的字节码文件对象
        Class reflectTestClass = Test.class;
        // 2.获取注解对象
        pro an = (pro) reflectTestClass.getAnnotation(pro.class);
        // 3.调用注解中的抽象方法,并获取返回值
        String className = an.className();
        String methodName = an.methodName();
        // 4.加载该类进内存
        Class cls = Class.forName(className);
        // 5.创建对象
        Object obj = cls.newInstance();
        // 6.获取方法对象
        Method method = cls.getMethod(methodName);
        // 7.执行方法
        method.invoke(obj);
    }
}

5)运行效果如下

三:结尾

注解是目前 java 开发中最基础与最重要的一个部分,在实际项目中,我们通常使用的是自定义注解,根据项目的需求,进行定义各种注解以应对各种场景。因此学好注解会让我们在后续的学习中,如Spring系列。有一个很清晰的知识结构。好啦,本文就到此为止,希望能够对各位小伙伴有所帮助哦!

相关推荐
原野心存几秒前
java基础进阶——继承、多态、异常捕获(2)
java·java基础知识·java代码审计
进阶的架构师5 分钟前
互联网Java工程师面试题及答案整理(2024年最新版)
java·开发语言
黄俊懿5 分钟前
【深入理解SpringCloud微服务】手写实现各种限流算法——固定时间窗、滑动时间窗、令牌桶算法、漏桶算法
java·后端·算法·spring cloud·微服务·架构
易辰君7 分钟前
python爬虫 - 深入requests模块
开发语言·爬虫·python
木子020414 分钟前
java高并发场景RabbitMQ的使用
java·开发语言
无夜_14 分钟前
Prototype(原型模式)
开发语言·c++
看到请催我学习15 分钟前
内存缓存和硬盘缓存
开发语言·前端·javascript·vue.js·缓存·ecmascript
夜雨翦春韭25 分钟前
【代码随想录Day29】贪心算法Part03
java·数据结构·算法·leetcode·贪心算法
大霞上仙1 小时前
jmeter学习(1)线程组与发送请求
java·学习·jmeter
笃励1 小时前
Java面试题二
java·开发语言·python