java的学习记录


环境:Red Hat Enterprise Linux 5  ,

java version "1.7.0_60"
Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
Java HotSpot(TM) Client VM (build 24.60-b09, mixed mode, sharing)


前言

一、为什么有程序设计?  

   管理复杂性,复杂性一是问题的复杂性,二是待解决问题的复杂性。

二、java的优点:

   为程序员减少复杂性

   减少开发代码的【时间】和困难

   改善后的运行效率。

   跨平台 。

   提高生产率。

引用:

它开始着手解决日渐变得重要的各种复杂任务,例如多线程与网络编程,并将其作为语言特性或以工具库的形式纳入Java,这使得开发此类应用变得倍加简单。


绪论

引用:

我们不应该将Java仅仅看作是一些特性的集合——有一些特性在孤立状态下没有任何意义。只有在考虑到设计,而不仅仅是编码时,才能完整地运用Java的各部分。 

//软件设计师的下午题关于设计模式,可以一看。

//JDBC Servlet JSP ,java学习重中之重


第一章   对象导论

引用:计算机革命起源于机器,因此,编程语言的产生也始于对机器的模仿。

           计算机是头脑延伸的工具,同时还是一种不同类型的表达媒体。面向对象程序设计(Object-oriented Programming ,OOP)便是这种以计算机作为表达媒体的大趋势中  的 组成部分

1.1  抽象过程

一、“类型”是指“所抽象的是什么?”。

二、汇编语言是对底层机器的轻微抽象。命令式语言(basic,C)都是对汇编语言的抽象,但是,它们的抽象基于计算机的结构,而非基于问题的结构来考虑。程序员需要在机器模型(位于“解空间”内,这是你对问题建模的地方,例如计算机) 和  待解决问题的模型(位于"问题空间"内,这是问题存在的地方,例如一项业务) 之间建立关联,很麻烦,很费力。

三、极端的方法:只对待解决问题建模。例如LISP和APL,但是它们只能解决特定类型的问题,不具有通用性。

四、面向对象 表示方法非常通用,使程序员不会受限于任何特定类型的问题,然后通过添加类型的对象来解决某个特定问题。

五、第一个面向对象语言、同时也是Java所基于的语言之一的Smalltalk的五个基本特性。

     1.万物皆为对象。对象可以存储数据,可以执行操作。eg:人作为对象,有身高、体重的数据值,执行的操作是可以说话、行走。

     2.程序是对象的集合,它们通过发送消息来告知彼此所要做的。使用一个对象,必须向对象发出消息请求。

     3.每个对象都有自己的有其他对象所构成的存储。比如说一个公司,有着所谓的核心技术,于是将它封装成一对象A,公司的临时工程序员怎么使用核心技术解决实际问题呢?创建一个对象B,里面包括调用对象A的方法,对临时工程序员来说,感觉问题解决的很轻松,自认为什么都懂,可惜就是个人形打字机。不过,通过这种方法,可以在程序中构建复杂的体系,分工明确,极具效率,将问题真正的复杂性隐藏。

     4.每个对象都拥有其类型。

     5.某一特定类型的所有对象都可以接受同样的消息。 几何形 是基类,圆形是子类,子类可以接受基类拥有的一切。感觉有点怪怪的。某某某想使用基类的对象,于是向   基类的对象发送请求消息,于此同时,子类的对象也可以接受这个消息,子类可以代替基类,但基类不能代替子类,这就是可替代性(substitutability),OOP中重要的概念之一。每个对象在内存中都有一个唯一的地址。

1.2 每个对象都有一个接口

一、所有的对象都是唯一的,但具有相同特性和行为的对象都是类的一部分。第一个面向对象语言Simula-67,它在程序中使用基本关键字class引入新的类型。经典的"银行出纳员问题"。面向对象  也是一种仿真程序,仿真待解决问题。

  Light
数据成员
on()
off()
brighten()
dim()

UML统一建模语言(Unified Modelling Language)

Light lt=new Light();

lt.on();

类名Light,用new方法创建了一个对象lt,对这个对象lt发出的请求是:打开它,关闭它,将它调亮,将它调暗。


1.3 每个对象都提供服务

程序向用户提供服务,它调用其它对象提供的服务来实现这一点,程序员的任务就是创建能够提供服务解决问题的一系列对象。

1.4 被隐藏的具体实现

程序员有类创建者(创建新类)和客户端程序员(使用类)两个层次,类创建者构造类,客户端程序员则收集然后使用这些类快速开发,这些类有一个问题,那就是只向客户端程序员暴露他们所需的部分,提供接口,其余核心代码部分隐藏,你不想把核心技术暴露给其他人,这就需要用到访问控制。访问控制的第二个好处就是类创建者修改了之前使用的类,例如重新设计了一个算法加快程序的运行速度,由于类创建者提供的接口没有改变,那么客户端程序员也没必要修改应用程序。//具体可参考数据库的三层体系结构

访问控制的三个关键字public ,private,peotected.

1.5 复用具体实现

代码复用是面向对象程序设计语言了不起的优点之一。

最简单 的复用:  类A,根据这个类创建一个对象B,创建一个对象C,创建一个对象D,省略号。。。。。

上一层的复用:   类A,类B,根据现有的两个类,通过组合(composition),合成新的类,新类一般声明为private,客户端程序员不能访问。

具体参考:http://blog.csdn.net/liushuijinger/article/details/6994265

建立新类时,应优先考虑组合,因为它简单灵活,然后再考虑继承。

1.6 继承

一、解释:根据现有的类为基础,复制它,然后通过添加或修改这个复制副本来创建新类。

二、例子:几何形问题,基类为几何形,有尺寸、颜色、位置等,同时可以被绘制、擦除、移动和着色等。派生类有圆形、正方形、三角形,每一种都有特有的特性和行为,例如计算面积。

三、子类包括父类的所有类型的所有成员(尽管private成员被隐藏且不可访问),更重要的是它复制了基类的接口,也即是说发给父类的消息也可以发给子类."一个圆形也是一个几何形"。

四、基类和子类有相同的基础接口,这些接口必须有子类的某些代码来实现。例如,对象A收到请求消息,必须有某些代码去执行。如果子类只是简单的继承类而不去实现,那么对象A毫无用处。

五、

继承的简单使用:直接在子类中加入新方法,这些新方法基类没有,Java中关键字extends表示继承。

继承的高级使用:改变基类中已有方法的行为,谓之覆盖(overriding),虽然子类在用基类的方法,但是子类想做自己的事。

例如:电灯泡,基类:打开。子类A继承后想:我可以声控打开,子类B继承后想:我可以智能手机打开。 ??例子有点不恰当。

子类使用overridring,子类、基类是is -a的关系,子类is-a 父类,子类可以替代父类。

子类添加新方法,但是基类不能访问新添加的方法,子类不是完美的替代父类。

1.7 伴随多态的可互换对象


处理类型的层次结构时,经常先抽象基类,然后对基类编写不会依赖特定类型的代码。然后设计子类,对子类进行扩展。一是改善设计,二是降低维护费用。

代码略。

1.8 单根继承结构

所有的类都继承于一个单一的基类,终极类名是Object。

1.9 容器

程序运行时,需要多少个对象,你不可能知道,于是便有了容器,在任何需要的时候都可以扩充自己以容纳所需的空间,它是动态变换的,由这个容器对象来处理细节。

C++中,容器是标准C++类库的一部分,称为标准函数模板(Standard Template Library,STL)。

Java中,拥有许多满足不同需求的各种容器,例如List(存储序列),Map(关联数组,用来建立对象之间的关联),Set(每种对象类型只持有一个),还有队列,数,堆栈等。为什么要设计这么多容器,一是不同的容器提供不同的接口和功能,二是不同的容器在不同场合效率不同。

由子类向父类向上转型是安全的,但是有父类向子类向下转型是危险的。

新增的范型  ???不是泛型

:例子

ArrayList<Shape> shapes=new ArrayList<Shape>();  //创建一个存储Shape的ArrayList.

1.10 对象的创建和生命期

使用对象是,一个关键问题是对象的生成和销毁。每个对象为了生存需要资源,尤其是内存。

Java采用了动态内存分配方式,用new关键字构建对象。

Java提供'"垃圾回收器"的机制,自动销毁不使用的对象来释放对象占用的内存。

1.11 异常处理:处理错误

异常是一种对象。

1.12 并发编程

用户界面是使用线程的常见例子。

1.13 Java和Internet

中间件:将负载分散给服务器端的其他机器。

CGI:common gateway interface ,通用网关接口

客户端编程,即浏览器编程。

Java通过applet以及Java Web Start 进行客户端编程。

applet :是浏览器中运行的小程序。

JVM:java虚拟机,执行java程序的软件平台。

Servlet和JSP:服务器端编程。

1.14  总结

评估问题需求,考察其他选择,适合解决问题的语言才是最好的语言。













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值