2.Hello,Java!
欢迎来到Java的世界,在上一章,我们已经完成了DOS的基本操作学习和Java的环境搭建,在本章中我们Java来完成一个简单的DOS程序。

2.1 Hello,Java!
首先,我们创建一个文件名为MyNotepad.java,保存到c:\work\001下,
文件内内容如下:(注意文件名与文件内容的大小写,以后不再提示)

然后启动DOS环境,输入如下命令:
cd c:\work\001
javac MyNotepad.java
java MyNotepad

可以看到输出:Hello,Java!
再次执行java MyNotepad,则无需再次编译。

OK,我们完成了简单的DOS程序,请认真地理解这个过程,因为本教程接下来的内容,将是对这个过程的不断扩展,直至完成Java的学习。

2.2 查看文件内容
现在有一个简单的需求:
输入如下命令来查看文件a.txt的内容:
java MyNotepad a.txt

我们来简单的介绍一下刚才写的MyNotepad.java

在上述程序中,分号代表以行的结束,大括号代表一个区块的结束。
MyNotepad为类名,main为类入口,String[] args用来接收程序的参数,因为程序会有多个参数名比如
java MyNotepad a.txt b.txt c.txt
所以变量args的类型定义为一个可以接收多个字符串(String)的数组用来接收多个参数,如下图所示:

我们用[]表示该参数为数组。
可以用如下的方法来取得数组中每一个元素的值:
args[0],args[1],args[2]...

注:Java中第一个元素下标为0

我们试着来先来接收输入的参数,并输出到DOS界面:

注:加号用来连接两个字符串

编译后运行:java MyNotepad a.txt
输出Hello,a.txt

/////////////////////////////////////
休息一下,我们来看看这个过程是如何完成的:
1.建立文件MyNotepad.java,并写入程序。
2.输入命令javac MyNotepad.java来把程序编译成class文件(MyNotepad.class)
我们称MyNotepad.java为源文件,MyNotepad.class为目标文件(执行文件)
编译过程如下图所示

这时大家可以把MyNotepad.java删除,因为程序执行是通过解析目标文件(.class文件)来完成的。
我们用记事本打开.class文件看看其中内容,看不懂。。。,对,因为这是机器读的。相对于人来说,
机器读class文件比读java文件更容易。
所以我们需要一个编译过程来把java文件翻译成class文件,同样把class文件翻译成java文件的过程们称为反编译,本教程不讨论反编译的内容。

3.我们运行Java程序,传入参数 MyNotepad a.txt
这个过程中Java程序首先根据传入的参数MyNotepad去环境变量CLASSPATH中查找名为MyNotepad的类定义,即class MyNotepad的定义,
因为我们设置了当前目录.在环境变量CLASSPATH中,所以Java程序在当前目录下找到了MyNotepad的类定义,然后调用该类的固定入口main方法,
并将后续参数a.txt传入给main的args变量。
注:在新版本的JDK中,无需设置环境变量CLASSPATH,编译器会自动查找相关的库文件,以后不再说明。

4.main中将args的第一个传入参数args[0](a.txt)和之前的字符串Hello 拼接到一起,生成新的字符串Hello a.txt,然后作为参数
传递给Syste.out.println方法,该方法将传递的参数"Hello a.txt"输出到DOS界面。

总结:
到目前为止我们接触了如下概念:
类,函数/方法,参数
注:函数和方法是同一概念
可以用下图表示:
public class 类名{
-函数1
-函数2
-函数3
...
-主函数main
}

其中函数定义如下
public static 返回值 函数名(参数类型 参数名){}

其中{}表示一个区块的开始和结束,比如类定义,函数定义。
在如下命令来运行Java程序时,系统会默认调用名称为main的函数并将后续参数传递给main函数。(我们称main为主函数/主方法)
java 类名

函数的返回值我们将在后面介绍.

//////////////////////////////////////////////

接下来我们继续扩展这个程序

对于System.out.println,我们将在后续章节中说明,因为本阶段我们理解不了这句话的具体含义,所以我们将他暂时隐藏起来。
隐藏我们不想看到的内容,首先想到的就是把他变成方法调用,于是我们的程序变成这样:

对于调用某个类的静态(static)函数,一般直接用 类名.函数名() 格式, 如果当前类则可以省略类名,如上面的程序。
我们改称正式的格式如下:
注:静态函数即函数定义中加入static关键字,我们将在后续章节中说明。

还是觉得不够清晰,我想把这个方法放到别的类中。
新建一个文件MyUtil.java如下:

修改MyNotepad.java如下:

分别编译MyUtil和MyNotepad,并测试运行。
注:只编译MyNotepad也可以,因为会自动编译关联的MyUtil。

OK,程序基本上清晰了,可生成的文件还是在同一目录下,我想把这种工具类或者称为帮助函数放到单独的文件夹中,作为类库来使用。
我们继续扩展:
当前目录为c:\work\001
我们在当前目录下创建新目录util和main
然后将MyUtil.java放入util目录中,MyNotepad.java放入main目录中

我们称目录c:\work\001为工程根目录,程序的运行也要在工程的根目录下,因为CLASSPATH中设置了从当前路径(.)开始查找类文件。
在编译和执行的时候我们要将目录名加入到类名前,如下所示:
javac main\MyNotepad.java
java main.MyNotepad

先不要运行,还没说完。

大家看到javac后面跟的是文件的路径,所以用windows的目录格式来定位文件。
java后面跟的是类名,因为Java程序会自动地加载.class类文件。
类名前的目录名我们称为包(package)名,这样防止了不同目录下相同文件无法定位的问题。

所以正式的类名为 包名.类名

所以我们要程序中声明自己所在的包(目录),修改MyNotepad.java如下:

注:同时对MyUtil的调用也要用全名

修改MyUtil如下:

编译,运行:
javac main\MyNotepad.java
java main.MyNotepad a.txt
输出:Hello a.txt

观察MyNotepad.java中对util.MyUtil的调用,如果有许多个对util.MyUtil的调用,我们则要每次都写全名util.MyUtil。
考虑程序的简洁性,我想只写MyUtil,那么需要在文件的头部加入声明:
import util.*

意思为导入util包(目录)下的的所有类文件

于是程序变成这样:

OK,现在我们完全不用关心System.out.println这种输出的实现,只需要做函数/方法调用即可。

继续扩展我们的程序:
对于如下语句
MyUtil.println("Hello "+args[0]);
我们可以修改成:
String message = "Hello "+args[0];
MyUtil.println(message);

在上面的语句中我们完成了变量的声明与赋值,即声明变量message为String类型,并且将"Hello "+args[0]的结果赋给message。

变量声明的格式如下:
变量类型 变量名;

变量赋值的格式如下:
变量名 = 值;

其中变量的声明和赋值可以写在一起即:
变量类型 变量名 = 值;

Java中有三大类型,基本类型,自定义类型,String
注:由于String比较特殊和常用,所以我们暂时把他单独提出为一个类型。
基本类型包括:char,boolean,byte,short,int,long,float,double
其中我们暂时只需要关注:char,boolean,int(全部小写)
自定义类型即为class声明的类名,默认以大写字母开头,其中包括众多系统类,在此不一一列举。

所以我们暂时关注的类型为:String,char,boolean,int,自定义类(包括众多系统类)
我们的程序变成了这个样子:

我在MyUtil中加入了读文件的方法,定义如下:
public static String getFileContent(String fileName)
他可以根据传入的文件名,读取当前目录下的文件并返回文件内容。
我们不用关心具体实现,只需要调用即可。class文件可以从这里下载。

于是我们完成本章的目标,修改程序如下:

将a.txt放入c:\work\001下,编译运行程序如下:
javac main\MyNotepad.java
java main.MyNotepad a.txt
输出:abc

很简单?是的,因为类似于读文件,输出内容等操作都被封装到工具类中,所以到这里,你只需要掌握环境搭建,运行,变量的声明,赋值和函数的调用。
大家暂时不要关心我封装到MyUtil里的是什么东西,怎么写的,写的对不对,好不好。
你只需要知道如何调用,传入什么参数,返回什么结果,就可以了。
因为程序制造是一个庞大的工程,需要团队协同工作,一个程序员不可能理解所有的东西,所以你更需要关心的是自己的程序的正确性,输入输出,如何调用别人提供的接口,而不是关心全部。
保证全部理解自己范围内的程序,并且保证写出程序的优雅和简洁性是很重要的。

注:本教程只串讲Java学习主线内容和学习方法,如果大家对本教程涉及的知识感到吃力,请在阅读过程中自行补充相关的知识点。

版权声明:本教程版权归java123.vip所有,禁止任何形式的转载与引用。

Java不走弯路教程(2.Hello,Java!)的更多相关文章

  1. Java不走弯路教程(1.环境搭建)

    1.环境搭建在开始写第一个Java程序之前,我们需要做一些简单的准备工作. 1.1 还记得DOS吗 我们可以通过图形界面来操作我们的电脑.但作为程序员,你首先需要学会用命令行的方式来操作电脑,因为不是 ...

  2. Java不走弯路教程(前言)

    本教程的程序基于Windows开发,所以你需要有一台安装Windows操作系统的电脑. 前言本教程将带你完成Java的初学和WEB框架的开发,学完本教程,你将完成对Java的入门并且对下一步不再迷茫. ...

  3. Java不走弯路教程(3.用户验证与文件内容查询)

    3.用户验证与文件内容查询 在上一章中,我们完成了对指定文件内容的输出操作. 我们现在有如下格式的文件product.db id,product_name,product_detail 1,noteb ...

  4. Java不走弯路教程(4.Client-Server模式(1)-Server)

    4.Client-Server模式(1)-Server 在上一章中,我们完成了MyDataBase.java的编写,类似于一个简单的数据库功能,提供了用户验证,查询操作. 在本章中,我们将继续扩展这个 ...

  5. Java不走弯路教程(5.Client-Server模式(2)-Client)

    5.Client-Server模式(2)-Client 在上一章,我们完成一个简单的数据库服务器,并在客户端用telnet方式成功进行通信. 本章将用Java实现客户端程序,来代替telnet. 先看 ...

  6. Java不走弯路教程(6.JDBC)

    6.JDBC 在上一章,我们完成了MyDb数据库的简单的客户段调用.作为产品我们还封装了驱动程序,并且提供了统一的调用接口. 大家应该知道,市面上有多种数据库产品,比如Oracle,Mysql,DB2 ...

  7. HOW2J 全套教程整理:Java、前端、数据库、中间件、第三方、项目、面试题

    考虑到部分同学寝室会断网,原站的所有的免费内容都提供了一个离线版本以供使用.但是它直接提供了静态页面,并不方便在手机上阅读,因为我将其转换为 EPUB. 目录 HOW2J J2EE 教程.epub H ...

  8. 【Java学习系列】第3课--Java 高级教程

    本文地址 可以拜读: 从零开始学 Java 分享提纲: 1. Java数据结构 2. Java 集合框架 3. Java泛型 4. Java序列化 5. Java网络编程 6. Java发送Email ...

  9. Java IO教程

    1  Java IO 教程 2 Java IO 概述 3 Java IO: 文件 4 Java IO: 管道 5 Java IO: 网络 6 Java IO: 字节和字符数组 7 Java IO: S ...

随机推荐

  1. Lumen框架搭建指南

    新人从java转php,到新公司搭建lumen框架,lumen官方文档的坑不是一般的多,对新手极其不友好,记录下我搭建过程,希望对小白们有所帮助. 首先看下官方文档:https://lumen.lar ...

  2. 用js来实现那些数据结构(数组篇03)

    终于,这是有关于数组的最后一篇,下一篇会真真切切给大家带来数据结构在js中的实现方式.那么这篇文章还是得啰嗦一下数组的相关知识,因为数组真的太重要了!不要怀疑数组在JS中的重要性与实用性.这篇文章分为 ...

  3. Oracle处理XML字段时遇到的ORA-31013: XPATH 表达式无效问题

    select extractValue(ed.info_id, '/Root/ExpandProfile/PhoneNumber') as phone, extractValue(ed.info_id ...

  4. phpstorm 快捷键高效助手扩展 常用快捷键收集整理 2018-04-12 16:42:10

    声明: 本文属于原创,未经博主许可,禁止任何形式转载! phpstorm 快捷键整理收集 以及高效复用代码快捷键扩展 常规快捷键大全请结合参考2篇博客: https://blog.csdn.net/y ...

  5. MyBatis(一):配置并使用

    MyBatis具体是什么东东,这些在后边在研究吧,本文目的是为了记录如何使用MyBatis. 首先,需要下载MyBatis开发所需要文件. 通过github上可以找到MyBatis代码:https:/ ...

  6. 开发一款APP所需要的时间

    "要多少钱""要多少时间"这应该是一个企业在打算开发一款APP时问到最多的问题了.的确,现在的人不管做什么事情都讲究计划,更何况在这个时间就是金钱的时代,企业如 ...

  7. [LeetCode] Find Mode in Binary Search Tree 找二分搜索数的众数

    Given a binary search tree (BST) with duplicates, find all the mode(s) (the most frequently occurred ...

  8. springboot全局异常处理

    @Slf4j@ControllerAdvicepublic class RestExceptionHandler extends ResponseEntityExceptionHandler { @E ...

  9. python包安装和使用机制

    python语言的魅力之一就是大量的外置数据包,能够帮助使用者节省很多时间,提高效率.模块下载和引用是最常见的操作,现在解析内部的原理和背后发生的故事,做到心里有数. 导航: 基本定义 模块使用 模块 ...

  10. python-文件操作和集合

    1.打开文件 如果文件不存在会报错 f = open('information.txt','r+') 2.读取文件 read 读取文件 readline 读取文件的一行内容 readlines 读取文 ...