概述
  Java是一门面向对象的语言。对象是Java程序中的基本实体。除了对象之外Java程序同样处理基本数据。
  对象是由类定义的,类可以被认为是该对象的数据类型。
  类、对象、封装以及继承是面向对象软件世界的主要概念。
  使用对象
  抽象

  一个对象是一个抽象,这意味着从该对象的使用者的角度而言,它具体的工作细节是无关紧要的。抽象隐藏细节,一个好的抽象会在恰当的时间隐藏恰当的细节,因此我们能够处理复杂的事物。
  创建对象
  一个Java变量既可以保存一个基本值,又可以保存一个对象引用。与用来保存基本类型的变量一样,用作对象引用的变量必须得到声明。
  new 操作符返回一个指向新创建的对象的引用。
  在对象实例化之后可以使用点(.) 操作符直接附加在该对象的引用之后,后面跟着所调用的方法。
  类库与包
  类库是一套用于支持程序开发的类。一个类库同城与某一编译器一同被提供。但是类库同样可以从第三方的厂商单独获得。类库中包含着方法,这些方法因其提供了某一特殊功能而通常对程序员颇具价值。实际上,程序员通常会依赖于某一类中的某一方法并且将其当作语言的一部分使用。但是从技术上而言,它们并不存在于该语言的定义中。例如String并不是Java语言标准类库的一部分,组成库的类是由SunMic公司的职员创建的。
  类库是由若干类的簇群组成,有时称它们为JavaAPI。API表示应用程序员接口。与API名字相比,包组织更为根本,语言基础性更强。虽然包和API名字之间有一种一般的对应关系,但是组成某个特定API的一组类可能横跨若干包。
  import声明
  java.lang包中的类在编写程序时是自动调用的。但是如果引用其他包中的类,我们要么完整说明该引用,要么使用import(导入)声明。
  状态和行为
  所有对象都具有一个状态和一套行为。对象的变量值定义了其状态,对象所响应的方法定义了其行为。每一个对象都具有其自身所特有的状态。一个对象的状态及该对象的行为共同起着作用。任何对象都可以用其状态和行为对其进行描述。
  类
  对象是由类定义的。类是创建对象所依据的模型、模式或者蓝图。类是对象的蓝图,但是类不是对象。变量的作用域决定了变量在那些地方可以得到引用,它取决于变量是在何处得到声明的。
  在类级声明的属性同样称为实例数据,因为该数据的存储空间为所建类的每一个实例保留着。对于任何在类一级声明的变量,Java都会自动将其初始化。例如所有数值类型的int和double都初始化为0.但是为了程序的稳定性,较好的做法是对变量进行明确的初始化。
  封装
  对象应该封装起来,程序的其余部分应该仅仅通过一个良好定义的接口与对象相互作用。
  【成语变量和局部变量是有区别】
  属性和方法的可见性修饰符。
  局部数据:一个变量或者常量的作用域是能够对该变量做出有效引用的程序部分。一个变量可以在某个方法的内部被声明,这使得其成为与实例数据相反的局部数据。
  构造函数
  构造函数不能有任何返回类型,void也是不可以的。构造函数类似于对象初始化时调用的方法。
  构造函数与常规函数有两个地方不同:
  【1】构造函数与类有相同的名字
  【2】构造函数不能返回一个值,且不具有在方法头中指定的返回类型。
  方法重载
  Java和其他的面向对象的语言一样,具有不同参数列表的多个方法是可以使用相同的名字,这种技术叫做方法重载。重载方法的版本通过签名加以区分。参数的类型、数量或者顺序必须不同。
  重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准。调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这是多态性。
  重载的规则:
  1、必须具有不同的参数列表;
  2、可以有不同的返回类型,只要参数列表不同可以了;
  3、可以有不同的访问修饰符;
  4、可以抛出不同的异常;
  方法重写
  父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这需要采用方法的重写。方法重写又称方法覆盖。
  若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。 如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。
  子类函数的访问修饰权限不能少于父类的;
  重写的规则
  1、参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载。
  2、返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载。
  3、访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)
  4、重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常。例如:父类的一个方法申明了一个检查异常IOException,在重写这个方法是不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常。
  方法重载和方法重写的比较总结
  多态性是面向对象编程的一种特性,和方法无关,简单说,是同样的一个方法能够根据输入数据的不同,做出不同的处理,即方法的重载——有不同的参数列表(静态多态性)。
  当子类继承自父类的相同方法,输入数据一样,但要做出有别于父类的响应时,你要覆盖父类方法,即在子类中重写该方法——相同参数,不同实现(动态多态性)。
  重写多态性起作用,对调用被重载过的方法可以大大减少代码的输入量,同一个方法名只要往里面传递不同的参数可以拥有不同的功能或返回值。用好重写和重载可以设计一个结构清晰而简洁的类,可以说重写和重载在编写代码过程中的作用非同一般.
  引用
  对象应用变量和对象是两个不同的东西。引用变量的声明和创建它所引用的对象,其步骤是不同的。一个对象引用变量存储的是某一对象的地址。
  空引用
  保留字null表示引用没有指向一个有效的对象。
  this引用
  Java的另一个特殊引用称为this引用。this 是Java 的保留字。它允许某一对象指向其自身。在类的内部this引用可以用来指向当前正在运行的对象。this引用总是指向挡墙正在运行的对象。
  别名
  应为对象的引用变量存储的是一个地址,所以程序员在管理对象的时候必须特别小心。
  基本类型的赋值:在基本类型的赋值中(num2=num1)num2中存储的是num1存储值的一个备份。
  对象类型的赋值:两个对象类型引用的赋值动作之后是将O1的地址复制到O2中,初两者可能指向不同的对象,赋值之后两者包含都是同样的地址,因此指向的是相同的对象。
  多个引用可以指向相同的对象,这些应用都是彼此的别名。
  “==”操作符比较的是对象引用的等同性,如果相互为别名那么返回true。
  垃圾回收
  当某个对象的所有引用都丢失了(可能是因为重新赋值),则该对象不能在参与到该程序中来了。该程序不能够调用其方法或者使用其变量,此时该对象为垃圾。
  Java会进行垃圾自动回收,程序员不需要考虑成为垃圾的存储空间具体如何回收的问题。
  如果程序员想在某一活动完成的同时销毁该对象,则此程序员可以在该对象的类中定义一个称为finalize的方法。Java在该对象标记为垃圾回收之后且在他实际销毁之前运行它。finalize可以用来处理Java回收期不会处理的活动比如关闭文件。
  对象作为参数传递
  在将一个对象传递给一个方法之后,实参和形参成为了彼此的别名。Java通过值传递的方式将所有参数传递给某一方法。本质上讲,参数传递像是一个赋值语句,即将在存储在实参中共的值的一个备份赋值给形参。
  当对某一方法内部的一个形参进行更改时,我们必须考虑这一问题。因为形参是传递进来的值的一个单独备份,因此对其做出的任何更改将不会对实参产生印象。在控制权返回至调用方法之后,实参的值和方法被调用之前一样。
  static修饰符
  static修饰符是能够将一变量和方法与其类而不是该类的对象关联起来。
  静态变量
  静态变量也称为类变量,每一个对象存在一个静态变量的副本。静态变量由类的所有实例共享。
  静态方法
  静态方法也成为类方法,可以通过其类名来调用。调用静态方法的时候不需要对该类的某一对象进行实例化。因为静态方法不能够在某个对象的上下文中进行操作,所以它不能引用仅存在与某个类的某个实例的实例变量。如果某个静态方法企图好似还用某个非静态变量,则编译器会报错、
  包装类
  一个包装类是代表一个特定的基本类型,这样可以当作对象来处理基本类型。