JAVA开发讲义(一)-Java的自白
程序之美
Java是一种优秀的程序设计语言。初步接触Java可能要从大学的时候讲起,当时主要学习C++,时不时的听到身边的朋友说起Java,对Java只有朦胧的认识,甚至还有些反感,认为Java没有C++底层,JVM底层应该是用c和c++实现的。Java类库就是用Java语言实现的,要学习就要学习最底层,最牛逼的,从而心理上也对语言产生了差异对待,正如网上流传的段子一样,写C的程序猿看不起写C++,写C++的看不写Java的,写Java的看不起写JS的,认为脚本语言根本对不起软件开发工程师的称呼,写JS的看不起搞美工,然而周末大家都在加班,美工带着女朋友旅游去了。虽然这个只是个段子,但是确实很多程序猿内心的真实写照,当初的我心理上何尝不是如此,但是随着年龄的增长,阅历的增加,学习语言种类越来越多,慢慢的观念改变了,认为语言都是相通的,都是解决问题的手段,只是一门开发工具而已,无所谓一定要分个三六九等,关键是你怎么用,让他发挥最大的价值,正如邓爷爷说的那样,无论黑猫白猫,能抓到老鼠就是好猫。现在定义一位优秀的软件工程师,已不再是看他是搞什么开发的,而是看他能不能把本专业研究的领域吃透,做出成绩,比如说他是做JS的,就看他能不能理解到JS的精髓,把它用到发挥它更大价值的地方,这样才能称得上是一名优秀的工程师,最起码我是这么认为的。
Java有许多优秀语言的特性,但是由于相容性等原因,Java语言中还存在着或多或少的累赘,导致Java并不如我们想象的那么完美。Java并不只是一门语言,而是一个完整的平台,有着庞大的库,其中包含了很多可以重用的代码和一个提供诸如安全性、跨平台的可移植性以及自动垃圾回收等服务的执行环境。
正是因为Java集多种优势于一身,所有对于小伙伴们有着不可抗拒的吸引力。
下面言归正传,开始我们的重点学习之旅。
Java设计者发布了一个白皮书解释设计的初衷,并发布了一个简短的摘要,通过11个关键术语进行叙述:
(1)简单性
(2)面向对象
(3)分布式
(4)健壮性
(5)安全性
(6)体系结构中立
(7)可移植性
(8)解释性
(9)高性能
(10)多线程
(11)动态性
简单性
java设计之初就是为了无需专业训练就可以编程,为了便于理解,它尽可能的接近C++,剔除了C++中的很少用的难以理解的、易于混淆的特性,比如说头文件、指针运算、结构、联合、操作符重载、虚基类等部分。他可以看做是一个纯净版的C++语法。
另外,Java的目标之一是支持能够在小型机上开发运行。他确实做到了,并且在不断的优化。当年它做到基本的解释器以及类支持大约仅为40KB,加上标准类库和线程(自包含的微内核)大约需要增加175KB。这个在当年是非常了不起的,随着不断发展,已经发展成了一个独立的具有较小类库的Java微信版。
面向对象
简单的讲,面向对象重点在数据(即对象)和对象的接口上。打个比方:一个工人制作零件,一个面向对象的工人始终关注的是零件,其次才是使用的工具;而一个非面向对象的工匠首先考虑的是使用的工具。Java的面向对象技术已经非常成熟,和C++旗鼓相当,不同之处就是多重继承,对此java使用的更简单的接口概念。同时,java也提供了更丰富的运行时字形功能。
分布式
Java通过URL打开和访问网络上的对象,十分方便,它有着丰富的例程库用于处理HTTP和FTP的TCP/IP协议。
比如现在的OkHttp3,调用和使用起来就非常方便。如下实例
/**
* 同步get请求
*/
public static void syncGet() throws Exception{
String url = "http://www.baidu.com/";
OkHttpClient client = new OkHttpClient(); // 创建OkHttpClient对象
if(client != null){
Request request = new Request.Builder().url(urlBaidu).build(); // 创建一个请求
if(request != null){
Response response = client.newCall(request).execute(); // 返回实体
if (response.isSuccessful()) { // 判断是否成功
/**返回数据可通过response.body().string()获取
* string()使用与获取信息量小的数据,如果返回的数据超过1024K,需使用stream()获取返回的数据*/
System.out.println(response.body().string()); // 打印数据
}else {
System.out.println("失败"); // 链接失败
}
}
}
}
健壮性
Java投入了大量精力在于早期问题检查、后期动态检测(运行时),消除重写内存和损坏数据的可能性。和C++相比,这样不仅节省了排查问题的时间,而且提高了程序的可靠性。
安全性
1、Java适用于网络/分布式环境,在安全性方面投入了很大的精力,可以用来构建防病毒、防篡改系统。
2、防止运行时堆栈溢出,如蠕虫和病毒的攻击等等。
3、防止破坏自进程之外的内存的攻击。
4、防止未经授权进行文件读写。
允许不可信的代码攻击主系统的Bug的修复大大提升了java浏览器插件的谨慎度,除非代码有数字签名并且经过用户的允许。
体系结构中立
Java编译器通过生成与特定的计算机体系结构无关的字节码指令,这些字节码指令是经过精心设计的,是经过编译的代码,很容易在任何机器上解释执行,只要有java运行时系统,他就可以在许多处理器上运行,而且还可以动态的翻译成本地机器代码。
这个过程就是解释虚拟机指令,其肯定会比全速运行机器指令慢,但他可以实现即时编译,即将执行最频繁的字节码序列翻译成机器码。另外虚拟机还可以安全性的检测指令序列的行为。
可移植性
Java除了与用户界面相关的部分外,所有其他Java库都能很好的支持平台独立性。可以处理文件、正则表达式、XML、日期和时间、数据库、网络连接、线程等,不用考虑底层的操作系统。
Java之所以可移植主要因为:
1、在Java中,数据类型具有固定的大小,比如Int永远为32位的整数,不会随着操作系统的不同而不同,也不会随着编译器的指定而变化。这就消除了代码移植时令人头疼的问题。二进制数据以固定的格式进行传输和存储,消除了字节序的困扰。
解释性
任何机器,只要是移植了Java解释器,就可以运行Java字节码。开发过程也由于链接的增量式且轻量级而变得更加快捷,更加有探索性。
高性能
在运行时,字节码可以动态地翻译成对应运行这个应用的特定CPU的机器码。即时编译器较传统编译器的优点:
1、它比传统编译器含有更多的可用信息。如可以监控经常执行的代码并优化这些代码来提高速度。
2、它比传统编译器更为复杂的优化是消除函数调用,即内联。即时编译器基于当前加载的类集,在特定的函数不被覆盖时可以使用内联,另外还可以撤销优化。
多线程
多线程即为多个任务同时执行,相互独立,可以带来更好的交互响应和实时行为。并发性,在Java中逐渐被人们关注起来,不再追求更快的处理器,而是获得更多的处理器,并保持他们能够稳定的工作。Java支持并发,并且确保用户界面流畅的执行和展示。
动态性
Java能够适应不断发展变化的环境,其库中可以自由的添加新方法和实例变量,并不会影响到客户端。比如:从Internet下载代码,然后在浏览器上运行,这是Java动态性的一个很好的体现,将代码添加到正在运行的程序中。
作为一种机器语言,Java的确是一种优秀的程序设计语言,作为一名名副其实的程序设计工程师,选择Java无疑是一个好选择,它具有令人赏心悦目的语法和易于理解的语义,有可移植性,垃圾回收机制,它是一种功能齐全的语言,也是一个高质量的执行环境。希望我的寥寥数比能够给Java来一个自白,也希望我的点点之语能够帮助到奔波在Java学习大道上的小伙伴们。很感谢您能在百忙之中浏览我的这篇专栏,您的成长是我最大的幸福。