深入学习Java之一:Java语言概述和开发环境
1、java程序的运行机制
java是一门特殊的语言,同时拥有解释性语言和编译型语言的特性,要经过先编译后解释两个步骤
1.1高级语言的运行机制
1、高级语言按照程序的执行方式可以分为编译型和解释性
2、彻底明白什么事编译:编译就是使用专门的编译器(针对不同的语言),针对特定的平台(针对特定的操作系统),将某种高级语言源码‘翻译’成为该平台硬件能够执行的机器码。
3、编译好的程序可以脱离开发环境,在特定的平台上独立运行,效率很高。
4、现有的C、C++、Objective-C、swift、Kotlin都是编译型语言,由于平台移植型差,所以比如在windows上用C++编译好的程序拿到其他的windows上平台也能独立运行,但是换个平台,换到linux上就不能运行,只能将源码拿到linux重新编译,甚至还可能用到linux这个平台针对C++另外的编译器。
5、解释性语言是使用专门的解释器对源程序解释为特定平台的机器码并立即执行的语言,解释性语言相当于把编译型语言中的编译和解释过程混到一起了
6、解释性语言的程序无法脱离解释器,但是移植型很强,不同的平台只需不同的解释器而已,所以相当于每次执行解释码程序都存在一个编译的过程,这就是移植型强,但效率低的原因。
7、javaScript,Ruby,Python就都是解释性的语言
1.2java程序的运行机制和JVM
1、特殊的java需要先编译再解释的过程:
源码【.java文件】->(javac编译)->字节码文件【.class文件】->(java解释器JVM)->特定平台的机器码
2、所以现在你可以明白了在不同的平台上,java源码,java编译器和生成的字节码都是一样的,除了JVM不同,因为要将同一字节码生成不同平台的机器码,即JVM向上提供给字节码的接口都一样,向下适应不同平台的接口则互不相同,如果还不明白,就可以把JVM想象为不同手机的充电线,插在充电头的那段都一样,插在手机的一段就各不相同,不同的手机就是不同的平台啊
2、开发java的准备
2.1理解JDK,JRE和JVM
1、首先用一个通俗的式子来说明三者的关系:JDK>JRE>JVM,接着说明三者的概念就能明了这个式子
2、JDK:(Java SE Development Kit)java标准开发包,包含了编译的工具和资源,运行java程序的各种工具和资源(JRE)
3、JRE: (Java Runtime Environment)java运行时环境,就是第二条中的运行java程序的各种工具和资源,包含核心虚拟机(JVM),类加载器,字节校验码和大量的基础类库
4、JVM:(java Virtual Machine)java解释器,字节码转化成为机器码的核心虚拟机
5、java的环境搭建就只需去官网上下载JDK就行了,具体的过程可以参考小编的另一篇文章中的安装JDK
(在设置环境变量的时候,注意用户变量和系统变量的区别,用户变量是只对当前用户有效,而系统变量是对所有用户都有效,系统变量是要排在用户变量前面,意思就是两者都含有同一个java路径,优先执行系统变量)
3、第一个java程序
1、windows平台下就打开记事本就行了,其他最好不要用其他的什么word之类的,开始编辑
public class HelloWorld
{
public static void main(String[] args)
{
System.out.println("Hellow World!");
}
}
特别注意:初学者会认为在System.out.println中的println倒数第二个字母是大写的i,但其实是小写的L,两个长的一样,不要犯错,否则编译的时候会出错。
2、将其保存为HelloWorld.java文件,接着在cmd中进入到包含HelloWorld.java文件的父目录输入命令
javac HelloWorld.java 或者 javac -d . HelloWorld.java来在该目录下生成一个字节码文件 HelloWorld.class
(javac HelloWorld.java这个命令就是使用javac编译器来编译HelloWorld.java这个源码文件,javac -d . HelloWorld.java这个命令的原型是javac -d destdir srcFile,其中destdir 是指定生成字节码文件的存放路径,srcFile是源码的路径,这个路径可以是绝对的,也可以是相对的)
3、接着输入java HelloWorld就会显示Hello World!
特别注意:我们这里命令中的HelloWorld并不是之前生成的HelloWorld.class字节码文件名,也不是HelloWorld.java源码文件名,而是我们源码中类名
4、也许你很奇怪,命令去哪里找这个HelloWorld这个类,当然是当前路径下,那如果想找的类不在当前路径,那么可以使用这个命令:java -classpath class1;chass2.. 其中的class1等等都是类的名字,而-classpath也是一系列路径,多个路径用;隔开,但是要注意,这个命令只会到指定路径中找,不会在当前路径找,使用的时候要注意。
4、Java程序的基本规则
1、java是纯粹面向对象的编程语言,所以必须以类的形式存在,类是java中最小的程序单位,所以不管你是什么方法,执行语句统统都要在类里面才可以。
2、至于每个类中都要有main方法,但是main的写法是固定死的,即main只能由public static void来修饰,形参也只能是String[] args,至于原因后面学习的过程中你就会慢慢明白,初学者只要知道这个是死写法
3、java源文件的扩展名必须是.java,尤其是在windows上你如果没有在文件夹选项中取消隐藏已知文件类型的扩展名,就有可能会产生.java.txt类型的文件,所以最好取消隐藏已知文件类型的扩展名
4、一个java源文件中可以包含多个类定义,但最多只能包含一个public类定义。
5、如果Java源文件中包含了public类定义,原文件的文件名就必须和public类的名字一样,就和我们在之前写第一个java程序的时候,我们的类名是HelloWorld,由public来修饰,我们源代码文件名就必须是HelloWorld.java,有兴趣的同学可以试试不同于类名的文件命名结果
6、java是严格区分大小写的语言,特别注意,java中的关键字都是小写的
7、System.out.println()和System.out.print()方法的区别就是前者输出结束后会换行,后者不会
5、选择什么样的IDE环境?
1、可以很负责任的告诉大家,小白学习最好的IDE环境就是记事本(windows),你可能会笑,但事实就是如此,学习java不等于学习工具,工具是能提供很多便捷,但便捷的背后都是复杂的原理,原理懂才有资格利用便捷;