如何简单运行Java程序

如何简单运行Java程序本章开始,我们需要下苦功打基础,目标是完成一个会员管理系统哦!如何运行Java程序,用java命令即可,一定不要忘了写main方法哦,一个java文件里面可以写很多个class。步骤1java文件等于java类吗问大家一个问题,你认为java文件是java类吗?你可以用记事本写一个Demo.java的文本文件,编码是ansi,如果你的windows系统是简体中文的,那么所谓的ansi,其实就和GBK是一样的。在这个文件里,你可以写很多的class,但是声明为public的class只能有一个。

大家好,又见面了,我是你们的朋友全栈君。

本章开始,我们需要下苦功打基础,目标是完成一个会员管理系统哦!如何运行Java程序,用java命令即可,一定不要忘了写main方法哦,一个java文件里面可以写很多个class。

步骤 1 java文件等于java类吗

问大家一个问题,你认为java文件是java类吗?

你可以用记事本写一个Demo.java的文本文件,编码是ansi,如果你的windows系统是简体中文的,那么所谓的ansi,其实就和GBK是一样的。

在这个文件里,你可以写很多的class,但是声明为public的class只能有一个。

这就说明,java文件不等于java类。java文件可以是一大堆class的集合体,每一个class都可以通过new关键字,或者反射变成实例对象。所以,你也可以说,一个java文件就是一个程序,这个程序如果跑起来,就是一大堆对象的集合。

每一个对象可以互相通信,各司其职,共同完成程序的任务。

有点绕,反射又是什么鬼,看不懂?没关系,下面我们会一步一步,慢慢学习到的。现在,请放轻松。

步骤 2 java文件本质上就是txt文本

现在,我们找一个地方,比如 **D:\java18 ,**创建一个普通的文本文件,后缀名改成.java。如果不知道怎么改后缀名,文件框左上角点击组织,选择文件夹和搜索选项,把隐藏文件扩展名的选项去掉就可以啦。

image

然后,创建一个Demo.java。

image

这就是一个java文件了,如果到这一步没有问题,那么恭喜你,你已经向前迈进了一大步!

步骤 3 javac命令

java文件是无法直接执行的,我们需要借助Java虚拟机来执行java程序。而java虚拟机也无法直接运行运行.java的文件,我们需要把java文件编译成.class文件,这个编译的过程,就是用javac命令。之前已经安装好了环境变量,所以这边可以直接调用javac命令吧。

image

结果,文件夹里面啥也没发生?为什么,因为我的Demo.java文件本来就是一个空文件啊,里面啥也没有。

步骤 4 什么是Java虚拟机?

我们在上一节下载了JDK的安装包,解压后又配置了环境变量。这个时候,我们可以说,我们的电脑上已经安装了Java虚拟机,也叫做JVM。

说到底,Java虚拟机就是一个软件,和你电脑上的QQ是一回事。这个软件的作用,就是编译和运行某一个.java文件。

就是这么回事啦,虚拟机并不神秘,在操作系统的角度看来,它只是一个普通进程。

下面给出一张JVM的图:

image

步骤 5 java里面要写什么?

上面那张图有点复杂?没关系,现在我们只需要明白,JVM可以编译和运行某一个java文件,比如Demo.java。

刚才我们使用了javac命令,虽然啥也没发生,但是cmd窗口也没有报错,这是好事,这说明编译成功了。

java文件里面要写什么呢?答案是很简单的,那就是我们要写class,即java类。我们先考虑一下,做一个会员管理系统,需要什么?会员的前提是客户,会员就是VIP客户。这就引入了两个概念,分别是客户和会员。每一个客户都是潜在的会员,这就是业务需求。

不管是客户还是会员,都是我们日常生活的概念,现在我们要做的事情,把这两个概念都放到程序中去。我们用记事本打开Demo.java,输入

image

class是java的关键字,代表要声明一个类,右边紧跟着一个大小字母开头的单词,就是类名称,然后是一对{},这是java类的主体。现在,重复javac命令。

image

你会发现多了两个class文件,编译成功了,这个是java虚拟机的功劳。

步骤 6 怎么运行class文件?

我们要运行java程序,其实就是用java命令执行某一个class文件,运行的前提是,这个class文件的“前身” – 即java文件,它里面的class有一个main方法。我们在Demo.java中再加一个App类。

class App {
   public static void main(String[] args){
	System.out.println("程序启动了...");
   }
}

**重新javac一下,**注意每次修改了Demo.java,都要重新编译,确保class文件是最新版本

这时候你会发现又多了一个App.class,我们用java命令去运行它。

image

这样就执行成功了!

步骤 7 javac的时候发生了什么?

javac的时候,JVM会启动java的编译器程序,对指定扩展名的**.java文件进行解析,然后按照一定的规则编译成字节码,生成一个.class**文件。这个class文件是可以被JVM的类加载器读取和执行的。至于内部的深层次原理,我们暂时不用关心,我们只需要知道java文件必须要编译成class文件,才可以被JVM执行,这就行了。

image

步骤 8 java的时候发生了什么?

刚才我们运行了App.class文件,用的命令是这样的,注意,不需要写class。

java App

那为什么不能写成 java App.class呢?这是因为,java规定如果执行的class文件名里面有 **“.” **号,就会认为是有文件夹嵌套,有一个包含关系。现在我们做一个证明。新建一个Test.java

package my;
class Test
{
	public static void main(String[] args){
		System.out.println("Test");
	}
}

用javac编译,得到Test.class文件,然后创建一个文件夹my,把Test.class放进去。

image

回到java18文件夹,执行命令:

image

验证成功了,所以不写.class是有用意的,因为怕混淆啊!

回到最初的问题,java命令到底发生了什么?其实就是去那个类里面寻找 public static void main 方法,如果有,就去执行这个方法。

步骤 9 这个main方法是什么?

public是java语法中的访问权限修饰符,代表公共的,谁都可以访问。

static代表这个方法是静态的,静态的意思就是不需要实例化对象就可以直接访问,结合上面的JVM图,我们可以知道这个main方法在class被加载的时候,就会被存放到方法区,JVM想调用就调用。

void代表方法没有返回值,这是程序的主方法,不需要返回值,也没有谁可以去接收这个返回值。

main代表这是主入口,JVM会去寻找一个叫做main的方法去执行,这是规定。

综上,这个main()方法的声明为:public static void main(String args[])。必须这么定义,这是Java的规范。

如果不这么设置,执行就会报错,main方法中还有一个输入参数,类型为String[],这个也是java的规范,main()方法中必须有一个入参,类型必须String[]。

步骤 10 System.out.println?

这个语句是java打印数据到控制台的方法,调试的时候我们可以经常使用,因为内部实现采用了同步代码块,会极大影响运行效率,所以如果项目要上线,请删除或者注释掉所有的System.out.println,转而采用异步的日志处理方案,比如logback。

转载自:java小白翻身

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/156409.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • bootstrap fileinput api

    bootstrap fileinput apiBootstrapFileInput中文API整理

    2022年5月24日
    33
  • tar打包的时候忽略一些目录[通俗易懂]

    tar打包的时候忽略一些目录[通俗易懂]tar打包的时候忽略版本管理文件目录、日志文件目录、storage/app目录tar-zcvfweb.tar.gzweb–exclude-vcs–exclude=storage/logs–exclude=storage/app

    2022年5月6日
    214
  • Java取余操作时的符号问题[通俗易懂]

    Java取余操作时的符号问题[通俗易懂]上课时只听老师说过,Java取余的操作的符号位是和被除数一致的,但不知道为啥例如:-14%3余数是-214%-3余数是2后来才知道,对余数的定义是 (a/b)*b+a%b恒等于a这样的话,-14/3*3的结果是-4*3=-12,所以余数是-2;14%3同理啦

    2022年5月27日
    41
  • 用GHOST备份ubuntu系统

    用GHOST备份ubuntu系统
    由于在折腾ubuntu系统过程中经常出错(有一次由于更改分辨率导致黑屏,折腾了大半夜才修复好),于是特想能够找到一种简便有效的备份方法。

    上网一搜,老鸟们都说用tar备份。搜到了命令,复制下来,往终端上一贴,能进行,可是结尾时总出错。几个版本的命令都不行。经研究和上网搜索,搞明白这命令在纯文本(纯命令)下才行,桌面下根本不行(估计那些网上的tar备份者也是人云亦云,自己根本没试过)。

    Ctrl+Alt+F2进入纯命令界面,一片漆黑的背景上几个字母,根本

    2022年9月5日
    2
  • unity3D 编辑器扩展,MenuItem 和 ContextMenu 的使用方法[通俗易懂]

    unity3D 编辑器扩展,MenuItem 和 ContextMenu 的使用方法[通俗易懂]官方也有一个文章,举了MenuItem类的一些使用方法。我是传送门,点我首先是unity顶部菜单栏的一些用法,如图:注意:MenuItem是编辑器类,所以技能导入usingUnityEditor;命名空间,且一般我们的类也不是集成自MonoBehaviour的,而是集成ScriptableObject的。最普通的MenuItem调用:[MenuItem(“MenuItem/普通…

    2022年10月29日
    0
  • bootstrap导航栏(bootstrap页面)

    Bootstrap导航1.定义导航组件基本结构:<!–基本导航组件–><ulclass=”nav”><liclass=”active”><ahref=”#”>首页</a></li><li><ahref=”#”>导航标题1</a></li>…

    2022年4月17日
    53

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号