java语言的理解
在最开始的学习编程的时候,就只知道调用几个api,但是对语言这个完全没有什么概念,也很少去想为什么我调用了这几个api了之后就能实现我想要完成的功能。当然也没有深入的去想过什么是计算机语言,什么是java语言。
伴随着后面专业课的深入的学习,尤其是编译原理的学习、高级系统结构等课程的学习,让我对编程语言从此有了一个完整的了解,从而也对java语言有了一个完整的了解
要理解编程语言,要理解一个概念就是机器语言,机器语言顾名思义是计算机能理解的语言,那就是01的代码,01代码最终会被转换成为脉冲,因为机器是由电驱动的,并不能理解01是什么意思,只能对电压敏感,所以01代表的就是高电平和低电平……后面的就太深入了,就不在这里详解,具体去看计算机组成原理等相关书籍。
我们假设机器能读懂01的代码了,但是我们用01编写太慢,所以就出现了更高级的语言了,如C、C++。大家会觉得奇怪了,为什么你不说java呢,java相对与C、C++来是有很大区别的。C、C++程序翻译成为的可执行文件可以直接在操作系统上运行,但是java程序翻译后却不能直接在操作系统上运行,需要一个虚拟机。所以翻译后java程序最终还是由虚拟机来执行的。所有java的虚拟机才是能直接运行在操作系统上的可执行文件。
java虚拟机本身就是一个虚拟的计算机,它有自己的指令集,有自己的寄存器等(当然这些都是通过软件模拟的,并不是真实的),基于java具有一个独立的虚拟运行环境的特点,所有java语言才有别与其他的高级语言,相对于其他的高级语言java具有跨平台的有点,当然由于需要翻译执行,所有运行性能相对于其他没有虚拟机的语言稍微要差那么一点。大家平时经常看到的class文件就是java程序文件翻译之后的可以在java虚拟机上执行的可执行文件,所谓的class文件就是java虚拟机的指令集的组合。
所以总结出java运行的流程如下
java程序文件——(javac编译器翻译)——》class文件——(java虚拟机翻译、或者直接运行)——》本地的可执行文件——》执行
jar文件的理解
在上面的话题中讲了什么是java语言,接下来讲的是jar文件,其中是有一个先后关系的,当然这个先后关系看似很明了,但是仍然需要我们去理解。
有了更高级的编程语言了之后,我们发觉确实比用机器语言编写更快了,而且java语言的出现,由于java虚拟机具有的自动管理内存的特点,极大的解放了程序员手动管理内存的辛苦。所以java语言出现了之后,有很大一批程序工作者转向了java语言。
有了效率更高,指令集更人性化的java语言之后,就开始项目的开发了,随着java语言的普遍使用,有经验的程序员发现在自己的着手开发的多个项目中有很多代码是可以重复使用的,如果能将这些代码提取出来做成一个公共的模块,那不是可以节省很多的开发时间,这些被提取出来的公共的模块就是所以的jar文件,当然在sun公司推出的jdk中,已经封装了一些使用比较频繁的代码。这些就包括使用的最多的rt.jar,这个就包含了我们javaSE程序中使用的大部分的api的实现如下图所示
终极总结
最后跟大家分享一下我自己通过做项目、看源码之后对java的总结。
用java写程序最最应该注意的就是多线程安全问题,还有就是空对象、数组越界、继承等
java设计模式在jdk自带的jar中还是用的比较多的,在看设计模式的时候,我个人特别推荐你配合jdk中的源码看,这样印象更深刻,一个是方便你了解什么是设计模式,另外一个能让你更好的理解jdk中的代码的组织结构,能让你更有信心的调用jdk中的api,举个例子:比如说观察者模式,在jdk中就有相应的实现,那就事件监听器的实现,具体的实现去看源码。
关于java中大家都很关心的多线程安全问题,据我了解的有以下几种方式:1. 对于需要修改的全局变量,需要采用同步方式,或者说原子操作,或者说使用局部变量。2. 还有就是使用ThreadLocal来解决多线程的问题,关于ThreadLocal怎么使用以及使用ThreadLocal解决了什么样的实际问题,可以自己到网上去看。 |
|