大家好,今天小编关注到一个比较有意思的话题,就是关于java语言和p的问题,于是小编就整理了3个相关介绍Java语言和p的解答,让我们一起看看吧。
p!=NULL与p?
在C/C++中,遍历到最后一个节点时,p->next == NULL,但是 p->data,即数据域里还是有数值的,所以此时 p! =NULL。虽然NULL在J***a和PHP中写作null,但是,数据结构和具体语言是无关的,这个道理在J***a和PHP中也是一样的,p->next只是p的一部分,p->next为null,并不代表p为null
J***a的注解是什么原理?
首先,从一个简单的注解开始,@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
String value() default "";
}
使用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***ap和j***a反编译有何区别?
知道区别,需要知道几个名词。
源代码,是我们用某种语言编写的代码。
编译是将源代码转换成二进制执行代码的过程。j***a中将. j***a源文件通过编译成二进制. class文件。
反编译是指把二进制文件转换成源代码的过程。j***a提供了许多的反编译工具,例如JD-GUI图形化反编译器,在实际运用中,比较常用,还有JD-Eclipse反编译插件,JD-IntelliJ反编译插件,Jad反编译工具,XJad等等。
反汇编是指通过读取并翻译一个可执行文件的二进制码将这个可执行文件还原成代码。可执行文件从源代码编译过来,打开后并不能很好的识别探究。j***ap是jdk的自带的反解析工具,将可执行程序解析成汇编代码,更好的调试分析其中的过程。
到此,以上就是小编对于j***a语言和p的问题就介绍到这了,希望介绍关于j***a语言和p的3点解答对大家有用。