2021-03-03

java 1.8

接口    关键字interface和implements

final修饰的变量赋值有三种方式:执行顺序,静态代码块,定义属性,构造代码块,也就是static{},赋初始值,static可以省略,只用{},然后是构造函数,如果被final修饰,则构造函数不能赋值。被final修饰的对象,仅仅是引用不能改变,但内部的属性可以修改。

接口中可以定义变量,默认的是 public static final修饰,自定义修饰无效,可以直接省略所有修饰符。实现类中可以直接使用属性值,用法和自生属性一样,不用示例去访问。但用实例和类名可以访问,接口中属性值只能直接赋值,不支持构造代码块和构造函数。private和protected修饰会报错。接口对外开放,自身的定义,所以都必须是public。

接口中可以定义静态方法,但只能通过类名加方法名访问,因为静态方法不能被继承也不能被实现,所以只用定义的类才拥有该方法。

接口中可以定义默认方法,用于扩展接口的功能,不用修改所有的实现类,用default修饰,在实现类的实例中可以直接使用,如果实现的多个接口中有相同的default方法,则实现类必须重写该方法。否则会编译报错。

接口可以继承接口,同名方法可以正常使用。接口用extends继承接口。

接口方法的修饰词默认是public,且只能为public,private和protected会报错,缺省默认为public。

实现多个接口的时候用逗号,隔开。

 

抽象类     关键字abstract class

抽象类不能直接实例化。

抽象类定义public abstract class + 类名,需要使用class关键字,子类使用extends继承抽象类,extends末尾有一个s。

抽象方法不能是静态的。

抽象类的抽象方法不能是private,可以是protected和缺省。

抽象类可以实现接口,且可以把接口的方法定义为抽象方法。

抽象类可以继承抽象类,抽象类可以不用实现被继承的抽象类方法。

普通类也是使用extends继承抽象类。

 

枚举类     关键字enum

枚举类编译后生成.class文件,反编译后是一个类,继承java.lang.Enum类。

枚举类型不能继承其它的类,因为已经继承了Enum类。

构造函数只能为私有,private修饰。属性和其它方法可以用protected,public和缺省。

访问枚举类型,使用类名.values(),将枚举类转变为一个枚举类型的数组,Light[] L = Light.values();for (Light aLight : Light.values()){}。values并不是Enum类中的方法,是编译器插入的static方法,enum实例向上转型为父类Enum时候,values()就不可访问。

 

注解类    关键字Annotation,使用@interface声明注解

1.@Target,表示注解使用的位置,ElementType.CONSTRUCTOR(构造函数),METHOD(方法),PARAMETER(方法参数),LOCAL_VARIABLE(局部变量),FIELD(字段,枚举的常量),ANNOTATION_TYPE(注解),PACKAGE,TYPE(类,接口,枚举,注解),jdk1.8新增TYPE_PARAMETER,标注类型参数,TYPE_USE可以标注任何类型名称

2.@Retention,存在的时间,RetentionPolicy.SOURCE,CLASS,RUNTIME,源码,编译,运行时,编译阶段的源码阶段注解依旧有效。

3.@Documented,加上此注解后,被修饰的注解使用后会被加入到javadoc中,javadoc是java文档,写在类和方法上面的注释,包括摘要,用途,时间,参数,版本,链接,返回值,异常等等信息,通过idea的tools->generate Javadoc可以导出文档,可以是html格式的。正常情况下,javadoc不包含注解信息。

4.@Inherited 继承,a类使用了被@Inherited元注解修饰的注解,那么继承了a类的子类也拥有该注解,即a使用了注解,b也继承了该注解。但是接口不会继承接口的注解,类不会继承接口的注解。

注解的作用,帮助编译检查,例如@override,@SuppringsWarnings注解,利用默认值,全局配置信息,与场景有关的使用注解保存,与场景无关的用xml,yuml等文件保存。可以利用反射自定义注解处理器,用注解中的信息生成实例,或者帮助处理其他事情。可以添加到javadoc中,可以作为标识。

@Target(ElementType.PACKAGE)

@Retention(RetentionPolicy.CLASS)

public @interface Annotation {

    String value() default "aa";

}

//使用

@Annotation(value = "bb")

 

@Documented

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.ANNOTATION_TYPE)

public @interface Target {

    ElementType[] value();

}

 

public <@TypeParameterAnnotation U> T foo(T t) {

        return null;

}

 

//TYPE_USE可以使用在任何地方

  @Target(ElementType.TYPE_USE)

    @Retention(RetentionPolicy.RUNTIME)

    public @interface TypeUseAnnotation {

         

    }

     

    public static @TypeUseAnnotation class TypeUseClass<@TypeUseAnnotation T> extends @TypeUseAnnotation Object {

        public void foo(@TypeUseAnnotation T t) throws @TypeUseAnnotation Exception {

             

        }

    }

 

a.compareTo(b), a>b返回正数,a=b返回0,a<b返回负数。

 

 

package-info.java文件手动创建,命名智能由字母数字,下划线和$组成,这里有-,命名是无效的,因此在类里面也定义不了public class package-info,因为‘-’是无效的字符,

package-info.java用来添加包级注解,友好类和包常量,缺省值为友好类和友好常量,文件中不能使用任何范围修饰符public,protected,private,只能是缺省值,称为包类,包公共使用的类,强调的是包访问权限,包常量定义在友好类中,java文件中不能直接定义变量。提供包注释,共三种功能。包级注释可以对整个包起到影响,定义的友好类在包中和普通类一样使用。

/** 

   *注释写这里

   * Domain classes used to produce the JSON and XML output for the RESTful services. 

   * <p> * These classes contain the JAXB annotations. * 

   * @since 1.0 

   * @version 1.1 

*/

@PkgAnnotation  //注解写这里

package com.company;  

interface car{}

class people{}

Package pkg = Package.getPackage("com.company");

Annotation[] annotations = pkg.getAnnotations();  //通过这个方式获取包的注解

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值