【JAVA学习-1】JAVA是什么

     猛然发现,学习JAVA开发也有差不多半年的时间了,虽然说要精通一门语言需要多年的时间,但是这段时间难免会有一些感想和收获,希望能伴随着这段记录持续的学习。以前一直听说JAVA较之于C/C++简单一些,但是刚接触还是让我有点摸不着头脑,知道package是类似于#include的功能,但是不晓得每一个点表示一个目录,这样的折腾很是让人心烦。
     那么,怎么开始学习JAVA呢?首先要弄清楚什么是编程语言,在我的理解中,语言是用于交流的,我们一路上学习汉语,学习英语,不都是为了能和其他人交流吗?而编程语言呢,就是为了能和计算机交流,但是我们的计算机(不局限于电脑,还包括其他的智能设备)也有它的限制,就像我只能听得懂汉语一样,计算机智能识别出它的大脑(CPU)所局限的语言,对于我们来说,这些都是一条一条的指令,最终映射到二进制的机器语言指令,计算机能够识别出这些二进制码的含义,从而执行相应的功能,但是机器语言很难啊,例如在x86平台下,谁能记得住一个mov指令对应的是怎样的1和0的组合呢?为了方便编程,产生了汇编语言,汇编语言是特定于平台的,例如x86上的汇编语言与ARM上的汇编就不一样,汇编与机器语言的指令一一映射的,只不过给那些1和0的组合取了一个更容易记住的名字。但是它还是比较难学,而且还局限于平台上,但是它的执行却是高效的,因为避免了一些不必要的指令。
     随着计算机科学的发展,产生了第三代语言,也被称为高级语言,高级语言通过类似于英文的方式方便了编程者,编程者只需要记住语言的各种规则,然后通过这些规则实现特定的功能,最后通过编译器将代码编译成汇编代码,进而产生对应的机器代码,C/C++就是这样的机制,我们首先编辑源代码,然后使用编译器将代码编译成汇编代码,然后使用汇编器将汇编代码转换成对应平台的机器代码,最后在该平台上执行。但是C/C++对于开发人员有一定的局限性,这个局限性主要在跨平台上,这里的平台不是指CPU了,因为编译器可以帮你屏蔽CPU的差异了(根据不同的CPU产生不同的汇编代码),而是操作系统级别的了,因为C/C++可以直接使用操作系统提供的系统调用,但是类UNIX操作系统支持的系统调用和WINDOWS平台支持的系统调用差异很大,这就导致了编写需要可移植性的程序的时候需要使用宏语句判断当前的平台。因为这个原因,只熟悉Linux操作系统的系统调用的我遇到windows上的C开发就只能大眼瞪小眼了。
     JAVA就不具备这样的缺陷,因为它在操作系统上面又加了一层,这一层叫做虚拟机,从而能够在不同的操作系统上有不同的实现,以实现对操作系统的差异的屏蔽,因此JAVA能够实现“编写一次,到处运行”的特性,不光是JAVA,像python这样的语言也都是运行在虚拟机之上的,所以在运行这些语言之前不光需要语言的编译器,还需要一个叫做虚拟机的软件。除了虚拟机,java还有自己的二进制文件格式,这就类似于windows平台下的PE文件,linux下的ELF文件了,例如一个C语言的可执行文件,怎么才能让操作系统将它映射成一个进程呢?那就需要一种协议,操作系统在解析这个文件的时候能够识别出数据段、代码段等,进而能够为该进程分配地址空间。但是JAVA可执行文件不是直接运行在操作系统之上的,而是运行在虚拟机之上,虚拟机运行在操作系统之上,也就相当于虚拟机能够识别出JAVA可执行文件的格式就可以了,然后为这个JAVA 程序分配内存空间,当然这个内存空间是在虚拟机进程的地址空间里面分配的,而不是在操作系统的一个进程地址空间中。
     好了,扯了这么多不想关的东西,其中相比有一些理解上的错误,还请多多指正。
     那么,想要用JAVA编程需要具备什么呢?首先,我们来想想用C/C++编程需要准备什么?在windows下,一般我们会下载一个vc++6.0,当然,现在我都在用CFree了,我们会在里面写一个printf("hello world !");然后点击一下运行就会在下面的输出区域里面看到“hello world!”了,这个过程需要简单的说明一下,当你点击那个运行按钮之后,这个软件会把你的源代码编译了,然后进行链接,最后帮你运行,最后再将运行过程中输出到终端上的信息输出到它自己的输出区域中。在linux平台上,我们或许需要一个gcc软件,才能将编写的C代码编译,运行(当然,运行不需要gcc),那么这就明确了,我们想要编写C代码,必须首先有一个C语言编译器,例如gcc和VC++,这个编译器必须是操作系统独有的,因为他需要识别出C程序中的系统调用,生成操作系统特有的可执行程序。
     对于JAVA语言呢?正如我们之前分析的那样,它也需要一个编译器,用于将java源代码编译成JAVA虚拟机可以识别的二进制文件格式,除此之外,还需要JAVA虚拟机,这点是和C语言不同的,因为C语言编译之后的可执行程序是操作系统能识别的,而JAVA编译之后的文件只能由JAVA虚拟机识别。在java语言里,编译器是javac文件,java的虚拟机则是java文件,这些文件我们可以在安装的java环境的bin目录下找到。这些就构成了JAVA的基本运行环境,当然还需要一些JAVA的基本库文件等(例如String、容器等),这些被称为JRE(Java Runtime Environment),但是有时候我们需要更多的功能,例如JAVA的调试,生成jar包等,这些由JDK( Java Development Kit )提供,它提供了JAVA开发的支持环境。
    当然,除了这些JAVA还分为三种环境,分别是J2SE、J2EE和J2ME,我觉得他们的区别主要在于JRE包含的库内容不同吧,不涉及到语言层面上区别,另外,JAVA是不断发展的,不断的推出新的版本以支持更高级的功能,当前我是用的是JAVA7,也就是jdk1.7版本。 
    类似于C/C++的main函数,JAVA的程序入口处也是一个main函数,这个函数的定义必须是public static void main(String[] args); public保证了其它的类可以调用,首先它是一个静态函数,这保证不需要创建一个对象就可以执行该函数,该函数没有返回值,不像C语言那样可以通过main的返回值判断程序执行的结果,函数使用一个String数组作为参数,这个参数是用户输入的命令行参数,和C语言不通的是args[0]就是第一个参数,而不是程序名。当运行一个类A的时候,使用JAVA A启动,可以设想启动过程应该是JAVA这个程序在classpath中动态加载A类,如果找不到A类会出现“错误: 找不到或无法加载主类 test”,如果找到了该类,但是该类不包含上面定义的main函数,会出现“错误: 在类 Test 中找不到主方法, 请将主方法定义为:
   public static void main(String[] args)”错误。

     接下来我们来看看我需要学习JAVA的哪些方面,这里我主要参考《JAVA编程思想》的内容来进行介绍,加上一些自己的想法和试验,主要包括的内容包括:
1、JAVA语法基础
2、JAVA中的类和对象
3、JAVA类的访问权限控制
4、JAVA的继承
5、JAVA的接口与多态
6、内部类
7、异常处理
8、字符串
9、容器
10、泛型支持
11、动态类型和反射
12、注解
13、JAVA I/O系统
14、JAVA线程
15、JAVA网络编程













  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值