在应用程序中我们经常需要一个类去完成像数据处理、监听事件或检查另一个类的活动等任务。为了达到这个目标,我们可能使用带有一套锁和消息通知的线程。Java 线程API已经很好的文档化,但为了使线程能够正确而高效地运行,程序员仍然需要丰富的编程经验并编写大量的代码。通过应用本篇文章中讨论的框架,程序员能够避免忍受煎熬写大量的代码,快速创建健壮的应用程序。 二、长时间运行任务的程序框架。
关于长时间运行的任务的主要事情是如何在应用程序的生命期使它一直保持运行。实现的恰当方法是提供一个线程来执行这个特定的任务。我们可以通过继续Thread类或实现java.lang.Runnable接口来达到该目标。假如采用实现Runnable接口的方式,就可以能够获得更好的面向对象的设计,同时可以避免JAVA中的单继续问题。另外,我们也能更有效的处理Runnable实例(例如使用线程池通常需要一个Runnable实例而不是线程来运行)。
框架的基础是一个叫Worker的抽象类,它实现了Runnable接口,并提供了有效处理任务的好方法。这些方法有些已经被实现,如run()方法,但有些是抽象方法,开发人员必须自己来实现。假如要创建一个长时间运行的类,你只需要继续Wor ......
1.定义: 顾名思义就是在类中定义的类,分为两类,static 的 和 non-static 的。内部类实际上是一个编译器的现象。编译器将内部类转化为带着一些奇怪名字的普通类文件,虚拟机并不区分一般类和内部类的类中的文件。 2.使用内部类的第一个好处——封装性和多继承 我们进行“第三种关系”分析: 继承结构中无外乎"is a" 和 "has a"两种关系。我们举一个Employee/Manager的is-a的例子: class Employee {
private String name;
private Date dateHire;
.....
.....
public float getSalary() {
}
...
} Class Manager extends Employee {
private Employee[ ] subOrdinates;
....
public Employee[ ] getSubOrdinates() {
return subOrdinates;
}
} 而另一种关系是has-a,class Company {
private Employee[ ] allEmployees;
private Manager[ ] allManagers;
....
public Manager[ ] getAl ......
Java SE=Java Standard Edition
Java EE=Java Enterprise Edition
Java ME=Java Mobile Edition
SE主要用于桌面程序,控制台开发(JFC)
EE企业级开发(JSP,EJB)
ME嵌入式开发(手机,小家电)
目前,Java 2平台有3个版本,它们是适用于小型设备和智能卡的Java 2平台Micro版(Java 2 Platform Micro Edition,J2ME)、适用于桌面系统的Java 2平台标准版(Java 2 Platform Standard Edition,J2SE)、适用于创建服务器应用程序和服务的Java 2平台企业版(Java 2 Platform Enterprise Edition,J2EE)。
J2EE是一种利用Java 2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。J2EE技术的基础就是核心Java平台或Java 2平台的标准版,J2EE不仅巩固了标准版中的许多优点,例如"编写一次、随处运行"的特性、方便存取数据库的JDBC API、CORBA技术以及能够在Internet应用中保护数据的安全模式等等,同时还提供了对 EJB(Enterprise JavaBeans)、Java Servlets API、JSP(Java Server Pages)以及XML技术的全面支持。其最终目的就是 ......
主要是举个例子说明一下什么用throws,什么时候用try-catch。
import java.io.BufferedReader;
import java.io.File;
import java.io.FileFilter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class Test {
public static void main(String[] args) {
File dir = new File(".");
FileFilter dirFilter = new FileFilter() {
public boolean accept(File pathname) {
return pathname.isFile();
}
};
for (File file: dir.listFiles(dirFilter)) {
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(file));
print(reader);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
......
javax.servlet.http.HttpSession 这个类是很常用的,每当我们浏览网站,不论有没有登陆,都会产生1个session,它记录了和浏览者相关的数据;
下面介绍session的2个监听器接口:
1)javax.servlet.http.HttpSessionBindingListener;
实现这个接口的类,每当被存放到session或从session中移除都会出发接口中相应的方法,从而实现监听的效果;
2)javax.servlet.http.HttpSessionListener;
实现这个接口的类,本身就是1个监听器,每当有session生成或消亡时,都触发接口中相应的方法,从而实现监听器的效果;
HttpSessionListener 的实现类本身就是一个监听器,要使用它需要在 web.xml 中启动这个监听器,例如
<listener>
<listener-class>packname.classname</listener-class>
</listener>
3)这2个监听器是有区别的
前者的触发取决于 session 中加入的属性;
后者的触发取决于 session 本身的产生和消亡;
与shangshu 之类似的还有
对ServletContext的监听和对Request监听
应用:当前在线人数列表
在线人数列表是对所有人起作用,数据应放到application中。即ServletContext对象
OnLineDemo.java
pack ......
[引言]
本文主要总结了java类的lifetime。包括从类的加载,link,initialize,以至对象的实例化和销毁。并结合jvm规范,略作解释。
1.测试用程序:
2.程序输出:
[正文]
Java对象的从无到有要经过类的加载,链接,初始化和对象的实例化这几个过程。从总体来说类的生命周期大致将其分为三个phase:
类型(类或者接口)的生命周期:从类型的initial entrance到最终退出虚拟机.
1.类生命周期的开始:装载,链接,初始化(幼年)
2.类生命周期的主要时期:对象实例化,终结(成年)
3.生命周期的末期:类的终结和卸载。(晚年)
Phase1:class lifetime
Class lifetime = class load + link + initialize
图1 类之初
Phase1-1:Load (3W)
1.what is “Load”?
装载指的是“jvm寻找一个具有特定名称的类或者接口的二进制形式,并使用这个二进制形式构造一个代表该类或者接口的Class对象的过程”。装载过程包括jvm的下列三个动作:
Ø 产生用于表达该类型(类或者接口)的二进制数据流(jvm or complier??)
Ø &nb ......