知识屋:更实用的电脑技术知识网站
所在位置:首页 > 科技

JAVA 基础 JVM JDK JRE 编写 编译 运行 注释 注解

发表时间:2022-03-25来源:网络

一、JVM  虚拟机

   java虚拟机:超级大翻译,java跨平台就靠它了,把java代码翻译到各种不同的操作系统。我们写的所有java代码都是在jvm上运行。java程序是通用的,但是每个平台对应的JVM是不一样的。

二、JRE(Java Runtime Environment) 和 JDK (Java development kit)

java运行时的环境,已经包含了JVM 和运行时所需要的核心类库。如果要运行一个已有的java程序,只需要安装JRE就可以了。

JDK是java程序开发工具包,包含完整的运行工具JRE和 开发人员使用的工具。如果要开发Java程序,必须安装JDK

三、三者包含关系

四、JAVA程序开发步骤:编写、编译(用javac.exe编译器把源代码转换成JVM看得懂的代码)、运行(JVM用java.exe解释器运行字节码文件)

说明:我们编写的源程序 都是 .java,经过编译器编译后,即用javac.exe编译器把源代码转换成JVM看得懂的代码,就是字节码文件(.class),JVM用java.exe解释器运行的就是字节码文件。

exp:编写HelloWorld (记事本编译)

(1)编写源程序(新建记事本,改后缀名为.java,写代码)

记事本编写源码要点:

     一个记事本可以写多个类,但是只有一个类名可以声明为public,这个声明为public的类名必须和记事本文件名一样,否则报错。编译后的字节码文件(.class)的名字就是记事本中的类名(这里类名HelloWorld)。

类是Java当中所有源代码的基本组织单位。多个相似功能的类源文件(.java文件)可以合并成一个package(一般按照一定的设计模式来确定包的内容,比如MVC等等)。

(2)编译  打开命令提示符,将位置转到.java源程序所在的目录

语法:javac java源码文件 

比如  javac HelloWorld.java   即可完成对此目录下HelloWorld的编译(javac添加过环境变量,所以哪里都可以用),编译之后,会在同目录生成 一个以类名字命名的.class(即HelloWorld.class)文件。如果原java文件中有多个类,自然编译后就会产生多个类对应的多个字节码文件.class

特别注意:源码文件有.java后缀

(3)运行  继续在命令提示符中

语法:java 类名(无后缀)   //java是解释器,添加过环境变量,因此可直接用java.exe。

注意:只能执行有main方法的字节码文件(.class)。

exp: java HelloWorld   //即可执行程序

五、JAVA注释  单行注释  多行注释  文档注释

代码中,不参与编译的内容就是注释。可见编译以后生成的.class结尾的字节码文件中不包含注释

注释的作用:

1、对所写的程序进行解释活命,增强代码可读性。毕竟几个月后,可能自己也看不懂自己的代码了

2、调试缩写的代码。(可以将自己决定有问题的代码注掉)

注释格式:

单行注释  \\

多行注释  /*.... */

重点:文档注释(java特有的注释)

格式:  /**

            @author  指定java程序作者

            @version  指定源文件版本

          */

说明:文档注释内容可以被JDK提供的工具javadoc解析(java目录里面可以看到javadoc),生成一套以网页文件形式体现的该程序的说明文档。javac不解析文档注释,所以文档注释依然不会被编译。

注意:javadoc解析的类,需要声明为public

解析文档注释方法:

命令提示符进入要解析的java文件所在目录

javadoc -d 自定义名字 -author -version 要解析的java文件(带后缀)

解析完成后会生成一个刚刚 自定义名字命名的文件夹,会生成一个网页文件。这个文件会结合文档注释和类的代码生成一个类的说明文件。(即API文档)

六、注解Annotation 

6.1概述

    从JDK 5.0开始, Java增加了对元数据(MetaData)的支持,也就是Annotation(注解).

    Annotation其实就是代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过使用Annotation,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证或者进行部署。

    Annotation可以像修饰符一样被使用,可用于修饰包,类,构造器,方法,成员变量,参数,局部变量的声明,这些信息被保存在Annotation的"name=value"对中。

    在JavaSE中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。

     在JavaEE/Android中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替JavaEEl旧版中所遗留的繁冗代码和XML配置等。

     未来的开发模式都是基于注解的, JPA是基于注解的, Spring2.5以上都是基于注解的, Hibernate3.x以后也是基于注解的,现在的Struts2有一部分也是基于注解的了,注解是一种趋势,一定程度上可以说:框架=注解+反射+设计模式。

6.2 Annotation的使用

1、文档注解     就是上面的文档注释

@author  标明开发该类模块的作者,多个作者之间使用,分割

@version  标明该类模块的版本@see参考转向,也就是相关主题

@since  从哪个版本开始增加的

@param  对方法中某参数的说明,如果没有参数就不能写

@return  对方法返回值的说明,如果方法的返回值类型是void就不能写

@exception对方法可能抛出的异常进行说明,如果方法没有用throws显式抛出的异常就不能写.

    其中

@param @return和@exception这三个标记都是只用于方法的。

@param的格式要求: @param形参名  形参类型  形参说明

@return的格式要求: @return返回值类型  返回值说明

@exception的格式要求: @exception   异常类型  异常说明

@param和@exception可以并列多个

exp:

2、编译时进行格式检查(JDK内置的三个基本注解)

@Override:限定重写父类方法,该注解只能用于方法

说明:使用了@Override注解,IDEA在编译的时候就会校验,如果不是重写,就会报错

@Deprecated:用于表示所修饰的元素(类,方法,构造器等)已过时。通常是因为所修饰的结构危险或存在更好的选择

说明:过时了,但并不影响使用(因为要兼容老项目),该注解就是提示有新的方案可以使用

@SuppressWarnings:抑制编译器警告

语法:@SuppressWarnings("str值1","str值2"...) 

exp:@SuppressWarnings("unused","rawtypes"...)  //忽略普通警告和泛型警告

说明:加了此注解,就不会有警告了,看着舒服

3、跟踪代码的依赖性,实现替代配置文件功能

Serlvet3.0提供了注解(annotation),使得不再需要在web.xml文件中进行Serlvet的部署

6.3、自定义注解 (参照@SuppressWarnings定义)

1、介绍

(1)定义新的Annotation类型使用@interface关键字

(2)自定义注解自动继承了java.lang.annotation.Annotation接口

(3)Annotation的成员变量在Annotation定义中以无参数方法的形式来声明。其方法名和返回值定义了该成员的名字和类型。我们称为配置参数。类型只能是八种基本数据类型、String类型、Class类型、enum类型、Annotation类型.以上所有类型的数组。

(4)可以在定义Annotation的成员变量时为其指定初始值,指定成员变量的初始直可使用default关键字

(5)如果只有一个参数成员,建议使用参数名为value

(6)如果定义的注解含有配置参数,那么使用时必须指定参数值,除非它有默认值。格式是“参数名=参数值”,如果只有一个参数成员,且名称为value,可以省略"value="

(7)没有成员定义的Annotation称为标记(比如@Override就是标记;包含成员变量的Annotation称为元数据Annotation

注意: 自定义注解必须配上注解的信息处理流程(使用反射)才有意义。

2、自定义注解的方法

(1)IDEA对应模块的包下,右键,new class, 然后Kind选择Annotation

 

语法:

public @interface 自定义注解名{

  String value() 【default 默认值】;

}

//后面的某个需要注释的地方

@自定义注解名(参数名="参数值")  //如果有默认值,就可以空参了。当然也允许不用默认值,自己修改一个值

说明:

(1)内部定义成员,通常用value表示

(2)可以指定成员的默认值,使用default定义

(3)如果自定义注解没有成员,表明是一个标识作用

注意:如果注解有成员,在使用注解时,需要指明成员的值(除非有默认值)

6.4JDK中的元注解      对现有的注解进行解释说明的注解

1、元注解简介

(1)JDK的元Annotation用于修饰其他Annotation定义.元注解位于注解的定义的上方

(2)JDK5.0提供了4个标准的meta-annotation类型,分别是:Retention(生命周期)、Target()、Documented、Inherited

同理,元数据的理解(修饰现有数据的数据):String name = "captain"; //captain是数据,String(修饰数据类型) 和 name(修饰数据变量名) 他们就是元数据

说明:自定义注解一般都会用到@Retention 和 @Target 这两个元注解

2、元注解介绍

(1)@Retention  用于指定注解的生命周期  3种

语法:@retention(RetentionPolicy.SOURCE/CLASS/RUNTIME) //RetentionPolicy是定义在retention中的枚举类

public enum RetentionPolicy{

SOURCE,//说明不会编译(编译时就直接丢弃的注释,生成的class文件就没这些注释)

CLASS,//默认行为,编译的时候会编译,但运行的时候,不会加载进内存(不会运行)

RUNTIME //要编译,同时加载进内存,反射可以获取,就可以和代码互动起来,实现配置功能

}

(2)@Target: 包含一个名为value的成员变量,用于修饰注解定义,用于指定被修饰的注解能用于修饰哪些程序元素。

语法:  @Target(ElementType.值) //单个值情况

           @Target(value={值1【,值2,值3...】}) //多个值情况

说明:默认情况,默认这个注解可以用于任何位置

(3)@Documented  用于指定所修饰的注解将被javadoc工具提取成文档,保留下来。默认情况下,javadoc不包括注解。

注意:定义为Documented的注解必须设置Retention值为RUNTIME

exp:Deprecated注解(过时),用了@Documented,因此Deprecated会被保留下来。

@Deprecated 修饰了Date类

javadoc解析的Date的API文档里面,就保留下了@Deprecated

(4)@Inherited  修饰的注解将具有继承性,如果某个类使用了被@Inherited修饰的注解,则子类将自动具有该注解。

极少使用

6.5 JDK8中注解的新特性:可重复注解、类型注解

1、可重复注解    允许在一个位置使用同名,不同值的注解

2、类型注解    

ELementType.TYPE_PARAMETER表示该注解能写在类型变量的声明语句中(如:泛型声明)

ELementType.TYPE_USE表示该注解能写在使用类型的任何语句中。

说明:以上作为 @Target的值之一,放进去以后, @Target修饰的注解可以用来修饰变量等

收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜