[置顶] 长期出售:Godaddy老域名,Godaddy历史BA老域名!

[置顶] 长期出售:搜狗pr域名,搜狗收录域名,搜狗权重域名!

[置顶] 长期出售:高外链域名,高反链域名,权重域名,有收录的域名!

从会话中保存和检索对象

对象捆绑到会话的名字可以是任意唯一字符串。因为会话是在当前HTTP会话中的所有servlet和JSP页面之间共享,然而使用一个与其他应用不冲突的名字是很有意义的。最常见的是选择那些带有包名或servlet或JSP页面全质类名前缀的名字。会话中可保存任意类型对象,但是因为会话可能被序列化,最好是让会话对象实现java.io.Serializable。注意,只有对象可以保存,面不是伪指令,如int、char或double。为保存这些伪指令,必须使用其对象包容器Integer、Character或Double。

多线程带有状态信息的运行请求

多线程考虑假脱机打印的工作方式,一个用户可以在一个会话处理应用中点击一个打印按钮,当打印请求排队时可能只是轻微停顿一下。通常接受请求的打印机信息会出现,可能是一个标识打印请求的作业ID,然后缓冲的输出配对等待打印机可以利用。其他的一些任务可能包括监视打印队列状态,保存和释放作业,改变优先权,取消作业等等。

一个JSP页面可进行类似操作。不是在当前线程中运行一个复杂任务,它可以通过启动一个后台线程运行,并将线程的引用保存为一个会话属性。用户可以接受到请求已经排队和正在被服务的通告。JSP页面也可以给出显示请求状态和用户可以保存、释放、取消请求的界面。当请求完成时,JSP页面可以给出查看结果的一个超级链接。被强大的JSP页面处理的长时间的请求甚至会使其结果被电邮给用户。

网站建设编码中成员的初始化

为了确保变量在使用之前已经进行了初始化,Java做得还要彻底。如果变量是在方法内部定义的局部变量,这种保障就表现为编译时的错误信息。这个错误信息会告诉你还没有初始化。当然编译器原本可以给一个缺省值,但这看上去更像是程序员犯的错误,而给了缺省值之后反而会把这个错误给掩盖了。强制程序员提供初始化的值更像是在找bug。

但是,如果这个primitive是类的成员数据,那么情况就有些不同了。由于任何方法都可能初始化或用到这个数据,因此要求用户在使用数据之前就对它进行适当的初始化,就显得不那么现实了。然而把垃圾值留给它也是不安全的,所以类的primitive类型的数据都能确保获得一个初始值。

静态数据初始化

对类而言,初始化的顺序是由变量在类的定义里面的顺序所决定的。变量的定义可能会分散在类定义的各个地方,并且与方法的定义相互交错,但是变量的初始化会先于任何方法,甚至是构造函数的调用。我们把对象的定义分散到各个地方,你可以从程序的输出中看到,变量的reference被初始化了两次:一次是在构造函数调用之前。(这前一个对象被扔掉了,因此会被当作垃圾回收。)这种做法的效率好像不怎么样,但是却能保证进行适当的初始化,如果你还重载了一个不对变量进行初始化的构造函数,而定义变量的时候又没有提供缺省的初始化值,那又会怎样呢?

数组内部成员初始化

所有数组(不论它是primitive的还是对象的)都有一个可供查询的内部成员)但是你不能修改——它会告诉你这个数组有多少元素。这个成员就是length。由于Java的数组,同C和C++的一样,是从零开始计算的,因此你能访问的最大的数组下标length-1。如果是C和C++的数组,即使你过了界,它也会安安静静地接受这个指令,然后放你到内存里乱串一气,许多臭名昭著的bug就是由此产生的。

但是Java能让你免受这些问题的困扰。一旦你出了界,就会引发一个运行时错误。当然,每次访问数组的时候都要花时间检查,而且代码也会长些,但是你没法把它关了,也就是说,如果效率非常重要,那么访问数组就可能会成为拖累程序效率的一个因素。但是为了internet的安全和程序员的编程效率,Java的设计者们认为这个代价还是值得的。

数组的初始化

在C语言里,初始化数组是一件既常容易出错又冗长乏味的事。C++用所谓的“集合初始化”大大增强了这个过程的安全性。由于Java的一切都是对象,因而它没有C++的“集合”。它也有数组,并且提供了数组的初始化。数组只是一个列在同一个标识符名下的简单序列,这个序列既可以是primitive的,也可以是同一种类型的对象的。数组是通过由方括号括起来的数组下表来定义和使用的。

要定义一个数组,只要直接在类型的名字后面加上一对空的方括号就行了。你也可以将方括号放到标识符的后面,这样做的意思是相同的。这种写法是C和C++程序员们所预想的。但是前一种写法可能更好一些,因为它在说这个类型是“一个int型的数组”。

Java解释器的工作

首先,它要找到classpath环境变量(这是通过操作系统设置的,有时Java安装程序或者Java工具的安装程序会为你设置)。Classpath包含了一个或多个目录,这些目录会被当做根目录供Java搜索.class文件。从这个根目录出发,解释器会将package名字里的每个点都换成斜杠(因此,根据操作系统的不同,package foo.bar.baz就被转换成foo\bar\baz,或者其他可能的形式),这样它生成了以classpath为根的相对路径。然后这些路径再与classpath里的各条记录相连。这才是Java用package的名字寻找.class文件的地方。此外,它还会根据Java解释器所在的位置查找一些标准目录。

创建独一无二的package名字

由于package没有被真的封装成一个单独的文件,而package又是由很多.class文件组成的,因此事情就有点乱了。要解决这个问题,较为明智的做法就是把所有同属一个包的.class文件都放到一个目录里,也就是利用操作系统的层次文件结构来解决这个问题。

将package的文件收进一个单独的子目录里还解决了另外两个问题:创建独一无二的package名字,以及帮助Java在复杂的目录结构中找到它们。这是通过将.class文件的路径信息放到package的名字里面来完成的。Java的约定是package名字的第一部分应该是类的创建者的internet域名的反写。由于internet域名的唯一性是有保证的,因此只要你遵守这个约定,package的名字就肯定是唯一的,这样就不会有名字冲突的问题了。当然,如果你还没有注册域名,那你完全可以编一个,然后用它来创建package的名字。如果你打算要发布Java程序,那么还是应该稍微花点时间去搞个域名。

Private的使用权限

Private关键词的意思是,除非是用这个类(包括这个成员的类)的方法,否则一律不得访问。同一个package里的其它类也不能访问private成员,所以这就有点像是在作茧自缚。但是另一方面,一个package很可能是由好几个人合作开发的,因此private能让你根据自己的需要修改那些成员,而不用担心这么做会不会对别的类产生影响。

默认的package权限通常已经提供了一中较为合适的隐藏效果;记住,从客户程序员的角度来看,package权限的成员也是不能访问的。这样正好,因为默认的权限就是你经常要用的那个(而且还是你忘了设置的时候会用那个的)。于是通常情况下,你只要把那些要对客户程序员开发的成员设成public就行了。结论是,可以先不考虑大量地使用private,因为即使不用,也还过得去。(这点同C++是截然不同。)但是,始终如一地使用private还是很重要的,特别是遇到多线程的时候。

网站建设中Java的接口与实现

访问权限通常被称为隐藏实现。在将数据和方法集成到了类里的同时,完成隐藏实现,这种做法常被称为封装,其结果就是数据类型有了特征和行为。有两个重要的原因要让我们为数据类型设置边界。首先就是要告诉客户程序员,他们能使用哪些东西,不能用哪些东西。你可以在系统里构建自己的内部机制,这样就不必担心客户程序员会一不小心就把这部分东西当作接口来用了。

为了让代码显得更有条理,可能你选用这种风格,就是将public成员都放在类的开头,接下来是protected成员,然后是package权限的,最后是private成员。这样做的好处就是,当用户从上到下读代码的时候,会先看到对他们最重要的东西,就是能在文件以外访问的public成员。而当他们遇到非public成员的时候,就会知道这是类的内部实现部分,这样就可以不读下去了。

«798081828384858687888990919293»

热门搜索: 外链域名 高外链域名 高收录域名

Copyright www.thyst.cn. Some Rights Reserved.