HelloWorld
// cmd 使用 javac 把.java文件编译为.class的二进制文件
// 创建一个类
public class HelloWorld {
public static void main(String[] args){
System.out.println("Hello World!");
int i = 0;
System.out.println(i); // 变量
}
}# 编译
javac HelloWorld.java
# 运行
java HelloWorld # 可以不带后缀- jdk 是什么
- jvm 虚拟机:运行 java 的地方
- 核心类库: java 已经写好的方法
- 开发工具: javac,java,jdb...
- jre 是什么
- jre 是运行环境
- jvm 核心类库 运行工具
- jdk,jre,jvm 的关系
- jdk 包含 jre
- jre 包含 jvm
字面量分类
整数: 666, -88
小数: 13.14, -5.12
字符串: "Hello" (双引号包括)
字符: 'A' '我' (单引号)
布尔类型: true
空类型: null
变量
整型(4 种) 浮点型(2 种) 字符型(1 种) 布尔型(1 种)
整数类型
- byte:8 位,范围为 -128 到 127。
- short:16 位,范围为 -32,768 到 32,767。
- int:32 位,范围为 -2^31 到 2^31-1。
- long:64 位,范围为 -2^63 到 2^63-1。
浮点数类型
- float:32 位,单精度浮点数 3.4028235 × 10^38。
- double:64 位,双精度浮点数 1.7976931348623157 × 10^308。 字符类型
- char:16 位,存储单个字符,使用 Unicode 编码,范围为 0 到 65,535。
public class Variable {
public static void main(String[] args) {
// 基本数据类型示例
// 整数类型
byte exampleByte = 100; // 示例的 byte 类型变量
short exampleShort = 30000; // 示例的 short 类型变量
int exampleInt = 100000; // 示例的 int 类型变量
long exampleLong = 10000000000L; // 示例的 long 类型变量(注意 'L' 后缀)
// 浮点数类型
float exampleFloat = 10.5f; // 示例的 float 类型变量(注意 'f' 后缀)
double exampleDouble = 20.99; // 示例的 double 类型变量
// 字符类型
char exampleChar = 'A'; // 示例的 char 类型变量
// 布尔类型
boolean exampleBoolean = true; // 示例的 boolean 类型变量
// 引用数据类型示例
// 类类型
String exampleString = "Hello, Java!"; // 示例的 String 类型变量
// 接口类型(实现接口的类)
// List<String> exampleList = new ArrayList<>(); // 示例的 List 接口变量(需要 import java.util.*)
// 数组类型
int[] exampleArray = { 1, 2, 3, 4, 5 }; // 示例的 int 数组
// 枚举类型
enum Days {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
Days exampleDay = Days.MONDAY; // 示例的枚举类型变量
}
}类型转换
int a = 110;
long b = 113;
// 低精度转高精度,由于 long 的范围比 int 大,所以可以自动转
b = a;
// 高精度住低精度,由于 long 的范围比 int 大,所以需要强制转
a = (int)b;隐式转换
数值类型:byte -> short -> int -> long -> float -> double
字符类型转整型:char -> int
如何提取文档注释
假设有以下一段代码,我们需要生成关于代码的文档说明。那么就可以使用 JDK 中所提供的 javadoc 命令来提取代码的文档注释。
/**
* 第一个 Java 程序
* 这是初学者基本都会写的一个程序
* @author tomiaa
* @version 1.0
*/
public class HelloWorld {
/**
* 主函数:程序入口
* @param args 主函数参数列表
*/
public static void main(String[] args){
System.out.println("Hello World!");
}
}然后利用以下命令就可以生成我们的文档注释。
javadoc -d helloworld -author -version -encoding UTF-8 HelloWorld.java-d:指定生成文档的目录 -author:显示作者信息 -version:显示版本信息 -encoding:指定编码格式
生成的文档会保存在 helloworld 目录下。
jar 文件的创建
准备一个能输出 Hello World! 的 Java 源代码,命名为 HelloWorld.java
public class HelloWorld {
public static void main(String[] args){
System.out.println("Hello World!");
}
}javac 命令对该文件进行编译,然后会生成 HelloWorld.class 字节码文件。
javac HelloWorld.java然后,利用 jar 命令来对生成的字节码文件进行打包。
jar -cvf HelloWorld.jar HelloWorld.class其中 c 表示创建一个新 jar 包,v 表示创建过程中打印创建过程中的信息,f 则表示对新生成的 jar 命名。
最后,利用以下命令来运行 jar 包。
java -jar hello.jar不过并不会顺利出现我们想要的结果,此时会报错 hello.jar 中没有主清单属性。这是因为我们还没有在 MENIFEST.MF 文件中添加 Main-Class 属性。
用压缩软件打开刚创建的 hello.jar,里边除了 HelloWorld.class 文件之外,还会多一个 META-INF 文件夹,里边还有一个 MENIFEST.MF 文件,此时我们只需要用编辑器打开该文件,然后在文件中加入以下代码。(记得添加之后要保证整个文件最后保留一行空行)
Main-Class: HelloWorld添加完成之后,再次运行 java -jar hello.jar ,就可以成功在控制台打印 Hello World! 了。
包
假设现在有这么一种情况,诸葛亮、周瑜、曹操共同开发一款程序。其中,周瑜和曹操均在自己代码模块中写了一个 PublicUtil 类,现在诸葛亮要调用周瑜和曹操模块中代码,需要同时用到他们中的 PublicUtil 类,这时候就犯难了,诸葛亮在他的代码中使用 PublicUtil 类时,该怎么区分是调用周瑜的,还是调用的曹操的呢?
针对这个问题,开发 Java 的前辈们当然也想到了。于是,他们在 Java 中定义了一种名字空间,也就是我们今天要讲的包:package。通过使用包机制,就十分容易区别类名的命名空间了。
一般包名的规则为:公司域名反写 + 包的作用,而且全部都要用英文小写。
假设曹操的 PublicUtil 类代码如下:
// 申明包名
package caocao;
public class PublicUtil{
……
}周瑜的 PublicUtil 类代码如下:
// 申明包名
package zhouyu;
public class PublicUtil{
……
}此时,如果诸葛亮要同时使用他们俩代码中的 PublicUtil 类,此时就可以通过引入他们俩的包,然后通过使用 包名.类名 的引用方式来进行区分即可。
package zhugeliang;
import caocao;
import zhouyu;
public class Util{
// 使用周瑜代码
zhouyu.PublicUtil.xxx();
……
// 使用曹操代码
caocao.PublicUtil.xxx();
……
}以上代码中的 import 你可能也在其他代码中见到过,但你不知道啥作用。其实它就是为了包的使用而生,如果我要使用另一个人的包,那该怎么做呢?其实很简单,只需要在程序中使用关键字 import 即可完成包的导入。
通过使用包,可以达到以下的作用:
- 将功能类似或或相关的类以及接口组织放在同一个包中,方便类的查找与使用。
- 包也像文件夹一样,采用了树形目录的存储方式。同一个包中的类名不同,不同包中的类名可以相同。当同时调用两个不同包中的同一类名的类时,通过加上完整的包名就可以加以区分,从而避免类名冲突。
- 同时包也限定了访问权限,只有拥有包访问权限的类才能间接去访问包中的类。