您的位置:首页 > 编程语言 > Java开发

TIJ-第一章:对象介绍

2016-03-03 18:37 369 查看
2016-2-27-TIJ-第一章:对象介绍
#1#面向对象程序设计:object-oriented-programming OOP
#2#OOP 允许根据问题来描述问题,而不是根据运行解决方案的计算机来描述问题。
#3#OOP语言特点:
    1.万物皆为对象;2.程序是对象的集合,它们通过发送消息来告知彼此所要做的。3.每个对象都有自己的由其他对象所构成的存储;4.每个对象都拥有其类型;5.某一特定类型的所有对象都可以接收同样的消息;
    对象具有状态、行为、标识;
#4#类(class):具有相同特性(数据元素)和行为(功能)的对象集合。
#面向对象程序设计的挑战之一就是在问题空间的元素和解空间的对象之间创建一对一的映射。
#5#类型决定能够请求对象的操作(接口interface)
#6#Light lt = new Light();----- 定义对象的引用 lt
  lt.on() -----向引用对象lt发送信息on
#7#统一建模语言(UML:unified modelling language):是用来对软件密集系统进行可视化建模的一种语言。UML的定义包括UML语义和UML表示法两个元素。
每个类用方框表示,类名位于方框的顶部,任何数据成员的描述都在方框的中间部分,方法位于方框的底部;
#8#可以将对象想象为服务提供者,程序本身将向用户提供服务,它通过调用其他对象的服务来实现这一目的。
#9#程序人员按照角色分为:类创建者,创建类型的程序员。职责是构建类。
客户端程序员,使用数据类型的消费者。职责是收集各种用来实现快速应用开发的类。
#访问控制存在的原因:1.让客户端程序员无法触及他们不应该触及的部分——这些部分对数据类型的内部操作来说是必需的,但并不是用户解决特定问题所需接口的一部分。
2.允许库设计者可以改变类内部的工作方式而不用担心会影响到客户端程序员。
#10#java 包机制:包是类的容器,用于分隔类名空间。如果没有指定包名,所有的示例都属于一个默认的无名包。java中的包一般均包含相关的类。
程序员可以使用package指明源文件中的类属于哪个具体的包。包语句的格式为:package pkg1[.pkg2[.pkg3…]];

包的名字有层次关系,各层之间以点分隔。包层次必须与Java开发系统的文件系统结构相同。通常包名中全部用小写字母,这与类名以大写字母开头,且各字的首字母亦大写的命名约定有所不同。

程序中如果有package语句,该语句一定是源文件中的第一条可执行语句,它的前面只能有注释或空行。另外,一个文件中最多只能有一条package语句。

当使用包说明时,程序中无需再引用(import)同一个包或该包的任何元素。import语句只用来将其他包中的类引入当前名字空间中。而当前包总是处于当前名字空间中。
如果文件声明如下:
package java.awt.image
则此文件必须存放在Windows的java\awt\image目录下或unix的java/awt/image目录下。

#11#java的访问指定词:public、private、protected、空【默认】
决定了类可被谁使用
public表示紧随其后的元素对任何人都是可用的。
private表示除类型创建者和类型的内部方法之外的任何人都不能访问的元素
protected与private相当,差别仅在于继承的类可以访问protected成员,但是不能访问private成员。
空【默认】包访问权限。类可以访问同一个包(库构件)中的其他类成员,但是在包外,这些成员如同指定了private 类一样。
#12#代码复用 两种方式:1.组合(composition)用现有的类合成新的类;2.聚合(aggregation)如果组合是动态发生的,他通常被称为聚合。
在创建新的类时,首先考虑组合,在考虑继承。
#13#继承:以现有的类为基础,复制他然后通过添加和修改这个副本来创建新类。
#14#继承时基类和导出类产生差异的方法:1.直接在导出类中添加新方法;2.改变现有基类使用的方法,通常被称为覆盖基类(overriding)的那个方法
#15#在处理类型的层次结构时,经常想把一个对象不当作它所属的特定类型来对待,而是当作其基类的对象来看待。
#16#一个非面向对象编程的编译器产生的函数调用会引起所谓的前期绑定-编译器将产生对一个具体函数名字的调用,而运行时将这个调用解析到要被执行的代码的绝对地址。
面向对象的程序语言使用的是后期绑定-当向对象发送消息时,被调用的代码直到运行时才被确定。编译器只是确保被调用方法的存在,并对调用方法和返回值执行类型检查,但是并不知道将被执行的确切代码。
#17#将导出类看作是它的基类的过程称为向上转型(upcasting)
#18#java属于单根继承结构,既所有的类最终都继承自单一的类。这个终极类名称就是object。
#19#创建新的对象类型持有对其他对象的引用来创建容器;使得任何需要时都可以扩充自己以容纳你置于其中的所有东西,且不需要知道将来会把多少个对象置于容器中,只需创建一个容器对象,然后让他处理所有细节。
#20#java 常见容器类型:List(用于存储序列)Map(关联数组,用来建立对象之间的关联)Set(每种对象类型只持有一个)队列、树、堆栈等
#21#多种类型容器存在的意义:1.不同容器提供了不同类型的接口和外部行为;2.不容容器对于某些操作具有不同的效率。
#22#参数化类型机制用于向下转型,例如某个object是circle还是shape?
参数化类型就是一个编译器可以自动定制作用于特定类型上的类。这在java中被称为范型。例如
ArrayList<Shape> shape = new.ArrayList<Shape>();
#23#在使用对象时最关键的问题是它们的生成和销毁方式。
#24#对象的数据存于何处?1.堆栈:有时被称为自动变量automatic variable或限域变量scoped variable 或静态存储区域内实现2.堆(heap):在堆的内存池中动态的创建对象。  java完全采用动态内存分配方式【而基本类型是一个特例】
基本类型包括:int、short、long、byte、float、double、boolean、char。
#25#java对象的销毁方式:采用垃圾回收机制:可以自动发现对象何时不再被使用,并继而销毁它。
#26#堆栈&堆  
    栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。
    栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据在多个线程或者多个栈之间是不可以共享的,但是在栈内部多个值相等的变量是可以指向一个地址的,详见第3点。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
#27#内存泄露问题?
内存泄漏形象的比喻是“操作系统可提供给所有进程的存储空间正在被某个进程榨干”,最终结果是程序运行时间越长,占用存储空间越来越多,最终用尽全部存储空间,整个系统崩溃。所以“内存泄漏”是从操作系统的角度来看的。这里的存储空间并不是指物理内存,而是指虚拟内存大小,这个虚拟内存大小取决于磁盘交换区设定的大小。由程序申请的一块内存,如果没有任何一个指针指向它,那么这块内存就泄漏了。

#28#ram&rom
RAM 是 Random Access Memory

ROM 是 Read-Only Memory

RAM在断电后不能储存数据,就是说RAM断电后数据就没了,RAM存数据必须要通电

ROM在断电后可以储存数据。一般硬盘、U盘都属于ROM类型,内存条是RAM。

#29#异常处理将错误处理直接置于编程语言中,有时甚至置于操作系统中。异常是一种对象,它从出错地点被抛出,并被专门设计用来处理特定类型错误的相应的异常处理器捕获。异常处理就像是与程序正常执行并行的、在错误发生时执行的另一条路径。
#30#并发编程:程序能够停下正在做的工作,转而处理某个其他问题,然后再返回主进程。
在程序中,彼此独立运行的部分被称之为线程。
通常,线程只是一种为单一处理器分配执行时间的手段,但是如果操作系统支持多处理器,那么每个人物都可以被指派给不同的处理器,并且他们是真正的并行执行。
一般并行操作的过程:某个任务锁定某项资源,完成其任务,然后释放资源锁,使其他任务可以使用这项资源。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 语言