Java基础知识专题1-Java语言的特点

Java基础知识专题1-Java语言的特点

前言

很多程序员在准备重新复习Java基础知识的时候,第一个拎出来的问题就是Java语言的特点。网上一百度,大部分就是列举例如:易学、面向对象、平台无关等一系列的名词,一旦深入就没法回答了。所以今天我将这些特性,以自己的理解逐一解释一下,给大家一个参考,希望大家能够共同交流。即是对基础知识的一个回顾,也算是增加自己一个谈资,聊到这类话题也可以吹两句原理。

特点一:简单易学

很多人开始学习Java可能都是听说了这个特性,但是学习的过程发现要学习和记得内容一点也不少!
其实这里指的简单易学也是相对的,Java语法相对接近自然语言,注重用代码的封装、结构来表达逻辑,易于读懂,Java可以说常年都是最流行的开发语言之一,所以其API全面,各类社区也异常活跃,几乎什么问题都能找到解决的办法,其可使用的资料也非常全面。
其次就是随着互联网的飞速发展,Java语言作为一个为网络编程而生的语言,开源的特性使它有众多的框架、组件支持,所以“他山之石,可以攻玉”这句话用在Java开发过程中就非常契合,开发者只要能够熟练使用基础Java语法,很多功能都可以使用开源框架和组件完成。

特性二:面向对象

在Java语言中面向对象主要体现在:继承、封装、多态上。

与面向对象相对的就是面向过程,这两者有什么区别呢?或者说面向对象有什么优劣势,让各大语言都以面向对象标榜自己的先进?

面向对象宣传的理念是“万物皆对象”,讲究的是对事物属性及行为的抽象,从而提取出事物的共性,形成抽象对象,当抽象层级高了以后,对象的属性或者行为就具有一定的共性,可以不断复用,而且维护起来也很方便,想要扩展也是从抽象的角度扩展,不仅仅是一个过程的修改。

而面向过程就没有办法做到以上的优势了,你写一段程序就是在书写的地方执行,其他地方想要使用那就得把这段代码复制过去,要改就得改各个地方。

所以显而易见,面向对象编程的优势在于:使程序更容易维护、代码可以复用、更方便的扩展,同时通过合理的设计可以使程序耦合度降低、设计优雅。

但是面向对象也带来了一个问题那就是程序的效率比面向过程的语言要低。(不绝对!)主要原因有以下两点:

  1. 因为面向对象了,需要抽象封装,会有一个一个的对象(类),无论是创建还是调用都需要消耗更多的内存资源和时间;(次要原因)
  2. 大多数面向过程的语言都是直接编译成机器码在电脑上执行的,而java是一个半编译语言,它最终执行的代码并不是直接由cpu执行的二进制机器码,而是由JVM(java虚拟机)执行的,中间有一定的性能损耗。(性能不如部分面向过程语言的主要原因,但是不太是面向对象的锅,有失必有得:这种运行方式为java带来了强大的跨平台能力)

特点三:平台无关性

实际执行java程序的是JVM,所以由于JVM(虚拟机)的存在,无论任何平台,只要能够安装运行JVM,那么对于标准的java代码,无需做任何兼容,即可在这些平台上运行。

特点四:可靠性(也可以说是健壮性)

任何编程语言对可靠性都有着非常高的要求,但是有些语言是让程序员自己搞定(处理内存、指针等问题),而java语言则是通过其强大的自身功能让程序更加健壮。

  1. 通过完善的编译检查机制,java通过编译器在开发过程中就及早的发现程序的问题,甚至有很多警告,预警代码可能出现漏洞;
  2. 其强大的异常处理机制,通过异常、错误等编译过程和运行过程中的意外处理机制,让程序有足够的容错空间,只要开发者考虑周全,处理得当,程序不会出现非常严重的问题;
  3. java提供了强大的内存管理功能,能够自动的管理内存,通过一系列的强大算法,更加可靠,同时也将程序员从麻烦的内存管理中释放出来,更多的考虑业务逻辑的健壮性和代码的优雅设计。

特点四:安全性

java从设计之初就是为了网络程序而诞生的,所以其具有完备的设计,从结构层面来夯实安全的基础,再辅助加密、身份验证、授权、公共秘钥等安全特性来保证语言的安全性。(当然网络程序要想安全,需要写代码的人处理程序的安全性,不要把语言的安全性和程序的安全性混为一谈)

特点五:支持多线程

java语言支持在一个进程中运行多个线程,这样可以有效提高CPU使用率,从而提高程序效率,但是同时也带来的多线程的同步、安全等问题。(不过都在java语言中得到了很好的处理)

特点六:支持网络编程并且很方便

java语言设计之初就是为了简化网络编程,所以java语言从结构和底层特性,就对网络编程做了很优秀的支持,包括对各种网络协议的支持(从最早的远程方法调用,到后来的socket,再到后来的HTTP/HTTPS),而且基于java的广泛使用和开源性,非常多的基于servlet的网络编程框架,对java的支持保证了java对网络编程的支持性。

特点七:编译与解释并存

要理解这个特性就要知道java代码执行的过程:
首先Java源文件(.java后缀),通过java的编译器(javac)编辑成一个ByteCode字节码文件(.class后缀),字节码由java自己的JVM(java虚拟机)解释执行,虚拟机将每一条要执行的字节码送给解释器,解释器将其翻译成特定机器上的目标机器码,然后再特定的机器上运行。

虽然Java的第一道工序是javac编译,但是编译后的并不直接是机器语言,而是java自己定义的.class文件只有JVM能看懂,但接下来java有三种处理方式:

  1. 运行时,ByteCode由JVM逐条发送给解释器,解释器将其翻译成机器码运行;(边解释边运行)
  2. 运行时,部分ByteCode可能由实时编译器(JIT)编译为目标机器码再执行,因为考虑到有些JVM是采用纯JIT编译方式实现的,其内部没有解释器,例如:JRockit、MaxineVM;
  3. RTSJ,继javac之后执行AOT二次编译,生成静态的目标平台码。

有时候,可能是以上三种方式同时在使用,至少1和2是同时使用的,3则需要程序员手工定制。

所有我们普遍认为java是编译与解释两种方式的混合语言,其实在现在大部分开发语言中都是相互借鉴,把好的方式引入,所以说现在的开发语言无法准确的说是解释型语言还是编译型语言,更多的是都支持,就看开发者想怎么订制、怎么用了。

结语

我也是抛砖引玉,在博客记录一下自己的学习心得,希望大家多多交流,相互进步!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值