编程思想学习笔记

发布 2021-05-02 07:20:28 阅读 2129

j**a的基本设计原则:

面向接口编程;优先使用对象组合而非继承;分层:典型的三层结构表现层-逻辑导-数据层;

层间交互:表现层调逻辑层,逻辑层调数据层,不可反过来;层间交互应通过接口调用;

开闭原则:尽量做到不用修改模块的源**,就能更改模块的行为;

依赖性倒置原则:依赖抽象而不要依赖具体的实现;

接口隔离原则:不要使用通用的接口,而是为不同的用户使用不同的接口;

类设计的基本经验:

1、 类要单一;

2、 高内聚,低耦合;

3 、类的粒度要合理;实现类不能依赖它的使用;可配置,可维护;可伸缩性,可扩展性;合理的考虑类的复用;要尽量减少类与协作类的交互次数和交互信息的量。

、父类不应知道子类的信息,子类必须知道父类的信息。

、访问对象必须通过接口,不能直接访问。

j**a在其标准类库中也有容器。在某些类库中,通用容器足够满足所有的需要,但是在其它类库中具有满足不同需要的不同类型的容器。如,list类(列表,用于存储序列),map类(散列表,也被称为关联数组,用来建立对象之间的关联),set类(集类,用于存储一类对象)。

容器类库还可能包括queue(队列)、tree、stack等。

如果想操作或是比较容器中的一组元素时,应使用迭代器(iterator),它是一个用来选取容器中的元素,并把它呈现给迭代器用户的对象。在调用remove()之前必须先调用 next();

不同容器提供了不同类型的接口和外部行。其中某种容器提供的问题解决方案可能比其它容器要灵活的多。再者,不同的容器对一某些操作具有不同的效率。

单根继承结构以及在堆上创建所有对象,极大地简化了参数传递。

为了复用上述容器,我们让它们都可以存储j**a中的一个通用类型:object.。单根继承结构意味着所有东西都是对象,所以可以存储object的容器可以存储任何东西。

要使用这样的容器,只需在其中置入对象引用(object reference),稍后还可以将它们取回。

垃圾**器被设计用来处理内在释放问题,尽管它不包括清除对象的其他方面。垃圾**器知道对象何时不再被使用,并自动释放该对象的内存。

在堆栈上创建对象是为对象分配和释放存储空间最有效的途径。

轻量级持久性意味着你可以很容易地将对象存储在磁盘上,并在以后取回它们。称之为轻量级,是因为你仍然得创建显式的调用来执行存储和取回操作。轻量级持久性可通过对象序列化或j**a数据对象来实现。

为了将延迟最小化,程序员努力地减轻处理任务的负载,通常是分散给客户端机器处理,但有时也会使用所谓“中间件”将负载分散给在服务器端的其它机器,中间件也被用来提高可维护性。

j**a是通过applet以及使用j**a web start来进行客户端编程的。

applet 是只在web浏览器中运行的小程序。applet是作为网页的一部分被自动**的。它提供了一种一旦用户需要客户端软件时,就可以自动地从服务器分发客户端软件给用户的方法。

j**a提供了两个用于高精度计算的类:biginteger,bigdecimal.二者没有对应的基本类型。

但这两个类包含的方法,与基本类型所能执行的操作相似。能作用于int float的操作,也同样能作用于它俩。只不过必须以方法调用方式取代运算符方式来实现。

biginteger支持任意精度的整数。

域:即数据成员;方法:成员函数。

域可以是任何类型的对象,可以通过其引用与其进行通讯;也可以是基本类型中的一种。若域是一个对象的引用,则必须用构造器进行初始化,以便使其与一个实际对象相关联。

解决类名冲突的问题:使用关键字import来准确地告诉编译器你想要的类是什么。import指示编译器导入一个包,也就是一个类库。例,import import 后者导入一群类。

关键字static:意味着这个数据或方法不会与包含它的那个类的任何对象实例关联在一起。所以,即使从未创建某个类的任何对象,也可以调用其static方法或访问其static数据。

例: class statictest

statictest st1=new statictest();

statictest st2=new statictest();

在这里,和指向同一存储空间,因此它们具有相同的值。

static方法的一个重要用法就是在不创建任何对象的前提下,就可以直接调用它。

不可从一个static方法内部发出对非static方法的调用。反过来是可以的。

正则表达式(regular expression):它是使用通用术语来描述字符串的一种方法。

关系操作符中,“=和“!=比较的是对象的引用,因此,虽然两个对象的值可能一样,但是如果引用不一样,输出结果为false.

若想比较两个对象的实际内容是否相同,就使用方法equals(),equals()方法默认还是比较对象的引用。但这个方法不适于基本类型,基本类型直接使用==,即可。

若equals()对于某个特定的比较产生true,则compareto()应该返回0;若equals()产生false,compareto()应返回非0值 。

类型转换:将一个float或double值转型成整数值后,总是将小数部分去掉。

用构造器确保类中方法的初始化:构造器的名称与类名要一致。p141

若希望在方法内部获得对当前对象的引用,使用关键字this,表示对“调用方法的那个对象”。this关键字只能在方法内部使用。.但是,如果在方法内部调用同一个类的方法,就不必使用this.

只能在构造器中调用构造器:在构造器中,如果为this添加了参数列表,这将产生对符合此参数列表的某个构造器的明确调用。

用于强制终结动作的进行,在写程序的时候这可以加速调试过程。

要定义数组,只需在类型名后加一对空方括号:int a1;

每个编译单元只能有一个public类。j**a包的命名规则全部使用小字字母。

j**a 解释器的工作程序如下:首先,它找到环境变量classpath(将j**a 或者具有j**a 解释能力的工具——如浏览器——安装到机器中时,通过操作系统进行设定)。classpath 包含了一个或多个目录,它们作为一种特殊的“根”使用,从这里展开对。

class 文件的搜索。从那个根开始,解释器会寻找包名,并将每个点号(句点)替换成一个斜杠,从而生成从classpath 根开始的一个路径名(所以package 会变成foo\bar\baz 或者foo/bar/baz;具体是正斜杠还是反斜杠由操作系统决定)。随后将它们连接到一起,成为classpath 内的各个条目(入口)。

以后搜索。class 文件时,就可从这些地方开始查找与准备创建的类名对应的名字。此外,它也会搜索一些标准目录——这些目录与j**a 解释器驻留的地方有关。

调试功能在开发过程中是使能的,而在打包的产品中是被禁止的。你可以通过修改被引入的package的方法来实现,修改的方法是将在你程序中用到的**从调试版改为发布版。这一技术可适用一任何种类的条件**。

包命名的技巧:包的名称对应目录路径。

取得对某成员访问权的途径有:

提供访问器和变异器方法(也称作get/set方法),以读取和改变数值。

private:任何你确认为只是该类的一个“助手”方法的方法,都可以把它指定为private.

protected处理的是一个被称为继承的概念,我们可获取一个现有类--我们将其作为基类引用,然后将新成员添加到该现有类中,而不必触及这个现有类。也可以改变该现有类的成员的行为。 class foo extends bar{}

基类的创建者会希望获得一个特定的成员,并赋予派生类,而不是所有类以访问权,这就需要protected。protected也提供包访问权限,即,相同包内的其他类可以访问protected元素。

类既不可以是privater的,也不可以是protected。所以,对于类的访问权限,仅有包访问权或是public.如果不希望其他任何人对该类有访问权限,你可以把所有的构造器都指定为private,从而阻止别人创建该类的对象,但是,在该类的static成员内部都可以创建。

若没有为类访问权限指定一个访问修饰符,它就会缺省得到包访问权限。这就意味着该类的对象可以由包内任何其它类来创建,但是在包外是不行的。

为了继承,一般的规则是将所有的数据成员都指定为private,将所有方法指定为public.

关键字super指代的是当前类所继承的基类。

对基类子对象的初始化:在构造器中调用具有执行基类初始化所需要的所有知识和能力的基类构造器来执行初始化。p208

组合技术通常用于你想要在新类中使用现有类的功能而非它的接口的情形。即,你在新类中嵌入某个对象,借其实现你所需要的功能,但新类的用户看到的只是你为新类所定义的接口。因此,你需要在新类中嵌入一个private的现有类的对象。

is-a(是一个)的关系是用继承来表达的,而has-a(有一个)的关系则是用组合来表达。

为判断自己到底应该选用合成还是继承,一个最简单的办法就是考虑是否需要从新类上溯造型回基础类。若必须上溯,就需要继承。但如果不需要上溯造型,就应提醒自己防止继承的滥用。

如果一个类包含一个或多个抽象方法,该类必须被限制为是抽象的。

抽象方法只需声明,不需定义。public abstract void play();在子类中对抽象方法进行具体的操作定义。

用继承表达行为间的差异,并用属性表达状态上的变化。

一个类可实现多个接口,这就是多重继承。

在实现一个接口的时候,来自接口的方法必须要被定义为是public的。

接口中定义的字段会自动具有static 和final 属性。

使用接口的核心原因:为了能够向上转型为不止一个的基类型。

如果你知道某事物应该成为一个基类,那么你的第一选择应该是使它成为一个接口,只有在强制你必须要有方法定义和成员变量的时候,你才应该改而选择抽象类,或者在必要时使其成为一个具体类。

思想学习汇报

分处 遵照分处文件精神,在这次学习活动中,我着重学习了法律 法规业务知识。我所在项目部,所施工的是高铁站房工程,在甘肃省张掖市,为新开施工项目。在二百公里的沿线上新建五座站房,施工间距大,施工所在地民族众多,社情,民情较为复杂。根据这一情况,施工队一上场,我就向各施工队讲解法律法规及当地的风俗和各种...

dom编程学习笔记

一 dom编程。a 基本概念。dom document object model 文档对象模型。其实就是将一些标记型的文档以及文档中的内容当成对象。为什么要将这些文档以及其中的标签封装成对象呢?因为可以在对象中定义其属性和行为,可以方便操作这些对象。b dom在封装标记型文档时,有三层模型 dom1...

网络编程学习笔记

一 tcp网络编程流程。1 client端。初始化socket 解析服务器地址。connect send2 server端。初始化soket用于监听。解析地址。bind地址,绑定本机的地址。listen监听socket accept接收。select轮训判断是否有数据更新。二 函数学习。1 主机字节...