[原]Java修炼 之 基础篇(一)Java语言特性
学习软件开发,首先要选择的就是选择需要采用的编程语言,考虑语言本身的优缺点和实际需求,综合评价之后选择相关的语言进行系统开发。本篇博客开始就从近年来比较流行的Java开始为大家讲起。
背景
1995年,SUN公司推出了Java的第一个白皮书,其中对Java的定义为:Java是一种简单性(Simple),面向对象(Object-Oriented),分布式(Distributed),解释型(Interpreted),健壮性(Robust),安全性(Secure),结构中立(Architecture-neutral),可移植性(Portable),高性能(High-Performance),多线程(Multi-Threaded),动态的(Dynamic)语言。如何理解这些特性呢?
简单性
Java的简单性是相对于其他语言来讲的,就其本身学习来讲,其实倒不见得如何简单。Java是一种类C的编程语言,基本语法与C、C++类似,其简单性重要的一点就是去除了C中容易出错的指针和内存管理,但正因为如此,Java的内存管理对于开发来讲相对不太容易,经常出现的就是内存占溢出无法释放的问题。还有一点简单性表现在Java编写的软件可以在很小的机器上运行,这与其自身的基础类库所占的大小不足1M有关。
面向对象
Java是一种完全面向对象的编程语言,它虽然只支持类之间的单继承,但可以实现多个接口,另外Java语言全面支持动态绑定的特性也为我们提供了便利。
分布式
Java拥有一个支持HTTP和FTP等基于TCP/IP协议的类库,因此,Java可以获取网络上的任意资源,将网络资源看作本地资源进行操作,另外Java中的远程方法调用RMI( Remote Method Invocation)也为其实现分布式提供了重要手段。
解释型
Java的是一种解释型的编程语言,用Java编写的程序在Java平台上被编译为字节码格式,在运行时,Java平台中的解释器对这些字节码进行解释并执行,这一点与C,C++等编译型语言有所不同。
健壮性
Java语言的健壮性主要表现在Java对指针和内存的管理上。尽管在Java去除了指针的概念,但Java本身采用的是一种类似于指针的对象引用方式巧妙的方式避免了指针使用的随意性。在内存管理上,Java的内存的自动收集机制也是Java程序健壮性的重要保证。
安全性
Java语言的安全性主要表现在两方面:一方面是语言本身的特性,例如去除了指针避免对内存的直接操作;另一方面,Java本身提供了一个安全运行机制使用户免受非可信任的程序的破坏,也就是所谓的沙箱(sandbox)机制。沙箱的作用就是保证Java程序只能在沙箱的边界之内运行,换句话说,Java程序可以在沙箱边界内任意运行,但在沙箱边界之外则什么都不能做。
结构中立
Java语言的结构中立性原因在于Java程序被设计为运行在介于源程序和具体机器之间的Java虚拟机上。主要表现在其编译生成的字节码文件只与Java虚拟机相关,与具体的机器无关,这就是为什么这种字节码从可以在很多处理器上执行的原因。
可移植性
Java的可移植性基础就是Java的结构中立性,另外Java中对基本数据类型的大小和算法都有严格的规定,所以其可移植性相对较好。
高性能
Java的高性能性是相对来讲的,通常来讲编译型语言本身较解释性语言的执行效率要高。Java本身相对于其他解释性的语言而言,其高效性是其他语言所无法匹敌的。虽然Java本身相对于解释型的C和C++运行速度而言有稍许不足,但随着Java编译器的不断发展,这个差距正在逐渐变小。
多线程
Java语言本身能够支持多个线程的同时执行,并且为提供多个线程之间同步运行提供了相应的机制,也就说Java拥有不错的实时交互性和实时控制性。
动态的
Java的动态性表现在Java程序需要的类能够动态的被加载到运行环境中,这对于软件的升级和维护有着重要的意义。
今天我们主要讲解了一下Java的11个特性,如果仅仅应对开发,那么简单的了解就好,但是如果是从架构设计或者系统级考虑,还需要更加深入的了解,这也是为什么我们要深入学习Java语言的根本原因。
好了,今天我们就先介绍到这里,下一次我们继续介绍一下Java的其他相关内容。
[原]Java修炼 之 基础篇(一)Java语言特性的更多相关文章
- [原]Java修炼 之 基础篇(二)Java语言构成
上次的博文中Java修炼 之 基础篇(一)Java语言特性我们介绍了一下Java语言的几个特性,今天我们介绍一下Java语言的构成. 所谓的Java构成,主要是指Java运行环境的组成, ...
- Java多线程系列--“基础篇”11之 生产消费者问题
概要 本章,会对“生产/消费者问题”进行讨论.涉及到的内容包括:1. 生产/消费者模型2. 生产/消费者实现 转载请注明出处:http://www.cnblogs.com/skywang12345/p ...
- Java多线程系列--“基础篇”04之 synchronized关键字
概要 本章,会对synchronized关键字进行介绍.涉及到的内容包括:1. synchronized原理2. synchronized基本规则3. synchronized方法 和 synchro ...
- Java多线程系列--“基础篇”02之 常用的实现多线程的两种方式
概要 本章,我们学习“常用的实现多线程的2种方式”:Thread 和 Runnable.之所以说是常用的,是因为通过还可以通过java.util.concurrent包中的线程池来实现多线程.关于线程 ...
- Java多线程系列--“基础篇”03之 Thread中start()和run()的区别
概要 Thread类包含start()和run()方法,它们的区别是什么?本章将对此作出解答.本章内容包括:start() 和 run()的区别说明start() 和 run()的区别示例start( ...
- Java多线程系列--“基础篇”05之 线程等待与唤醒
概要 本章,会对线程等待/唤醒方法进行介绍.涉及到的内容包括:1. wait(), notify(), notifyAll()等方法介绍2. wait()和notify()3. wait(long t ...
- Java多线程系列--“基础篇”06之 线程让步
概要 本章,会对Thread中的线程让步方法yield()进行介绍.涉及到的内容包括:1. yield()介绍2. yield()示例3. yield() 与 wait()的比较 转载请注明出处:ht ...
- Java多线程系列--“基础篇”07之 线程休眠
概要 本章,会对Thread中sleep()方法进行介绍.涉及到的内容包括:1. sleep()介绍2. sleep()示例3. sleep() 与 wait()的比较 转载请注明出处:http:// ...
- Java多线程系列--“基础篇”08之 join()
概要 本章,会对Thread中join()方法进行介绍.涉及到的内容包括:1. join()介绍2. join()源码分析(基于JDK1.7.0_40)3. join()示例 转载请注明出处:http ...
随机推荐
- windows网络编程-2015.12.29
在windows环境下,使用netstat命令查看网络状态,具体命令如下所示: netstat -ano | findstr listenport 在windows环境下,创建udp程序接收端,具体代 ...
- 【Linux】Centos部署MySQL
将CentOS部署MySQL需要本地配置环境.本地编译MySQL,耗时较长的情况,优化为编译成型MySQL并打包,推送并按配置部署. 首先需要在一台机器配置好环境,搭个YUM源,并将所需要的包取出备用 ...
- Java中函数的重载
函数的重载 1.同一个类 2.同名函数 3.参数个数不同或者参数类型不同 4.java是严谨性语言,如果函数出现的调用的不确定性,会编译失败. public static int add(int a, ...
- std::cout彩色输出
Mac OS效果 Windows 效果 想写这个东西其实是因为最近要写个命令行的工具,但是有个问题是什么呢?就是传统的那个黑漆漆的窗口看起来很蛋疼.并且完全看不到重点,于是就想起 来这么一个东西.相对 ...
- hbase删除region块的脚本
删除hbase表region块脚本 文件hua.txt格式: CHAT_INFO,1318153079100530000314050,1318173760068.991ca04ff164c3f7987 ...
- CSS3实现轮播图效果
CSS3实现轮播图主要是由css:background-position和css3:animation实现.且实现此轮播需要一张四个图横着相连的图片. 注(Internet Explorer 10.F ...
- ERROR 2003: Can't connect to MySQL server on 'localhost' (10061)
解决Can't connect to MySQL server on 'localhost' tomcat连接mysql,大概是c3p0配置和mysql配置都有问题,导致了内存溢出,几天后,mysq ...
- CentOS6 更改Mysql数据库的数据存放位置
mysql使用yum安装时,默认的数据是存储在/var/lib/mysql下.一般情况下,为了数据的安全性,建议将mysql数据库的数据文件存储在系统的第二块磁盘上的目录下可以按照以下步骤进行操作: ...
- C# app.config文件配置和修改
很多时候我们需要对系统的.config文件进度读写操作,例如:系统初始化的参数的更改.系统参数的改变都需要更新到配置文件. 首先我们有必要了解一下app.config.exe.config和vshos ...
- [leetcode]_Merge Two Sorted Lists
题目:合并两个有序单链表 思路:一开始想复杂了,以为必须在原链表上修改(绕来绕去还AC了,但是思路相当绕),其实没有,按照正常地合并两个数组同样的方法也对. 代码: public ListNode m ...