大家好,今天小编关注到一个比较有意思的话题,就是关于java语言中注释格式的问题,于是小编就整理了3个相关介绍j***a语言中注释格式的解答,让我们一起看看吧。

  1. Java的注解是什么原理?
  2. Java项目中@Override是哪边的注解?什么作用?
  3. 前端既然能用TS写强类型和注解,为何不直接用JAVA?

J***a的注解是什么原理?

首先,从一个简单的注解开始,@Target(ElementType.TYPE)

java语言中注释格式-java语言中注释格式是什么
(图片来源网络,侵删)

@Retention(RetentionPolicy.RUNTIME)

public @interface Test {

java语言中注释格式-java语言中注释格式是什么
(图片来源网络,侵删)

String value() default "";

}

java语言中注释格式-java语言中注释格式是什么
(图片来源网络,侵删)

使用j***ap -verbose命令查看这个注解的class文件,发现这个注解被编译成了接口,并且继承了j***a.lang.annotation.Annotation接口,接口是不能直接实例化使用的,当在代码中使用这个注解,并使用getAnnotation方法获取注解信息时,JVM通过动态代理的方式生成一个实现了Test接口的代理对象实例,然后对该实例的属性赋值,value值就存在这个代理对象实例中。

如果顺着getAnnotation方法继续跟踪源代码,会发现创建代理对象是在AnnotationParser.j***a中实现的,这个类中有一个annotationForMap方法。在annotationForMap方法内部使用Proxy.newProxyInstance方法在运行时动态创建代理,AnnotationInvocationHandler实现了InvocationHandler接口,当调用代理对象的value()方法获取注解的value值,就会进入AnnotationInvocationHandler类中的invoke方法,深入invoke方***发现,获取value值最终是从AnnotationInvocationHandler类的memberValues属性中获取的,memberValues是一个Map类型,key是注解的属性名,这里就是“value”,value是使用注解时设置的值。

因为回答中不能插入源码做讲解***,更多详细内容可以关注『J***a实战技术』主页的原创文章《J***a注解是如何玩转的,面试官和我聊了半个小时》。

J***a项目中@Override是哪边的注解?什么作用?

@Override是J***a5的元数据,自动加上去的一个标志,告诉你说下面这个方法是从父类/接口 继承过来的,需要你重写一次,这样就可以方便你阅读,也不怕会忘记 @Override是伪代码,表示重写(当然不写也可以),不过写上有如下好处:

1>可以当注释用,方便阅读

2>编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错 比如你如果没写@Override而你下面的方法名又写错了,这时你的编译器是可以通过的(它以为这个方法是你的子类中自己增加的方法) 使用该标记是为了增强程序在编译时候的检查,如果该方法并不是一个覆盖父类的方法,在编译时编译器就会报告错误。 我只是大自然的搬运工。

前端既然能用TS写强类型和注解,为何不直接用J***A?

ts本身还是编译成js,j***a没有直接转的编译器。

浏览器又不认识j***a。如何写?

倒是后面wa***以后像go rust csharp都提供了直接浏览器运行的方式,可以直接写代码。

但是j***a貌似还没推出什么好方案吧

到此,以上就是小编对于j***a语言中注释格式的问题就介绍到这了,希望介绍关于j***a语言中注释格式的3点解答对大家有用。