zoukankan      html  css  js  c++  java
  • 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因此,无法再继承其他类

  • 相关阅读:
    UV动画
    使用RampTexture实现BRDF效果
    使用RampTexture来控制diffuse shading
    Half Lambert
    Lamber算法 & SurfaceShader自定义光照
    What is _MainTex_ST ?
    C# Enum,Int,String的互相转换
    Plugins in Unity
    Mono在Full AOT模式下的限制
    雾化
  • 原文地址:https://www.cnblogs.com/mcmx/p/11342014.html
Copyright © 2011-2022 走看看