vlambda博客
学习文章列表

java基础介绍及第一个java程序

跨平台


java很长一段时间都是应用最广泛的后端编程语言之一,之所以如此,有一个最重要的特性就是跨平台。

什么是跨平台呢,在java中有一个说法叫做“一处编译,到处运行”。

一处编译可以理解为就是同一套一模一样的代码,到处运行是指这一套一模一样的代码可以在各种不同的操作系统平台上运行,并达到一样的效果。

这种特性大大的降低了需要运行在不同平台上的软件的开发成本,也更加方便软件的开发。

一般日常工作写代码的电脑基本都是windows操作系统,而一般后台软件服务器又都是linux操作系统,java的跨平台就使得它能够很方便的在windows电脑上开发完毕了,然后直接在linux中使用。

java能够实现上边这种效果的原因就是因为java虚拟机,简写JVM,即Java Virtual Machine。

java软件虽然是和其他大部分软件一样运行于操作系统上,但是java软件并不直接运行在操作系统上,而是运行在java虚拟机中。

针对于不同的操作系统,java提供了不同的java虚拟机,更准确的说,应该是JRE。

JDK、JRE和JVM


上边说java跨平台的基础是java虚拟机,但是实际上运行时要安装的至少是JRE。

JRE是Java Runtime Enviroment的缩写,也就是java运行环境。

JRE里边包含了java软件运行的各种基本类库和JVM。

而在进行软件开发的时候需要安装的是JDK,是Java Developer Kit的缩写,即Java开发工具包的意思。

JDK里边包含了JRE,除了JRE之外,还有更多的类库支持java软件的开发。

当然了,上边这个说法其实有一点点问题,因为在JDK12之前,JDK安装的时候是包含了JRE的,但是JDK12之后安装JDK并不包含JRE,还需要手动另外安装。

什么工具可以编写java代码


如果安装了JDK,理论上讲,就可以编写java程序了,windows上自带的记事本就可以。

在我之前的文章里也提到过,程序实际上就是字符串,字符串也就是文本,一会儿第一个java代码示例会详细介绍直接记事本编写到运行的过程。

但是,虽然可以直接在记事本写,但是由于它的功能过于简单,没有基础语法校验,没有自动提示等等各种辅助功能,导致一方面开发速度和效率低,另一方面也极其容易出错。

因此陆续的出现了一些专门进行软件开发的集成工具,简称IDE。

开发java用的比较多的就是eclipse、myeclipse、inject idea这几个,eclipse是起初用的人最多的,myeclipse是eclipse的一个插件,需要付费。

虽然早期eclipse用的人是最多的,但是截止到现在,inject idea的应用越来越普遍,人数上应该已经超过了使用eclipse的人。

这些IDE提供了各种各样的辅助功能,让整个软件开发周期中的工作更加高效和方便。

第一个java程序


下边就用windows自带的记事本编写第一个简单的java程序。

例如,我在桌面新建一个目录,名为java,然后在里边新建一个txt文件,再改名为HelloWorld.java。

用记事本打开这个文件,然后里边写上如下的内容:

public class HelloWorld{public static void main(String [] args){System.out.print("hello world,I'm tuzongxun");}}

保存以后,打开windows的cmd命令行窗口。(windows的cmd窗口,可以使用windows键加R键调出来,然后输入cmd后回车。windows键在有的键盘上是"win"字样,有的是四个小方块)

在命令行窗口中通过系统命令进入上边文件所在的目录,例如我的文件路径是"C:\Users\tuzongxun\Desktop\java\HelloWorld.java",则输入"cd C:\Users\tuzongxun\Desktop\java"。

进入目录以后,可以使用命令"dir"查看当前目录中的文件,我这里看到就只有一个HelloWorld.java文件。

然后输入java编译命令"javac HelloWorld.java"后回车,结束之后再输入"dir"回车,会看到多出了一个HelloWorld.class文件,这个文件如果直接打开是看不懂的。

先不管这个文件是啥,接着在cmd命令行窗口执行"java HelloWorld"回车,命令行窗口打印出这样一行内容:

hello world,I’m tuzongxun

编译和运行


上边写了一段最简单可以运行的java程序,什么意思这里先不管,而是先来说说上班两个关键的操作,一个"javac",一个"java"。

之前说java跨平台的特性是一处编译到处运行,那么刚好就是对应了上边两个操作,javac就是执行了java代码的编译,java就是执行了java代码的运行。

这里就涉及到java代码的其中两个基本规则,即java代码编写的时候以".java"为后缀,执行了javac进行编译后就会生成".class"为后缀的文件。

注意,这里没有说生成一个".class"文件,因为javac编译后的".class"文件并不是和".java"文件一一对应的,而是和定义的class个数对应。

例如现在在上边的文件里再加一点代码,然后整个代码变成下边这样:

public class HelloWorld{public static void main(String [] args){System.out.print("hello world,I'm tuzongxun");}}

class Hello{public static void main(String [] args){System.out.print("hello,tuzongxun");}}

之后再在同样的目录中执行"javac HelloWorld.java",然后就会看到在这个目录中生成了两个".class"文件,一个Hello.class,一个HelloWorld.class。

然后可以分别执行"java Hello"和"java HelloWorld",也会有不同的输出内容,这里java命令就是运行java程序,指向一个class文件的文件名,调用里边的main方法。

java类和方法


上边大概讲了java的编译和运行,下边再说说上边代码是什么意思。

首先说说这一段代码:

public class HelloWorld{public static void main(String [] args){System.out.print("hello world,I'm tuzongxun");}}

在这一段代码里边有这样一些关键词,public、class、static、void、String,这几个是java规则中定义的,需要死记硬背的内容的一部分。

public的作用的访问权限控制,同类的还有private、protect、以及默认,默认就是不写。

class就是定义一个java类的关键词,有了它,java虚拟机才能认识这是一个java类。

static代表这个内容是直接属于类的,也可以理解为一种权限修饰符。

void代表没有返回值,String代表字符串数据类型.

这些都是基础的需要硬记的内容,就像学拼音"a"读"啊"一样。

那么再说说除了关键词之外的一些基础规则,首先是{}的使用,在java中,代码块都要包含在一堆大括号里边。

上边的代码里,定义类需要一对大括号,定义方法也需要一对大括号。

类的定义规则就是"访问权限修饰符 class 自定义的类名{}",访问权限修饰符就是上边说的四种,三个显示定义的和一个默认不写的,class是固定写法,自定义类型理论上讲就是自己随便定义(这个随便是一定规则内的随便,后边再讲)。

上边代码定义类的就是这一段:

public class HelloWorld{
}

方法必须定义在类里边,也就是在类定义的一对大括号里边,定义规则是"权限修饰符 返回值 自定义方法名(参数类型 参数名称){}",上边代码里这一段就是方法:

public static void main(String [] args){System.out.print("hello world,I'm tuzongxun");}

在这个方法里,其中一个特殊的地方就是参数是一个数组,即用了"[]",这个在数据类型里会再遇到。

方法里边的"System.out.print(“hello world,I’m tuzongxun”);"这一段实际可以先不管,就是具体的业务代码,现在不写也完全没有问题,也可以写成其他任何有效的java代码,这里只是为了看到效果。

上边这个方法遵循了基本的方法定义规则,但是这个方法实际是一个很特殊的方法,特殊在它是java程序的入口方法,写法基本是固定的,即下边这一段基本都是固定写法不变:

public static void main(String [] args){
}

当然了,虽然说是固定写法,但是实际从语法上讲,也是可以不固定的,例如这里的参数名就可以改成别的:

public static void main(String [] param){System.out.print("hello world,I'm tuzongxun");}

除了参数名可以改,数组定义顺序也可以改:

public static void main(String param []){System.out.print("hello world,I'm tuzongxun");}

上边两段和开始那个效果是一样的,只是一般都写成最开始的那种。

之前说方法名是可以自定义的,但是这个main方法的方法名是不能改的,否则运行的时候就会报错:

错误: 在类 HelloWorld 中找不到 main 方法, 请将 main 方法定义为: public static void main(String[] args)

否则 JavaFX 应用程序类必须扩展javafx.application.Application

总结


那么最后,通过上边的内容可以知道java程序的其中一些基础规则如下:

  • java代码编写的时候以".java"为后缀
  • 执行了javac进行编译后就会生成".class"为后缀的文件
  • javac编译后的".class"文件并不是和".java"文件一一对应的,而是和定义的class个数对应
  • 类的定义规则就是"访问权限修饰符 class 自定义的类名{}"
  • 方法必须定义在类里边,也就是在类定义的一对大括号里边
  • 方法的定义规则是"权限修饰符 返回值 自定义方法名(参数类型 参数名称){}"
  • "public static void main(String [] args){}"是java入口方法的固定写法