红茶的个人站点

  • 首页
  • 专栏
  • 开发工具
  • 其它
  • 隐私政策
Awalon
Talk is cheap,show me the code.
  1. 首页
  2. 专栏
  3. Java编程笔记
  4. 正文

Java编程笔记0:Hello World

2022年1月10日 13119点热度 0人点赞 0条评论

5c9c3b3b392ac581.jpg

图源:Java Switch语句(用法详解)-java教程-PHP中文网

发现Java环境这块还是应该说一下的,回来补一篇。

传统方式

最传统最简单的编写和运行Java程序的方式是从网上下载JDK安装包,编写源码后直接用命令行执行程序。

现在有多种不同的公司出品的JDK(比如微软的基于OpenJDK出了一款),但学习的话还是推荐Oracle自家的:

  • Java Downloads | Oracle

安装没啥好说的,装好后可以在命令行下验证:

❯ java --version
openjdk 16.0.1 2021-04-20
OpenJDK Runtime Environment AdoptOpenJDK-16.0.1+9 (build 16.0.1+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK-16.0.1+9 (build 16.0.1+9, mixed mode, sharing)

可以使用java --help命令查看相关可用参数,如果输出结果包含乱码,可以通过添加用户环境变量JAVA_TOOL_OPTIONS,值设置为-Dfile.encoding=UTF-8的方式解决。

编写一个测试程序:

class Hello{
    public static void main(String[] args){
        System.out.println("Hello world!");
    }
}

命令行执行:

❯ java Hello.java
Hello world!

对于简单的代码这样做没有问题,但有时候我们需要使用标准库或其它第三方库,比如:

import ch1.cast2.Main;
class Reference1
{
    public static void main(String[] args) 
    {
        System.out.println("Hello World!");
        Main.main(new String[]{});
    }
}

当然,要引用的目标代码需要先编译成字节码(.class文件):

❯ javac ..\ch1\cast2\Main.java
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8

如果直接运行:

❯ java .\Reference1.java
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
.\Reference1.java:1: 错误: 程序包ch1.cast2不存在
import ch1.cast2.Main;
                ^
.\Reference1.java:7: 错误: 找不到符号
                Main.main();
                ^
  符号:   变量 Main
  位置: 类 Reference1
2 个错误
错误: 编译失败

如果出现乱码,见上面给出的乱码解决方案。

提示很明确,找不到包ch1.cast2,默认情况下,java程序会通过环境变量CLASSPATH中的路径来查找源码中引用的包。所以将目录代码所在的目录添加到环境变量CLASSPATH就可以解决。

image-20220110150530212

这里添加的内容为.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;D:\workspace\java\java-notebook。

CLASSPATH的值包含多个路径,用;分隔,最前边的.表示当前路径,之后的dt.jar和tools.jar代表标准库和相关工具,最后是我们要引用的代码所在的目录。

在JavaSE5之前安装JDK就必须配置CLASSPATH,但现在已经不用了,即使没有CLASSPATH,java也会自动检索当前路径和JAVA_HOME下的相关工具。

再次执行:

❯ java .\Reference1.java
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
Hello World!
Ã
2
2

当然,这么做很不方便,实际上除了教学用途外,很少有人直接用这种方式编译和执行Java程序,一般情况下我们都是使用IDE来开发和运行Java程序。

IDE

Java的IDE有很多,比如老牌的Eclipse(我许多年前用的这个)。不过现在喜欢用VSCode,所以就用VSC来举例。

如果编写简单代码,摸索着就能上手,很简单,如果遇到麻烦可以去官网:

  • Java in Visual Studio Code

用VSC编写简单Java代码也要求你使用package设置包名,否则不能编译通过,我不清楚这是为啥...

除了直接在目录中创建单个Java文件的“简单方式”以外,还可以利用插件创建“Java工程”:

image-20220110152616319

使用Ctrl+shift+P打开命令行,输入java,选取“创建Java项目”,然后选择一个目录后输入项目名称即可。

VSC会打开一个新的窗口,在原窗口中可以看到,项目以指定目录中以项目名作为子目录名的方式创建:

image-20220110152925986

Java项目中会自行创建三个目录:

  • bin,生成的字节码

  • lib,引用的第三方包

  • src,源码

之所以要使用这种方式编写Java程序,就是因为提供一些额外的辅助工具,可以方便地管理第三方包和自己的包。

比如如果要创建自己的包,一般情况下可能需要在CLASSPATH中的某个目录下创建xyz/icexmoon/java/notes/这样一层一层的目录,很麻烦。

如果要在Java工程中创建,只需要在左下的JAVA PROJECTS工具栏中右键->创建包:

image-20220110153617960

在包名输入框中输入xyz.icexmoon.java.notes:

然后就能看到JAVA PROJECTS中生成相应的包,以及上方的资源管理器中生成相应的目录。

点击包名上的+就可以给包添加类。

这里添加一个简单的:

package xyz.icexmoon.java.notes;
​
public class Add {
    public static int execute(int a, int b) {
        return a + b;
    }
}

src目录下的App.java是"java工程"的入口文件,可以在该文件中使用刚才创建的类:

import java.util.Random;

import xyz.icexmoon.java.notes.Add;

public class App {
    public static void main(String[] args) throws Exception {
        System.out.println("Hello, World!");
        Random rand = new Random();
        int a = rand.nextInt(10);
        int b = rand.nextInt(10);
        System.out.println(a+"+"+b+'='+Add.execute(a, b));
    }
}

JAVA PROJECTS还提供一个工具,可以将当前的工程导出为Jar包:

image-20220110154650765

点击后会自动生成,生成好后会有弹窗提示,点击后会打开jar包所在目录。

命令行执行:

❯ java -jar .\test.jar
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
Hello, World!
0+3=3

参考资料

  • java在cmd运行时出现乱码解决方法-Java基础-PHP中文网

  • 「JAVA」 Java基础之CLASSPATH环境变量 - 云+社区 - 腾讯云 (tencent.com)

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2022年4月13日

魔芋红茶

加一点PHP,加一点Go,加一点Python......

点赞
< 上一篇
下一篇 >

文章评论

取消回复

*

code

COPYRIGHT © 2021 icexmoon.cn. ALL RIGHTS RESERVED.
本网站由提供CDN加速/云存储服务

Theme Kratos Made By Seaton Jiang

宁ICP备2021001508号

宁公网安备64040202000141号