一、前言

1.1、JDK、JRE、JVM的关系

JDK是开发工具包,JRE是运行时环境,JVM是虚拟机(JVM属于JRE的一部分)。
JDK:开发工具包( 开发者电脑上使用,用与程序的开发和编译 )
JRE:运行时环境( 开发者和运行者电脑上使用,用于程序的运行 )
在开发者电脑上:需要安装JDK+JRE。
在运行者电脑上:需要安装JRE。

1.2、javac.exe与java.exe

javac.exe负责编译:.java源文件的编译器,将.java源文件编译成.class字节码文件。
java.exe负责运行:.class字节码文件的执行器,具体的用法如下:

//******************************************//
创建一个HelloWorld.java源文件,文件内容如下:
public class HelloWorld {                      //定义一个公开的类,起名为HelloWorld
    public static void main(String[] args) {   //定义一个公开的静态的主方法,(String[] args)为参数列表
        // write your code here                //主方法是程序的执行入口,是SUN规定的固定写法
        System.out.printf("HelloWorld");       //java语句,作用是向控制台输出一串字符串
    }
}
//******************************************//
在CMD中进入到HelloWorld.java文件所在的目录下
执行命令:javac ./HelloWorld.java       # 编译 xxx.java 文件
运行程序:java HelloWorld               # 运行 xxx.class 文件
//******************************************//
注意1:使用java时,不能带路径,即不能带后缀.class
注意2:java的底层是使用C++写的,并不是C语言
注意3:类的{}括住的部分叫类体,方法的{}括住部分叫方法体,System.out.printf("HelloWorld");叫java语句。

1.3、java程序的执行过程

java.exe命令会启动JVM,JVM启动之后会启动类加载器ClassLoader,ClassLoader从某个路径下搜索xxx.class文件并执行。

环境变量classpath配置的情况下,ClassLoader从环境变量指定的目录下搜索xxx.class文件。
环境变量classpath不配置的情况下,ClassLoader从当前目录下搜索xxx.class文件。

注意1:配置classpath,就不会在当前目录下搜索了,必须把xxx.class拷贝到指定目录才能执行。
注意2:可以配置classpath的值为  .;yourdir  这样就可以先搜索当前目录,然后搜索指定目录了。
注意3:网上有的人写的程序一部分放在了当前目录下,一部分放在了classpath指定的目录下,就是采用了注意2的配置方式,如果你仅使用当前目录作为搜索路径就运行不了。

二、JAVA安装

查看jdk版本:java -version
IDEA2021:添加上一步下一步快捷键到工具栏

三、JAVA基础

3.1、注释

-单行注释和多行注释这里就不再过多叙述,其用法和C/C++的用法一样。
-javadoc注释如下:

/**
*  javadoc注释
*  javadoc注释
*  javadoc注释
*  javadoc注释
*/

以上是java特有的注释格式,该注释信息可以被javadoc.exe工具解析提取并生成帮助文档。

3.2、源文件

<1>源文件:
        一个 xxx.java 源文件当中的 public class 不是必须的。
        一个 xxx.java 源文件可以定义多个 class。每个 class 都会生成一个 .class字节码文件
        一个 xxx.java 源文件定义 public class 的话,只能定义一个,且类名必须与文件名一致。
        每个类中都可以编写main方法,即程序的入口:class A{}、class B{}
        # java A  /*执行类A中的main方法*/
        # java B  /*执行类B中的main方法*/
        java 后的类内必须有主方法,如果没写主方法,会出现运行错误。
        注意:编译后会出现一堆xxx.class文件,程序的执行都是针对这些文件的。
<2>"包"机制:
        作用:不同功能的类被分类到不同的软件包中,方便程序的管理。
        格式:package + 公司域名倒写 + 项目名 +模块名  // 注意要写在xxx.java文件首行。
        示例:org.apache.tomcat.core  //包名也是标识符,要求全部小写,须遵守标识符命名规则。
        说明:一个包对应一个目录,使用package之后,不在同一包/目录下的两个类之间的调用,要带上包名作为前缀,或者使用 import 关键字在代码前引入类。
<3>访问权限:
       
public、protected、private,为类内的三个访问控制符,其作用对于各类面向对象语言都几乎相同,这里不再叙述。
        public 和 缺省,为类的两种访问控制符,即public class可以被其它的包内的xxx.java import后使用。不带public的class,只能被同包下xxx.java 使用,而且还可以不用import。

3.3、命名规范

* 遵守驼峰命名方式:
        SystemService
        UserService
        CustomerService
* 类名、接口名:首字母大写,后面的每个单词字母大写
* 变量名、方法名:首字母小写,后面每个单词的首字母大写
* 常量名:全部大写

3.4、数据类型

* JAVA有两种数据类型
<1>基本数据类型
        整形型:byte、short、int、long
        浮点型:float、double
        布尔型:boolean
        字符型:char
        java中数据类型所占空间大小是固定的,如下所示:
        byte(1字节)、short(2字节)、int(4字节)、long(8字节)、
        float(4字节)、double(8字节)、boolean(1字节)、char(2字节)
<2>引用数据类型
        String.class     //SUN提供
        System.class  //SUN提供
        xxx.class        //程序员自己定义的
        所有的类类型都属于引用数据类型。JVM运行后,有自己管理的栈,堆等,几乎所有的类的对象都在存储在堆中,而对象的名字是一个在栈中的变量,它存储着对象的地址。(其实就类似C++的指针,只不过在JAVA里叫引用),注意:JAVA引用和C++引用完全不同。

3.5、转义字符

/*** => HelloWorld.java 源文件<= ***/
package com.company; 

public class HelloWorld { 
    public static void main(String[] args) {
        // \是转义字符,JDK中自带的native2ascii.exe可以将文字转为unicode编码形式
        // 中 的unicode编码是\u4e2d,反斜杠和u联合起来后面的一串数字是unicode编码
        char n1 = 'a';
        char n2 = '中';
        char n3 = '\n';
        char n4 = '\'';
        char n5 = '"';
        char n6 = '\\';
        char n7 = '\u4e2d';
        System.out.println(n7);
        System.out.println("\"杭州电子\"");
    }
}

/* 注意:一个.java文件只允许有一个公开类,且类名必须与文件名相同*/

3.6、导入包