小白入门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系列。有一个很清晰的知识结构。好啦,本文就到此为止,希望能够对各位小伙伴有所帮助哦!

相关推荐
考虑考虑8 小时前
Jpa使用union all
java·spring boot·后端
用户3721574261358 小时前
Java 实现 Excel 与 TXT 文本高效互转
java
浮游本尊9 小时前
Java学习第22天 - 云原生与容器化
java
渣哥11 小时前
原来 Java 里线程安全集合有这么多种
java
间彧11 小时前
Spring Boot集成Spring Security完整指南
java
间彧11 小时前
Spring Secutiy基本原理及工作流程
java
Java水解13 小时前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
洛小豆15 小时前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试
前端小张同学15 小时前
服务器上如何搭建jenkins 服务CI/CD😎😎
java·后端
ytadpole15 小时前
Spring Cloud Gateway:一次不规范 URL 引发的路由转发404问题排查
java·后端