###面向对象 面向对象的三个基本特征:封装、继承、多态。

  • 封装

    封装就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

  • 继承

    继承是指它可以使用现有类的所有功能,并在无需编写原来类的情况下对这些功能进行扩展。

    • 通过继承创建的新类称为“子类”或“派生类”。
    • 被继承的类称为“基类”、“父类”或“超类”。
    • 继承的过程就是从一般到特殊的过程。
    • 要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。
    • 继承概念的实现方式有三类:实现继承、接口继承和可视继承。

      a. 实现继承是指使用基类的属性和方法而无需额外编码的能力;
      b. 接口继承是指仅使用属性和方法的名称,但是子类必须提供实现的能力;
      c. 可视继承是指窗体(类)使用基窗体(类)的外观和实现代码的能力。

有一点需要注意,就是两个类之间的关系应该是“属于”关系。 OO开发范式大致为:划分对象->抽象类->将类组织成为层次化结构(继承和合成)->用类与实例进行设计和实现几个阶段

  • 多态

多态性(polymorphisn)简单来讲就是:允许将子类的指针赋值给父类类型的指针。

实现多态两种方式:覆盖、重载。

###为什么会出现Java这门语言? Java语言诞生于1991年,起初被成为OKA语言,是sun公司为一些消费性电子产品而设计的一个通用环境。他们最初的目的是为了开发一种独立于平台的软件技术,而且在网络出现之前,OKA可以说是默默无闻,甚至差点夭折。但是,网络的出现改变了OKA的命运。

在Java出现以前。Internet上的信息内容都是一些乏死板的HTML文档。这对于迷恋于WEB浏览器的人们来说简直不可容忍。他们迫切希望能在WEB中看到一些交互式的内容,开发人员也希望能够在WEB上创建一类无需考虑硬件平台就可以执行的应用程序,当然这些程序还需要极大的安全保障。对于用户的这种要求,传统的编程能力显得无能为力,sun的工程师敏锐地觉察到这一点,从1994年起,他们开始将OKA技术应用与WEB上,并且开发出了HotJava的第一个版本。当sun公司1995年正式以Java这个名字推出的时候,几乎所有的WEB开发人员都想到:哦,这就是我想要的。于是Java成了一颗耀眼的明星,丑小鸭一下子变成了白天鹅。

名称由来:

  • (咖啡说法)1995年,sun公司和好莱坞准备开展一个技术交流会,皆以宣传公司的产品。James Gosling带着他的系统来到了技术交流会。但他不能用OKA这个名字。已经被一家半导体公司注册了,并且注册了好多领域,只能换名。James Gosling四处观望寻找灵感,他看到了一个泡咖啡的杯子,杯子上印着Java,James Gosling就把这种语言改名为Java。
  • (度假说法)1994年6、7月份,在经历了一场历时3天的头脑风暴的讨论后,Green团队决定再一次改变了努力的目标,这次他们决定将该技术应用于无万维网。他们认为随着Mosaic浏览器的到来,因特网正在向同样的高度互动的远景演变,而这一远景正是他们在有线电视中看到的。此时Green小组组员正在印度尼西亚爪洼岛(Java)度假,于是他们把OKA改名为Java。
  • (简写说法)Java命名来源于开发人员名字的组合:James Gosling、Arthur Van Hoff和Andy Bechtols heim首字母的缩写。

百度知道

###Java语言的优势和劣势。 下面是我在贴吧中看到的一段话

  • Java的劣势的话,跟不同的语言比,有不同的劣势

比如C/C++会说Java性能不行;Python和Ruby会说Java不够灵活,开发周期长;PHP会说Java对网页开发的支持度不够好,不如PHP开发方便。

  • 优势,Java之所以一直位列服务器端,特别是企业级应用开发的首选语言,自然有她的特色。

就语言本身来说,Java大部分的优势来自于JVM的机制。也就是很多人整天说的一次编译到处运行。Java这种不挑剔平台的特性对于开发广泛支持的软件太好了。这也是为什么Java的第三方支持如此发达的一个重要原因。另外,随着其他JVM语言(Jpython,Scala,Clojure等等)的出现,Java平台的编程不在局限于java语言,从而更加灵活和多样,取长补短。 此外Java的语法相对来说比较死板。这点很多人会认为是缺点。但是在大型软件开发的时候,这点却大大减少了配合上的问题。如果一个上百人的项目,人员更替不可避免,语法太灵活的话,后来的开发人员可能对先前开发人员的代码的理解有问题。如果你有过Ruby编程的经历的话,你就会知道一个很简单的功能,在Ruby中有N种写法,有些大师级程序员写的Ruby代码,你可能根本想不到。 除了语言本身,Java还得到了广大软件厂商的支持,包括商业的和开源的,从而培育了繁荣活跃的生态体系。IBM、Oricle、jBoss、Apache、Eclipse、Spring等等。 再加上Java很早就开始重视企业级,分布式,跨平台的大型软件的开发,因此在企业如那件开发的理念和实践上,都一直处于领先的地位。

###Java垃圾回收机制 Java垃圾回收机制是Java虚拟机提供的能力,用于在空闲时间以不定时的方式动态回收无任何医用的对象占用的空间。
需要注意的是:垃圾回收回收的是无任何引用的对象占用的空间而不是对象本身。
System.gc()
Runtime.getRuntime().gc()
上面的方法调用时用于显示通知JVM可以进行一次垃圾回收,但真正的垃圾回收机制具体在什么实践点开始发生动作这同样不可预料的,这和抢占式的线程在发生作用时的原理一样。

百度知道

而我的理解是Java自己有一个内存控制,当内存达到某个点时,会回收掉那些最开始无任何引用的对象的占用的空间,然后按照失效时间或者其它顺序往后依次回收。

###为什么要用面向对象 面向对象是为了解决系统的可维护性,可扩展性,可重用性。进一步思考,面向对象为什么能解决系统的可维护性,可扩展性,可重用性?
面向对象产生的历史原因有下面两点:

  1. 计算机时帮助人们解决问题的,然后计算机终究是机器,它只会按照人们所写的代码,一步一步的执行下去,最终得到结果,因此无论程序多么复杂,计算机总能轻松应付,结构化编程就是按照计算机的思维写出的代码,但是人看到这么复杂的逻辑,就无法维护和扩展了。
  2. 结构化设计就是以功能为目标来设计构造应用系统,这种做法导致我们设计程序时,不得不将客体所构成的现实世界映射到由功能模块组成的解空间中,这种转换过程,背离了人们观察和解决问题的基本思路。

可见结构化设计在设计系统的时候,无法解决重用、维护、扩展的问题,而且会导致逻辑过于复杂,代码晦涩难懂。于是人们就想能不能让计算机直接模拟现实的环境,用人类解决问题的思路,习惯,步骤来设计相应的应用程序?这样的程序人们在读它的时候,会更容易理解,也不需要把现实世界和程序世界来回做转换。
所谓客体是指客观存在的对象实体和主观抽象的概念,这种客体具有属性和行为,而客体是稳定的,行为是不稳定的,同事客体之间具有各种联系,因此面向客体编程比面向行为编程系统更稳定,在面对频繁的需求更改时,改变的往往是行为,而客体一般不需要改变,所以我们就把行为封装起来,这样改变时就只需要改变行为即可,主架构则保持了稳定。
于是面向对象就产生了。 然后人么追求的系统可维护性,可扩展性,可重用性又是怎么在面向对象中体现出来的呢?
封装:找到变化并且把它们封装起来,就可以在不影响其它部分的情况下修改或扩展被封装的变化部分,这是所有设计模式的基础,就是封装变化。因此封装的作用就解决了程序的可扩展性。
继承:子类继承父类,可以继承父类的方法及属性,实现了多态以及代码的重用,因此解决了系统的重用性和扩展性,但是继承破坏了封装,因为他对子类开发的,修改父类会导致所有子类的改变,因此继承一定程度上又破坏了系统的可扩展性,所以继承需要慎用,只有明确的is-a关系才能使用。很多时候面向对象开发者滥用继承,结果造成后期的代码解决不了需求的变化。因此优先使用组合,而不是继承,是面向对象的一个重要的经验。
多态:接口的多种不同实现方式即为多态。接口是对行为的抽象,封装提到,找到变化部分并封装起来,但是封装起来后,怎么适应接下来的变化?这正是接口的作用,接口的主要目的是为不相关的类提供通用的处理服务,想象一下。比如鸟会飞,超人也会飞,通过飞这个接口我们可以让鸟和超人都实现这个接口,这就实现了系统的可维护性,可扩展性。
因此面向对象能实现人们追求的系统可维护性,可扩展性,可重用性。面向对象是一种编程思想。

赵学智博客

###索引 索引,使用索引可快速访问数据库表中特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。
在关系型数据库中,索引是一种与表有关的数据库结构,它可以使对应于表的SQL语句执行的更快。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。当表中有大量记录时,若要对表进行查询,第一种搜索方式是全表搜索,是将所有记录一一取出,和查询条件进行一一对比,然后返回满足条件的记录,这样做会消耗大量数据库系统时间,并造成大量磁盘I/O操作;第二种就是在表中建立索引,然后在索引中找到符合查询条件的索引值,最后通过保存在索引中的ROWID(相当于页码)快速找到表中对应的记录。
索引是一个单独的物理的数据库结构,它使某个表中一列或若干列值的结合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
索引提供指向存储在表的指定列中的数据值的指针,然后根据指定的顺序对这些指针排序。数据库使用索引的方式与使用书籍中的索引的方式很相似:它搜索索引以找到特定值,然后根据指针找到包含改值的行。

百度百科-索引

###关系型数据库 关系型数据库是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。

百度百科-关系型数据库

###万维网 万维网(也叫“Web”、“WWW”、“W3”,英文全称“World Wide Web”)是一个由许多互联网链接的超文本组成的系统,通过互联网访问。在这个系统中,每个有用的事物,称为一样“资源”;并且由一个全域“统一资源标识符”(URL)标识;这些资源通过超文本传输协议(Hypertext Transfer Protocol)传送给用户,而后者通过点击链接来获取资源。万维网联盟(英文:World Wide Consortium,简称W3C),又称为W3C理事会。1994年10月在麻省理工学院(MIT)计算机科学实验室成立。万维网联盟的创建者是万维网的发明者蒂姆·博纳斯-李(Tim Berners-Lee)。

维基百科