初识java
2021-3-1
| 2023-8-2
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property
 
notion image
Java最早是由SUN公司(已被Oracle收购)的詹姆斯·高斯林(Java之父)在上个世纪90年代初开发的一种编程语言,最初被命名为Oak,目标是针对小型家电设备的嵌入式应用,结果市场没啥反响。谁料到互联网的崛起,让Oak重新焕发了生机,于是SUN公司改造了Oak,在1995年以Java的名称正式发布,原因是Oak已经被人注册了,因此SUN注册了Java这个商标。
 
 
 
随着Java的发展,SUN给Java又分出了三个不同版本:
notion image
  • Java SE:Standard Edition
  • Java EE:Enterprise Edition
  • Java ME:Micro Edition
Java SE是标准版,包含标准的JVM和标准库;Java EE是企业版,它只是在Java SE的基础上加上了大量的API和库,以便方便开发Web应用、数据库、消息服务等,Java EE的应用使用的虚拟机和Java SE完全相同;Java ME就和Java SE不同,它是一个针对嵌入式设备的“瘦身版”,Java SE的标准库无法在Java ME上使用,Java ME的虚拟机也是“瘦身版”。
 
 

JDK、JRE、JVM

notion image
  • JDK:Java Development Kit【Java开发工具箱】
  • JRE:Java Runtime Environment【Java的运行时环境】
  • JVM:【Java虚拟机】
JRE是运行Java字节码的虚拟机。但是,如果只有Java源码,要编译成Java字节码,就需要JDK,因为JDK除了包含JRE,还提供了编译器、调试器等开发工具。
 
 

Java介于编译型语言和解释型语言之间

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

Java语言特性

  • 跨平台/可移植
    • Java程序并没有和底层的操作系统直接交互,程序实际上运行在jvm当中,JVM和操作系统交互,JVM屏蔽了操作系统之间的差异。但是有一个前提:不同的操作系统中必须安装不同版本的JVM
      在可移植性方面表现非常好,一次编译,到处运行。但是为了达到可移植,必须提前在操作系统中安装JREJRE有了之后才会有JVMJVM不能单独安装,这方面体验不是特别好。
  • Java号称:开源、免费、跨平台、纯面向对象。
  • 简单性:这里的简单说的是相对于C语言来说的,例如:C语言当中有指针,C++中多继承,java取消了指针的概念,取消了多继承,只支持单继承。
  • 支持多线程
  • 有一种特殊的机制:自动垃圾回收机制(GC机制),java运行过程当中有一个“垃圾回收器”一直在守护者。
 
 
 

Java语言的规范

  • JSR规范:Java Specification Request
  • JCP组织:Java Community Process
  • RI:Reference Implementation
  • TCK:Technology Compatibility Kit
为了保证Java语言的规范性,SUN公司搞了一个JSR规范,凡是想给Java平台加一个功能,比如说访问数据库的功能,大家要先创建一个JSR规范,定义好接口,这样,各个数据库厂商都按照规范写出Java驱动程序。负责审核JSR的组织就是JCP。
一个JSR规范发布时,为了让大家有个参考,还要同时发布一个“参考实现”,以及一个“兼容性测试套件”:比如有人提议要搞一个基于Java开发的消息服务器,光有提议不行,得贴出真正能跑的代码,这就是RI。如果有其他人也想开发这样一个消息服务器,如何保证这些消息服务器对开发者来说接口、功能都是相同的?所以还得提供TCK。通常来说,RI只是一个“能跑”的正确的代码,它不追求速度,所以,如果真正要选择一个Java的消息服务器,一般是没人用RI的,大家都会选择一个有竞争力的商用或开源产品。
 
 

Java安装

安转JDK
从下面官网下载JDK并安装:
我装的是JDK17
 
设置环境变量
windows操作系统在查找某个命令的时候是怎么查找的? 首先会从当前目录下找这个命令;当前目录下不存在这个命令的话,会去环境变量path指定的路径当中查找该命令;还是找不到则出现错误提示信息。path环境变量隶属于windows操作系统,这个环境变量主要用来指定命令的搜索路径。
 
以我的环境为例:
notion image
我的JDK安装路径为B:\Java\jdk17
 
  1. 设置一个JAVA_HOME的环境变量,它指向JDK的安装目录:
    1. notion image
  1. 然后,把JAVA_HOMEbin目录附加到系统环境变量PATH上: %JAVA_HOME%\bin (使用B:\Java\jdk17下的bin目录)
    1. notion image
  1. 打开命令提示符窗口,输入java -version ,测试
    1. notion image
 
JAVA_HOMEbin目录下的可执行文件:
  • java:这个可执行程序就是JVM,运行Java程序,就是启动JVM,然后让JVM执行指定的编译后的代码;
  • javacJava的编译器,用于把Java源码文件(以.java结尾)编译为Java字节码文件(以.class结尾)
  • jar:用于把一组.class文件打包成一个.jar文件,便于发布
  • javadoc:用于从Java源码中自动提取注释并生成文档
  • jdbJava调试器,用于开发阶段的运行调试
 
 

Java的加载与执行

Java开发的整个生命周期,包括两个重要的阶段,分别是:编译阶段和运行阶段
编译生成的程序被称为:字节码程序,编译生成的文件是:xxx.class文件
编译和运行可以在不同的操作系统中完成。
程序员在xxx.java文件中编写源代码,源代码必须符合java的语法,这些源代码就是高级语言。存放源代码的文件被称为源文件。
 
 
编译期:【在当前windows环境中完成】
  1. 在硬盘的某个位置创建一个xxx.java源文件
  1. 在源文件中编写符合java语法的源程序,然后保存
  1. 使用JDK中自带的javac.exe命令对以上的java源程序进行编译
    1. 编译的语法格式:进入DOS命令窗口,输入:javac 源文件路径(绝对路径/相对路径)
      • 编译通过:说明语法没有问题,在硬盘上生成一个或者多个字节码文件【xxx.class
      • 编译失败:说明源程序某个位置不符合java语法格式
注意:编译之后,其实java源文件删除不会影响程序的执行。最好不要将java源文件删除,因为程序最终运行效果不是预期效果的时候,需要重新修改java源代码,然后进行重新编译生成全新的class字节码文件,再重新运行字节码程序

 
运行期:【可以不在windows中完成,可以换一个操作系统,前提是该系统中安装java的运行时环境】
  • 打开命令窗口,在命令窗口中使用java.exe命令运行java程序,语法格式:java 类名
    • 注意:java这个命令使用的时候,java命令后面不是文件的路径,必须是一个“类名”,例如:
  • 以上程序的执行原理:
    • java.exe命令执行会启动:JVM
    • JVM启动之后,马上启动“类加载器-Class Loader”
    • ClassLoader负责去硬盘的“某个位置”上搜索“类名.class”字节码文件
    • 找不到这个.class文件,一定会出现程序异常现象;找到这个.class文件之后,将.class文件转换成"二进制",操作系统可以直接识别二进制,执行二进制码和底层的硬件平台进行交互。
    •  
      什么是类名?
      假设硬盘上有一个文件,叫做Hello.class,那么类名就叫做Hello。假设文件叫做Student.class,那么类名就叫做:Student
 
打开文本编辑器,输入以下代码:
notion image
notion image
 
 
notion image
 

java程序基本结构

 
注释
javadoc注释是比较专业的注释,该注释信息会被javadoc.exe工具解析提取并生成帮助文档
 
class
Java是面向对象的语言,一个程序的基本单位就是classclass是关键字
类名要求:
  • 类名必须以英文字母开头,后接字母,数字和下划线的组合
  • 习惯以大写字母开头
public是访问修饰符,表示该class是公开的。不写public也能编译,但是这个类将无法从命令行执行。
 
public class 和 class的区别:
  • 一个java源文件当中可以定义多个class
  • 一个java源文件当中publicclass不是必须的
  • 一个class会定义生成一个xxx.class字节码文件
  • 一个java源文件当中定义公开的类的话,只能有一个,并且该类名称必须和java源文件名称一致。
  • 每一个class当中都可以编写main方法,都可以设定程序的入口,
    • 想执行B.class中的main方法:java B 想执行X.class当中的main方法:java X
      注意:当在命令窗口中执行java Hello,要求Hello.class当中必须有主方法
 
method
class内部,可以定义若干方法(method):
notion image
这里的方法名是main,返回值是void,表示没有任何返回值。
public除了可以修饰class外,也可以修饰方法。而关键字static是另一个修饰符,它表示静态方法。Java入口程序规定的方法必须是:静态方法,方法名必须为main,括号内的参数必须是String数组
方法定义了一组执行语句,方法内部的代码将会被依次顺序执行,Java的每一行语句必须以分号结束。
 
 
  • Java
  • 受限玻尔兹曼机 RBM标识符与关键字
    目录