一、前言
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文件只允许有一个公开类,且类名必须与文件名相同*/