zoukankan      html  css  js  c++  java
  • Java

    简介

    Java介于编译型语言和解释型语言之间。编译型语言如C、C++,代码是直接编译成机器码执行,但是不同的平台(x86、ARM等)CPU的指令集不同,因此,需要编译出每一种平台的对应机器码。解释型语言如Python、Ruby没有这个问题,可以由解释器直接加载源码然后运行,代价是运行效率太低。而Java是将代码编译成一种“字节码”,它类似于抽象的CPU指令,然后,针对不同平台编写虚拟机,不同平台的虚拟机负责加载字节码并执行,这样就实现了“一次编写,到处运行”的效果。当然,这是针对Java开发者而言。对于虚拟机,需要为每个平台分别开发。为了保证不同平台、不同公司开发的虚拟机都能正确执行Java字节码,SUN公司制定了一系列的Java虚拟机规范(JVM)。从实践的角度看,JVM的兼容性做得非常好,低版本的Java字节码完全可以正常运行在高版本的JVM上。

    JRE就是运行Java字节码的虚拟机。但是,如果只有Java源码,要编译成Java字节码,就需要JDK,因为JDK除了包含JRE,还提供了编译器、调试器等开发工具。

    凡是想给Java平台加一个功能,比如说访问数据库的功能,大家要先创建一个JSR规范,定义好接口,这样,各个数据库厂商都按照规范写出Java驱动程序,开发者就不用担心自己写的数据库代码在MySQL上能跑,却不能跑在PostgreSQL上。而负责审核JSR的组织就是JCP

    一个Java源码只能定义一个public类型的class,并且class名称和文件名要完全一致,Java源码本质上是一个文本文件,我们需要先用javacHello.java编译成字节码文件Hello.class,然后,用java命令执行这个字节码文件

    classpath是JVM用到的一个环境变量,它用来指示JVM如何搜索class。因为Java是编译型语言,源码文件是.java,而编译后的.class文件才是真正可以被JVM执行的字节码。因此,JVM需要知道,如果要加载一个abc.xyz.Hello的类,应该去哪搜索对应的Hello.class文件。所以,classpath就是一组目录的集合,它设置的搜索路径与操作系统相关。

    jar包:如果有很多.class文件,散落在各层目录中,肯定不便于管理。如果能把目录打一个包,变成一个文件,就方便多了。jar包就是用来干这个事的,它可以把package组织的目录层级,以及各个目录下的所有文件(包括.class文件和其他文件)都打成一个jar文件,这样一来,无论是备份,还是发给客户,就简单多了。jar包实际上就是一个zip格式的压缩文件,而jar包相当于目录。如果我们要执行一个jar包的class,就可以把jar包放到classpath中。因为jar包就是zip包,所以,直接在资源管理器中,找到正确的目录,点击右键,在弹出的快捷菜单中选择“发送到”,“压缩(zipped)文件夹”,就制作了一个zip文件。然后,把后缀从.zip改为.jar,一个jar包就创建成功。

    Java使用包这种机制是为了防止命名冲突,访问控制,提供搜索和定位类、接口、枚举和注释等。一个包可以定义为一组互相联系的类型,为这些类型提供访问保护和命名空间管理的功能。包创建了新的命名空间,所以不会和其他包中的任何名字产生冲突。为了能够使用某一个包的成员,我们需要在java中明确导入该包。使用import语句可以完成此功能

    jar只是用于存放class的容器,它并不关心class之间的依赖。从Java 9开始引入的模块,主要是为了解决“依赖”这个问题。如果a.jar必须依赖另一个b.jar才能运行,那我们应该给a.jar加点说明啥的,让程序在编译和运行的时候能自动定位到b.jar,这种自带“依赖关系”的class容器就是模块。.jmod文件每一个都是一个模块,模块名就是文件名。模块之间的依赖关系已经被写入到模块内的module-info.class文件了。所有的模块都直接或间接地依赖java.base模块,只有java.base模块不依赖任何模块,它可以被看作是“根模块”,好比所有的类都是从Object直接或间接继承而来。

    jenkins

    Maven

    对java项目进行构建、依赖管理

    约定配置:

    • /src/main/java java源代码
    • /target 打包输出目录
    • /target/classes 编译输出目录

    pom是Maven工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等

    开始->validate->compile->test->package->verify->install->deploy

    validate:验证项目是否正确且所有必须信息是可用的
    compile:源代码编译在此阶段完成
    Test:使用适当的单元测试框架(例如JUnit)运行测试。
    package:创建JAR/WAR包如在 pom.xml 中定义提及的包
    verify:对集成测试的结果进行检查,以保证质量达标
    install:安装打包的项目到本地仓库,以供其他项目使用
    deploy:拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程

  • 相关阅读:
    js中两种定时器,setTimeout和setInterval的区别
    简单说 JavaScript实现雪花飘落效果
    CSS 浮动 float 属性
    使用jQuery做简单的图片轮播效果
    DIV+CSS中标签dl dt dd常用的用法
    CSS display的几个常用的属性值,inline , block, inline-block
    Confluence代码块(Code Block)宏
    salt总结
    快速搭建rabbitmq单节点并配置使用
    使用python脚本配置zabbix发送报警邮件
  • 原文地址:https://www.cnblogs.com/rjxu/p/13488049.html
Copyright © 2011-2022 走看看