Java面试系列09(注解、可变参数、foreach、枚举)


//注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface test {
public String print() default "99";
String value() ;
int str = 5;

}


//注解:
//承载于方法、属性、类上的信息。
Java中的常见注解:
JDK:
@Override 此方法覆盖父类方法
@Deprecated 表示此方法一过时,不建议使用
@SuppressWarnings 表示忽略某种警告在后面加括号,里面放警告信息。


注解的分类:
按照来源:JDK的、第三方的、自定义的
按照运行机制:源码注释、编译时注释、运行时注释(存活周期不同)


自定义注解的语法要求:
public @interface Description{
String print();
String value();
}
//使用@interface关键字定义注解
//成员以无参无异常方式声明,且类型受限,只能是基本类型和String、Annotation、Enum
//如果注解只有一个成员,则成员名必须取名为value(),在使用时可以忽略成员名和=
注解可以没有成员,没有成员的注解称为标识注解
//注解没有构造函数
//定义注解必须是public类型的(所以,注解不属于类的范畴)

元注解(用来修饰注解的,注解的注解)
四种:
@Inherited,表示注解可以被继承
@Documented,表示生成javadoc的时候会包含此注解
@Retention,表示注解的生命周期
三个值:SOURCE,只存在于源码
CLASS,可以被编译入字节码文件
RUNTIME,可以被写入字节码文件(运行时存在,通过反射读取)
@Target,注解的作用域(可以使用的范围)(只能存在一个)
七个值:
CONSTRUCTION,构造方法
FIELD,字段
LOCAL_VARIABLE,局部变量
METHOD,方法
PACKAGE,包
PARAMETER,参数
TYPE,类、接口。

public class Test1{
public static void main(String[] args) throws NoSuchMethodException, SecurityException{
A a = new A();
Class<? extends A> aCla = a.getClass();
Method printMe = aCla.getDeclaredMethod("print", int.class,String.class,char.class);
test AprTest = printMe.getAnnotation(test.class);
a.value = Integer.valueOf(AprTest.value());
a.print = Integer.parseInt(AprTest.print());
a.str = AprTest.str+"";
System.out.println(a);
}

}

class A{
int value;
int print;
String str;
@test(value = "98")
private void print(int a, String str,char cha) {}
public String toString() {
return str +' '+ value+' ' + print;

}
}

可变参数:

public void show(int...a)

实际上就是个数组

和数组的操作一样。

foreach:

for(数据类型   变量:被便利的数据)

枚举:

public enum Gender{

  Man,Woman;

}

其中每一个枚举元素都是该枚举类型的一个实例

获取枚举类型中的对象:
1, Gender gender = Gender.Man;
2, Gender gender = Gender.WoMan;
3, for(Gender g : Gender.values()){
syso(g);//Man,WoMan
}

Enum类和enum关键字的区别
1.使用enum关键字定义的枚举类型,实际上就相当于定义了一个类,此类继承了java.lang.Enum类
2.每一个枚举值都是一个枚举类型的实例,它们被预设为public static final

Enum类的只有一个受保护的构造方法
protectd Enum(String name,int ordinal)
ordinal: 枚举元素的编号
实际上对于每一个枚举元素一旦声明之后,就表示自动调用此构造方法,所有的编号采用自动编号的方式进行(编号从0开始);

使用valueOf()方法,通过枚举类可以找到枚举中一个指定的对象
public enum Color{
RED,BLUE;
}
获得枚举类型对象的俩种方式:
第一种方式:
String s = "RED";
Color red = Color.valueOf(s);
第二种方式:
Color red = Color.RED;

属性和方法必须定义在元素列表声明之后
public enum Color{
RED,BLUE;
private String name;
public String getName(){
return this.name;
}
}

1.枚举的构造方法只能定义在元素列表之后
2.枚举类型的构造方法只能是private的,不写默认也是private
3.元素如果需要调用有参构造方法,则在元素后面加上"(参数)"

枚举隐式继承于Enum因此,无法再继承其他类

原文地址:https://www.cnblogs.com/mcmx/p/11342014.html