三个Java内部定义注解,自己通过@interface定义注解的语法,元注解的四个规则,执行被注解的方法代码,以及读取写入以.properties结尾的配置文件

本文介绍了Java中如何自定义注解,包括注解的定义和成员变量,以及元注解的四个核心规则。同时,讲解了如何执行被注解的方法,并探讨了注解的继承性。此外,还详细阐述了如何读取和写入.properties配置文件。

注解(Annotation)

定义:给类,属性,方法贴一个标签,与注释不同。可以通过反射获取标注内容。

Java内部定义的注解
    
@Override    //检查该方法是否是重写方法。
    //如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误。
    
@Deprecated   //标记过时方法。如果使用该方法,会报编译警告

@SuppressWarnings   //指示编译器去忽略注解中声明的警告。

自定义注解

注解只能存在成员变量 语法:数据类型 变量名();

​ //使用@+注解名称 表示加上了注解,默认存在public

//默认public 
public @interface Myan {}  语法
     
    
 public @interface Myan {
     //注解里面有成员变量,使用注解时需要赋值,(name = "xxx")
     public String name();
     //如果没有传值,就代表name的值为""字符串
     public String name() default "";
 }


public @interface Myan {
    //使用注解时可以直接传值,就代表value = 值
    public int value();
} 

元注解(标记注解的注解)

一:

Retention    //定义元注解的生命周期

@Retention(RetentionPolicy.SOURCE) //表示接下来加了注解的代码只存在源代码里面(.java文件)
@Retention(RetentionPolicy.CLASS)  //只存在源代码/编译文件(.class文件)里面,当.class文件加载到jvm中去注解就没有了
@Retention(RetentionPolicy.RUNTIME)  //在运行期间都会存在

二:

Target            //规定元注解标注的位置

@Target(ElementType.TYPE)  // 类、接口(包括注释类型)或枚举声明

@Target(ElementType.FIELD)    //标记成员属性上
    
1.8新增
@Target(ElementType.TYPE_PARAMETER)   //标记在泛型<>里面

@Target(ElementType.TYPE_USE)    //标记在有返回值的方法上

三:

Documented   //代表注解会生成到文档说明里

四: 注解是否可以被继承

Inherited        //表示这个注解所有的子类都可以继承过去 
执行被注解的方法
    import java.lang.reflect.Method;

public class Test2 {

	// 执行带注解的方法
	public static void main(String[] args) {

		Class cls1 = Demo.class;

		try {
			Object obj = cls1.newInstance();

			// 获取里面所有方法
			Method[] method = cls1.getDeclaredMethods();

			for (Method m : method) {

				// 获取该方法上的注解
				MyAnno an = m.getAnnotation(MyAnno.class);
				if (null != an) {

					m.setAccessible(true);

					// 执行方法
					m.invoke(obj);
				}
			}
			System.out.println(cls1.isAnnotation());

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

.Properties(读取写入以.properties结尾的文件)

读取配置文件
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

public class Test1 {
//读取内容
	public static void main(String[] args) {

		String path = "user.properties";

		Properties pt = new Properties();

		try {
			// 将user.properties配置文件加载到pt对象里面
			pt.load(new FileInputStream(path));

			// 获取name值,通過key的值来获取 = 后面value值
			String name = pt.getProperty("name");
			System.out.println(name);

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值