程序员的网络日志 程序员的网络日志
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理
  • C语言
  • 数据结构
  • 汇编语言
  • 操作系统
  • Linux
  • 编译原理
  • 计算机网络
  • 数据库
  • Java基础
  • JavaWeb
  • 笔记软件
  • Quicker
  • Qttabar
  • Wgesture
  • 浏览器与插件
  • 视频播放器
  • 待办清单
  • 终端软件
  • uTools
  • 番茄盒子
  • 网站日记
  • 赞赏支持
  • 关于本站
  • 如何搭建一个博客
  • 如何搭建一个邮箱
GitHub (opens new window)
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理
  • C语言
  • 数据结构
  • 汇编语言
  • 操作系统
  • Linux
  • 编译原理
  • 计算机网络
  • 数据库
  • Java基础
  • JavaWeb
  • 笔记软件
  • Quicker
  • Qttabar
  • Wgesture
  • 浏览器与插件
  • 视频播放器
  • 待办清单
  • 终端软件
  • uTools
  • 番茄盒子
  • 网站日记
  • 赞赏支持
  • 关于本站
  • 如何搭建一个博客
  • 如何搭建一个邮箱
GitHub (opens new window)
  • Java基础

    • Java基础
    • Java概述
    • 安装
    • 第一个Java程序
      • 使用命令行编译 Java 程序
      • 找不到或无法加载主类
    • 数据类型
    • 字符串
    • 数组
    • 对象
    • 异常
    • IO
    • 数据结构
  • JavaWeb

  • Java
  • Java基础
程序狗
2022-07-26
目录

第一个Java程序

# HelloWorld

一个.java文件只能包含一个public类,但可以包含多个非public类。如果有public类,文件名必须和public类的名字相同。

public class HelloWorld{
    public static void main(String[] args){
	// Display message Welcome to ]ava ! on the console
        System.out.println("Hello World!");
    }
}
  • 第 1 行定义了一个类。每个 Java 程序至少应该有一个类。每个类都有一个名宇。按照惯例,类名都是以大写字母开头的
  • 第 2 行定义主方法( main method)。程序是从 main 方法开始执行的。一个类可以包含几个方法。main 方法是程序开始执行的人口。
  • Java 中的每条语句都以分号( ;)结束,也称为语句结束符(statement terminator)
  • 保留字(reserved word) 或关键字(keyword) 对编译器而言都是有特定含义的,所以不能在程序中用于其他目的。例如,当编译器看到字 class 时,它知道 class 后面的字就是这个类的名字。这个程序中的其他保留字还有 Public、static 和 void。
  • 第 3 行是注释(comment), 它标注该程序是干什么的,以及它是如何构建的。注释帮助程序员进行相互沟通以及理解程序。注释不是程序设计语句,所以编译器编译程序时是忽略注释的。在 Java 中,在单行上用两个斜杠(// )引导注释,称为行注释(line comment ); 在一 行或多行用/*和 */ 括住注释,称为块注释(bock comment)。当编译器看到 // 时,就会忽略本行 // 之后的所有文本。当看到 / * 时,它会搜索接下来的*/,并忽略掉 /* 与 */ 之间的文本。
  • 程序中的一对花括号将程序的一些组成部分组合起来,形成一个块( block)。在 Java中,每个块以左花括号( 0 开始,以右花括号(})结束。每个类都有一个将该类的数据和方法放在一起的类块( class block)。每个方法都有一个将该方法中的语句放在一起的方法块(method block)。块是可以嵌套的,即一个块可以放到另一个块内。例如本例中,方法块就在类块中。
  • Java 是区分大小写的。如果在程序中将 main 替换成 Main

《Java语言程序设计-基础篇》:((20211017113550-tb2ukqd '1.8 创建、编译和执行 Java 程序'))

# 使用命令行编译 Java 程序

首先在一个目录里新建一个文本文档,改后缀名为. Java

输入代码,注意类的名字要和文件名一样,例如都是 HelloWorld。如果不一致将出错。

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

运行 cmd,cd 到该目录,如果在 Java 文件在 D 盘,则先输入 D:,然后一步步输入目录,注意 tab 键可以补全,例如你输入 AJ,然后按 tab,就会帮你补全为 AJava。

然后输入 javac HelloWorld,按 tab,补全为 HelloWorld.java;

这时候会生成 HelloWorld.class;

然后输入 Java + 文件名,不包括后缀。回车,运行成功

编译过程:

javac:编译 java 文件;使用方法: javac Hello.java ,如果不出错的话,在与 Hello.java 同一目录下会生成一个 Hello.class 文件,这个 class 文件是操作系统能够使用和运行的文件。

java: 运行.class 文件;使用方法:java Hello, 如果不出错的话,会执行 Hello.class 文件。注意:这里的 Hello 后面不需要扩展名。

一般情况下,我们都不会在命令行下面运行、调试程序,因为它太不方便了

# 找不到或无法加载主类

Java 命令行运行java程序,出现“找不到或无法加载主类 ”的解决办法:

1.由于是在运行阶段出现的问题,那么可能是环境变量配置不当的问题,即可能是classpath路径配置错误,而导致.class文件无法加载。那么此时你可以检查是否配置好classpath路径,一般来说classpath路径配置如下:

.; %java_home%\lib;%java_home%\lib\tools.jar; (注意前面的 . 以及 ; 缺一不可)

其中.表示当前路径,;表示分隔符。

如果你试过了很多次,classpath也配置对了,依旧出现这个错误,注意你使用的测试代码,是否在某一个包名的下面;

package HelloWorld;
 
public class TestPlusPlus {
	public static void main(String args[]) {
		int a = 2;
		int b = a ++ + ++ a;
		System.out.printf("a的值为: %d\nb的值为: %d\n",a,b);
	}
}

解决办法:

1.去掉 ”package HelloWorld;“ 重新用javac 编译TestPlusPlus.java,再运行javaTestPlusPlus就可以了。

2.新建一个包名一样的文件夹,在本例中,为建立一个HelloWorld的文件夹,把TestPlusPlus.java文件移到该目录下。然后在HelloWorld文件夹的平级下,打开DOS命令窗口,运行javacHelloWorld/TestPlusPlus.java编译程序,

运行javaHelloWorld/TestPlusPlus(或者javaHelloWorld.TestPlusPlus也可以),则可以运行含有包名的java程序。

注意:包名不要含有'.'(点),' '(空格)等特殊符号,这样的话命令行无法判断包名与java程序名的分割点在哪里,从而还是找到或者无法加载主类。

原理说明:java程序运行class文件,对于有包名的类,java把包名当成文件夹处理."包名+类名"相当于"文件夹目录+类名"来寻找类。

使用java命令运行class文件提示“错误:找不到或无法加载主类“的问题分析 - 大C - 博客园 (opens new window)

其实原因很简单,我们忽略了2个细节。

1.java指令默认在寻找class文件的地址是通过CLASSPATH环境变量中指定的目录中寻找的。

2.我们忽略了package的影响。

第一个问题好解决:我们直接在CLASSPATH环境变量中加入“.;”即可。“.”的意思是搜索当前目录

第二个问题看下面分析:

看下面两个类

类A和类B的唯一差别就是没有定义包名。

我们的工程路径是D:\HelloWorld,在HelloWorld文件夹中建立一个src文件夹,类B的源代码文件就放在src中。用javac编译完以后

会在src文件夹中生成NewsManager.class,如下

执行如下:

现在我们再把源代码换成类A

为什么加入了package后就不对了呢?

类A中package的路径是org.will.app.main。按照java规定,我们应该按照package定义的路径来存放源文件,类A应该放入:

src\org\will\app\main下,如下:

然后我们编译执行:

依然有问题,为什么,其实大家再回去看看java的书籍就会发现,一个类的全名应该是包名+类名。类A的全名:org.will.app.main.NewsManager

好的,再试试:

还是不对。为什么?

仔细看上面的图,我们在main目录下让java命令去执行org.will.app.main.NewsManager,其实它会以为类的路径是:

D:\HelloWorld\src\org\will\app\main\org\will\app\main\NewsManager,大家看到了吧,路径重复了。

所以,我们应该这样执行:

成功!

总结:

一、java执行class文件是根据CLASSPATH指定的地方来找,不是我们理解当前目录。如果希望它查询当前目录,需要在CLASSPATH中加入“.;”,代表当前目录。

二、java执行class文件对package的路径是强依赖的。它在执行的时候会严格以当前用户路径为基础,按照package指定的包路径转化为文件路径去搜索class文件。各位同学以后注意就OK啦。至于网上说的要在CLASSPATH要加各种包等等都是泛泛而谈,真正静下心分析这个问题的资料不多。很多都没有说到点子上,会误导人的。

上次更新: 2022/8/7 09:00:48
安装
数据类型

← 安装 数据类型→

最近更新
01
搭建实验环境
10-25
02
《计算机网络微课堂》课堂介绍
10-25
03
第一章 因特网概述
10-25
更多文章>
Theme by Vdoing | Copyright © -2022 粤ICP备2022067627号-1 粤公网安备 44011302003646号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式