Java基础系列之初遇Java

导语

时至今日,Java语言已历时二十多年,已经发展成为计算机史上影响最为深远的编程语言之一,在某种程度上甚至已经超过了编程语言的范畴,成为了一种开发平台,一种开发规范。更有甚者,Java已经成为了一种信仰,一种对开源和分享精神的代表。

了解Java


我们不妨在搜索引擎里面直接搜索下Java


image.png

好吧,开个玩笑,搜索出来的前几列都是广告,这恰恰证明了Java的火爆。我们还是看下百度百科对于Java的描述吧。

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。
Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等

这里面重点是面向对象安全性平台独立可移植性

  • 安全性
    Java提供一个相对安全的内存管理和访问机制,避免了绝大部分的内存泄露和指针越界问题。这里先了解下内存泄露概念:
    内存泄露:分配出去的内存得不到及时回收,如此便会导致系统运行速度变慢,更有甚者,导致系统瘫痪。什么情况下会导致内存泄露呢?程序忘记及时回收无用的资源、程序错误回收核心类库内存。前者只是让系统变慢,后者可能造成系统的瘫痪。
  • 平台独立与可移植性
    如何才能称为平台独立与可移植性呢?那就得是在不同的cpu、Java编译器或者操作系统上运行代码得出的结果应该是一致的。JVM给Java提供了一个虚拟CPU般的存在使得Java呈现出这个特性。
  • 面向对象我们在后续的章节里面具体分析。

Java的发展历史


计算机从无到有,因此,任何语言也是有发展历程的,Java也不能例外。但是有意思的是,Java的诞生更为的有意思,甚至可以说是一场意外。
1990年年末,Sun公司打算给智能家电编写一个通用的系统,因此Java之父James Gosling领导的“Green计划”团队准备为此开发。起初考虑使用C++语言,该团队很多成员发现C++和可用的Api在某些方面存在很大的问题,该团队资源有限,且C++太过复杂,缺少垃圾回收、可移植性和分布式等特性。于是乎,Gosling创造了一种新的语言Oak,Oak便是Java的前身。

  1. 1995年Sun公司发布了Java,Sun公司直接把Java放在互联网上,供大家免费使用。
  2. 1996年Sun公司发布了Java1.0,这个环境下已经包含了JRE和JDK
  3. 中间省略掉某些版本,我们直接聊聊Java1.4,这个版本是一个相对成熟的版本,目前国内还有很多公司在使用。2002年2月发布,在此期间,诞生了大量的基于Java的开源框架,如我们熟悉的三大框架Spring,Struts,Hibernate,同时也涌现了大量的企业应用服务器,Weblogic,Jboss等。
  4. 2004年10月发布了Java的里程碑版本Java1.5(更名Java5.0),把之前一直称呼的J2EE正式更名为Java EE。这个版本增加了增强for、泛型、可变参数、枚举类、注解、自动装箱和拆箱等。
  5. 2014年3月18日,Oracle公司发布了Java SE8,(Sun公司很不幸的被收购了)。这次更新带来了全新的Lambda表达式和很多其他的新特性。

Java程序的基本规则


说完发展历史,我们直接说点实在的,说说代码吧。
首先我们要理解两个概念:类和实例。
类:英文名class在Java里面随处可见,所有的Java文件编译后都是.class,程序员面向世界的第一个代码如下

public class HelloWorld{

}

这就是一个类,百度百科描述:类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础。类是一种用户定义类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。
好吧,其实说白了,就是存放我们要写的代码的容器,我们的代码都写在类里面(狭义的,后面还有接口,枚举等)。专业点的说法就是:类是Java程序的最小程序单位。
实例:英文名instance,也称之为对象,就是我们常说的面向对象的对象。是类的具体实现。如new HelloWorld();,就是一个实例。还有一种创建实例的方式,我们可以根据英文名称,去java.lang.Class类中查找下关于实例的方法,找到一个叫newInstance(),顾名思义,这也是创建实例的一种方式。

  • Java的一些规范
    和Linux操作系统般的,Java是大小写敏感的。我们会有一些约定的规范,类名首字母为大写,方法名首字母为小写(其实,反过来,Java也能编译成功,不会影响结果),命名规范为驼峰原则(早期sun公司并没有遵守这个规范比如大名鼎鼎的Hashtable),final修饰的常量采用全部大写的方式(这个 java.awt.Color类里面很有意思的是出现一个大写,一个小写的变量,可能当时开发粗心导致的吧,后续为了修复这个问题全部改大写了,实现的效果是一样的,再次说明Java大小写敏感)。类的程序入口是main方法,且这个main方法是public static void 修饰,形参是String[] 数组。

浅谈垃圾回收机制


之前说到Java安全特性,我们聊到了内存泄露和指针越界的问题,其实就引出了垃圾回收机制。
众所周知,Java的堆是一个运行时数据区,用以保存Java的实例(对象)。由于Java程序员不负责对象的回收,那么Java需要自己把无用对象回收掉,这就是垃圾回收机制。你可以这样理解,C/C++ 就好比一个小孩在房间里面玩折纸,地上无用的纸屑,需要小孩自己去捡起来,扔掉。而Java,则允许小孩丢纸屑,不必自己去捡起来,有一台扫地机器人帮忙丢掉无用的纸屑。

  • 优点
    • 提高编程效率 (玩的开心)
    • 保护程序完整性(不打断玩)
  • 特性
    • 回收无用对象的内存空间,只回收内存资源,对于物理资源、数据库连接、磁盘I/O等无能为力(如果纸屑在桌子上,机器人表示无能为力)
    • 将引用变量置为null,能暗示垃圾回收机制可以回收对象
    • 垃圾回收发生不可预知,System.gc()或Runtime对象的gc()只是起到建议作用
    • 垃圾回收机制能精确标记活着的对象;垃圾回收器能精确定位到对象之间的引用关系。
    • JVM有多种不同的垃圾回收实现

关于运行时内存区域:2014年3月发布的Java8删除了HotSpot JVM中的永久代内存(PermGen,永久代内存主要用于存储一些需要常驻内存、通常不会被回收的信息),而是改为使用本地内存来存储类的元数据信息,并称之为元空间,这就意味着以后不会出现Java.lang.OutOfMemoryEror:PermGen错误(解决了eclipse自动重启报错的问题)

尾声

篇幅加上个人能力有限,对于初遇Java只能写到这里了。后续将会发布更多可能含有些技术含量的文章,再见。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容