2018-07-25 java纯基础

本内容来自某本书。


Chp1 Hello World!

本章是全书的第一章,本章会向你介绍开始学习 Java 之前的准备知识。

1 Java 语言介绍

1.1 Java 语言的历史

前部分是发展史,本人目前看不懂

那么,Java 语言究竟有什么魔力,能够在众多语言中脱颖而出,成为世界第一大语言呢?

主要源于下面的一些语言特性:

  • 纯面向对象:

相对于另一种面向对象的语言 C++,Java 语言是一种非常纯粹的面向对象的语言。对于 C++而言,写程序除了可以使用面向对象的方式之外,还可以采用面向过程、面向模板等多种方式;而相对的,Java 语言只能采用面向对象的方式进行编程。

  • 简单 VS 复杂

    由于 Java 语言相对 C++来说是一种纯粹的面向对象的语言,因此 Java 语言在理解和学习方面,都要比 C++语言更简单。
    Java 的简单性,指的是 Java 语言的这种特点:

    1. Java 语言本身的特点非常简单,没有复杂和晦涩的语法细节;
    2. Java 语言倾向于让程序员能够简洁清晰的完成任务。

    而 Java 语言同时也是复杂的,体现在:

    1. 虽然 Java 语言本身非常简单,但是它有大量强大而扎实的类库,这些类库极大的丰富了 Java 语言的特性;
    2. Java 语言最主要的阵地是企业级应用,这种应用本身,由于涉及到多线程、分布式、数据库、网络等各种各样的领域,因此,需求非常复杂。为了应对这种复杂的需求,Java 语言也提供了各种对应的特性,因此从这个角度来看,Java 语言是复杂的。或许,我们可以拿一句英语来总结 Java 语言的简单和复杂:“Simple thing should be simple, Complex thing should be possible”。
  • 开放性

Java 语言是一种开放的语言。这种开放集中体现在 Sun 公司:Sun 公司已经对 Java 语言开源,任何人都可以读到 Java 语言的代码;Sun 公司接受任何人提交的 JSR,也就是说,任何程序员都可以对 Java 语言未来的发展提出自己的开发和建议;Sun 公司提供了 Java 语言的免费下载。
现在,Java 社区有大量开源、免费的东西可供下载和使用,这在一定程度上也帮助了Java 语言的发展和推广。

  • 跨平台性

这是溶入 Java 血液中的一个机制。这个机制决定了,运行 Java 可以在各种平台上面,包括常见的桌面 Windows 系统,也包括企业级应用需要的 Unix 系统。这意味着 Java 语言既能够轻快的在桌面上运行,也能够扎实稳定的在企业级操作系统中运行。这种在不同平台下运行的能力使 Java 语言在企业级应用中有着深远的影响。

1.2 Java 语言的运行机制

  1. 首先,我们简单介绍一下什么是计算机语言。对于计算机来说,真正能够直接执行的是所谓的“计算机指令”。这种计算机指令,一方面跟操作系统有关系,也就是说,Windows系统和 Linux 系统下的指令不同;另一方面,也跟计算机的硬件有关系,不同的 CPU 具有不同的指令集。

  2. 直接操作计算机指令,使用的是机器语言以及汇编语言。然而,对于程序员来说,直接使用汇编语言来编写程序,开发起来非常的慢,也非常的辛苦。为了能让程序开发的速度提升,我们设计出了计算机高级语言。

  3. 所谓的计算机高级语言,实际上指的:人为的规定一些语法。然后,在遵循这些语法的
    前提下,写出一个文本文件,最后利用某种方式,把文本文件转化为机器指令进行执行。我
    们现在所谓的编程,往往指的就是编写文本文件的这个部分。这个文本文件一般我们称之为
    源文件。

  4. 那么,应当如何把一个源文件转化为机器指令进行执行呢?在现代计算机语言中,主要
    有两种方式:一种是编译型,一种是解释型。

  5. 什么叫编译型语言呢?这指的是,通过一个编译器软件,把源文件转化为可执行文件。
    可执行文件的内容,就是一些机器指令,以及相关的一些数据。在 Windows 中,可执行文
    件往往以.exe 作为后缀名。在执行程序的时候,不需要源代码文件,只需要可执行文件即可。
    示意如下:

源文件 -- 编译器--> 可执行文件 运行可执行文件 --> 机器指令

  • 与编译型语言相对的是解释型语言。解释型语言需要一个解释器软件,这个软件会读源
    文件,在读文件的过程中,同时完成将源文件内容翻译成机器指令以及执行的过程。换句话
    说,解释器将读取源文件、翻译成机器指令、执行指令这三步同时完成。示意如下:

文本文件 ---解释器-> 直接翻译成机器指令

  • 由上可知,编译型语言在将源文件编译成可执行文件之后,运行程序只需要可执行文件,
    不再需要重复编译的过程。而解释型语言每次运行时必须重复翻译源文件,因此从运行效率
    上来说,解释型语言远远不如编译型语言。

  • 当然,解释型语言也有自己的优势:跨平台性较好。由于编译型语言运行时只需要可执
    行文件,而可执行文件又与平台紧密相连,这也就意味着,对于不同的平台,必须要有不同
    的可执行文件才行。而相对而言,解释型语言就没有这么麻烦,对于不同的平台,只需要有
    不同的解释器就可以了,源代码几乎不用进行修改。

  • 而 Java 语言,则兼具有编译型和解释型两种语言的特点:Java 语言运行时,采用的是
    先编译、后解释的方式运行。

  • 首先,Java 源代码要写在后缀名为.java 的源文件中。然后,通过一个编译器,编译生
    成.class 文件,这个文件被称为“二进制字节码文件”。

  • 而.class 文件并不能够直接在机器上执行。执行.class 文件,需要一个解释器,这个解释
    器会把.class 中的指令翻译成真正机器上的指令。也就是说,需要解释执行.class 文件。

  • 示意如下:

.java 源文件 -- 编译 --> .class 字节码文件 -- 解释执行 --> 真正的机器指令

  • 字节码文件是平台中立的,也就是说,运行在不同平台上的.class 文件内容相同,与所
    在平台无关。

  • 那么.class 文件中保存的是什么内容呢?这个文件中保存的也是计算机指令,所不同的
    是,这些计算机指令不是真实计算机所拥有的指令,而是一些虚拟的指令。在解释执行.class
    文件的指令时,为了能让这些虚拟的计算机指令能够转换成真正的计算机指令,我们需要一
    个 Java 虚拟机(Java Virtual Machine,简称 JVM)。

  • JVM 事实上是一个软件,这个软件为 Java 程序模拟出一个统一的运行环境。Java 程序只
    需要适应这个虚拟的环境,而与底层真正的硬件环境及操作系统环境无关。换句话说,JVM
    的作用在于,它屏蔽了底层不同平台的差异。

  • Java 虚拟机接收.class 文件中的虚拟指令,这些指令很类似于真正的汇编语言指令,但
    这些指令与底层的操作系统平台和硬件平台无关,完全是另外设计出的一套独立体系。而不
    同平台下的 Java 虚拟机,在执行时,会把.class 文件中的虚拟机指令翻译成对应平台上真正
    的计算机指令。因此,我们可以修改上面的示意如下:
    .java 源文件 -- 编译 --> .class 字节码文件 –在 JVM 中解释执行--> 真正的机器指令

  • Java 语言这种“先编译,后解释”的运行机制,使得其同时拥有了编译型语言的高效性
    和解释型语言的跨平台性,Sun 公司给出了最好的注解:“Write once , run anywhere”

1.3 JRE 与 JDK

  • 如果一个程序员要发布 Java 程序,一般来说,会发布.class 文件。而如果要运行 Java
    程序,同样指的是运行.class 文件。因此,运行 Java 程序,只需要 Java 虚拟机和解释器就可
    以运行。即 JRE,也就是 Java Runtime Environment 的缩写,指的是 Java 的运行环境。包括
    JVM 和 Java 解释器。
  • 但是仅仅有 JRE,只能是完成.从 class 文件到真正的机器指令这一步,而无法把一个源
    文件编译成一个.class 文件。在 Sun 公司的网站上,有一个术语叫做 JDK。所谓的 JDK,指
    的是 Java Development Kit,Java 开发工具包。从内容上说,

JDK = JRE + 工具(编译器、调试器、其他工具„„) + 类库


Chp2 Java 语言基础


image

索引

什么是索引

索引就是通过事先排好序,从而在查找时可以应用二分查找等高效率的算法。
一般的顺序查找,复杂度为O(n),而二分查找复杂度为O(log2n)。当n很大时,二者的效率相差及其悬殊。

数据查询方式

不管数据表有无索引,首先在SGA的数据缓冲区中查找所需要的数据,如果数据缓冲区中没有需要的数据时,服务器进程才去读磁盘。
1、无索引,直接去读表数据存放的磁盘块,读到数据缓冲区中再查找需要的数据。
2、有索引,先读入索引表,通过索引表直接找到所需数据的物理地址,并把数据读入数据缓冲区中

集合

集合分类.png
  • Connection都实现了Iterator接口。
    • List:有序可以重复的集合
      • Arraylist: 底层数据结构是数组,查询快,增删慢;线程不安全,效率高.数组的特性是可以使用索引的方式来快速定位对象的位置,因此对于快速的随机取得对象的需求,使用ArrayList实现执行效率上会比较好.

      • LinkedList: 底层数据结构是链表,查询慢,增删快;线程不安全,效率高LinkedList是采用链表的方式来实现List接口的,它本身有自己特定的方法,如: addFirst(),addLast(),getFirst(),removeFirst()等. 由于是采用链表实现的,因此在进行insert和remove动作时在效率上要比ArrayList要好得多!适合用来实现Stack(堆栈)与Queue(队列),前者先进后出,后者是先进先出.

    • set
      • hashset和treeset 底层都是实现了hashmap和treemap
  • map
    • hashmap:

      • AbstractMap抽象类:(HashMap继承AbstractMap)覆盖了equals()和hashCode()方法以确保两个相等映射返回相同的哈希码。如果两个映射大小相等、包含同样的键且每个键在这两个映射中对应的值都相同,则这两个映射相等。映射的哈希码是映射元素哈希码的总和,其中每个元素是Map.Entry接口的一个实现。因此,不论映射内部顺序如何,两个相等映射会报告相同的哈希码。
    • treemap

      • SortedMap接口:(TreeMap继承自SortedMap)它用来保持键的有序顺序。SortedMap接口为映像的视图(子集),包括两个端点提供了访问方法。除了排序是作用于映射的键以外,处理SortedMap和处理SortedSet一样。添加到SortedMap实现类的元素必须实现Comparable接口,否则您必须给它的构造函数提供一个Comparator接口的实现。TreeMap类是它的唯一一份实现。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,559评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,531评论 18 399
  • 想象是一阵风,吹去心中之苦,带来更多美好。 ——题记 十年之后...
    乙烯疯子阅读 242评论 0 2
  • 黑夜给我一双看透人心的眼睛让我看清楚藏在黑夜里的心思是黑暗,是邪恶,还是美好 你说,活在阳光下太累了总是在追逐想抓...
    请不同名阅读 287评论 3 5