Java-1.第一条程序

需要提前准备的内容:

  1. 【免费】JDK,版本使用8或11,或后续推出的长期版本。此时使用的为Java 11
  2. 【免费】Sublime,或其他纯文本编辑器,(IDEA也可以,但此时不使用。)
  3. 配置好系统变量。对于11版本来说,需要配置JAVA_HOME和Path两项变量。
  4. 在安装JDK后,分别在CMD中输入java -version 和 javac -version 检查是否安装正确。

1. 第一条程序

设计目标
在发送一条消息到控制台窗口。比如“yo”。

备注:java语言对于大小写很敏感。如果在SQL里不太在意大小写,希望在这注意一下。

public class hello
{
    public static void main(String[] args)
    {
        System.out.println("Yo");
    }
}

public:访问修饰符。
说人话就是:这个类是公开的,public英文就是公开的么,还有其他的修饰符控制着访问级别

class:类。
这个java程序的全部内容,都会包含在一个容器中。

hello:类名。
这个容器具体的标签是hello,以方便我们找到。当然也可以自己喜欢打上其他乱七八糟的标签。

public class hello

翻译:创建一个公开的盒子,盒子名称是hello。
盒子选好了,接下来需要在盒子里放内容了。

:此时我的类名是hello,开头是小写的。
但根据标准命名规范,类名每一个首字母都必须大写并且,必须以字母开头。

接下来看盒子中的内容:

    public static void main(String[] args)

public:这个public和之前的盒子public并不是一样的,盒子public控制访问等级。
这个public是方法的标签。因为在后面我们会创造一个main方法,而在java se 1.4之后的所有main方法如果想调用,则必须是public等级的。

static:静态。
静态动态的解释如下:我们刚写的程序没有必要创建一个对象,所以必须使用static静态。
只有静态方法是不依赖对象的。

void:因为main方法不需要返回值,所以用void。

String[] args:字符串数组,接受程序执行时传进来的参数。

上述内容大部分一定看不懂,也不是本次尝试
Pasted image 20221217092033.png

爬行的重点,此时的重点应是了解运行机制。

2. 运行机制

在Java 8版本中,Jdk需要下载独立的JRE文件。以及JavaWebControl(即Javawc)文件。
在Java 11版本中则不需要。

以我们的视角来总结操作过程的话,为以下操作内容:

  1. 在编辑器(此时使用的为Sublime)中编写java语句。
  2. 保存文件,可以注意到后缀为.java
  3. 通过CMD命令,输入javac,生成同名文件的.class文件。
  4. 再次通过CMD命令,输入java+class文件名(此时输入不应带.class),得到运行结果。

以上为我们编写程序的时候经历的步骤。
那JDK是如何运行的?毕竟我们目前除了编辑器以外的工具只剩下的JDK。

先说编辑器:
1. 我们在编辑器(sublime)里写好语句,编辑器会通过某一特定编码(如GBK,UTF-8)进行保存,并且生成一个以 .java 为后缀的 源文件

备注:

  1. 此时我也不清楚,Sublime是只生成了UTF-8,没有进行其他操作,或者又进行了进一步编码做出只有Jvm才能看的懂的其他语言。
    (换句话说。我并不知道以.java为后缀的文件内容是什么。)

java文件生成之后,编辑器的工作全部结束。

接下来的内容由Javac负责:
2. 在cmd输入内容为:javac + 文件名(包括后缀)
此步骤使javac开始编译对应的源文件,使源文件生成新class文件。该class文件与源文件同名,只是后缀变成了.class。
.class文件生成的目的,是因为源文件(以.Java为后缀)不可在多平台上运行。而.class文件可以在Linux,Os等其他系统上运行。

备注

  1. 在我目前看来,class文件才是更重要的那一个。如果有一个编辑器可以直接生成class后缀文件就方便多了,毕竟不用去CMD里去编译。
  2. 据我猜测,在class文件里的编码及其混乱,毕竟她要照顾众多系统逻辑编码。所以class文件称为字节码文件

Javac的工作内容到此结束,没错Javac唯一的作用就是负责转换编码。
class文件可以送到JVM里运行了。比如我现在使用后的是Windows系统,则必须使用Windows对应的JVM,不可使用Linux等其他平台的JVM。

具体流程图如下所示:

Pasted image 20221217093612.png

此时应当注意!:
若想对其进行修改,必须在修改过后保存,且再次编码,否则.class文件不会被修改。

在第一个hello代码中,我们制作了一个盒子“public class hello”,于是javac给我们编译了一个hello类的对应字节码文件。
要说明的是:在一个java文件中,有且必须只能有一个public类。但其他类就无所谓了:

public class A{}
class B{}
class C{}

上述代码并没有完全打完,但道理是如此:public的类只能有一个,普通的类class是无所谓的。
若将上述三行代码进行编译,我们可以得到三个字节码文件,名字分别为:A.class,B.class,C.class

备注:此时我才明白,类名不同于文件名。
但是!!!如果一个文件有public类,那么文件名必须以该类命名!

另一方面,虽然严格规定了public类只能存在一个,
但用于修饰main方法的public static void main()语句中的public并不是不可存在于非public类中。

比如:

public class A{
    public static void main(String[] args){
        System.out.println("Yo whats up");
    }
}
class B{
    public static void main(String[] args){
        System.out.println("fat ass?");
    }
}
class C{};

可以注意到,在文件夹中生成了三个字节码文件:


Pasted image 20221217101240.png

并且每一个class文件在进入JVM运行时都会有相应显示:


Pasted image 20221217101344.png

备注:可以注意到我这里一边用了java小写,一边用了Java大写,似乎看起来都可正常运行。

总结起来如以下几点:


Pasted image 20221217101544.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容