import java.io.*;
import java.text.*;
import java.util.*;
/** A simple text test of SPDF package
*/
public class PDFDemo {
public static void main(String[] argv) throws IOException {
PrintWriter pout;
if (argv.length == 0) {
pout = new PrintWriter(System.out);
} else {
if (new File(argv[0]).exists()) {
throw new IOException(
"Output file " + argv[0] + " already exists");
}
pout = new PrintWriter(new FileWriter( ......
import java.util.Properties;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.URLName;
public class MainClass {
public static void main(String[] args) throws Exception {
URLName server = new URLName("protocol://username:password@host/foldername");
Session session = Session.getDefaultInstance(new Properties(), null);
Folder folder = session.getFolder(server);
if (folder == null) {
System.out.println("Folder " + server.getFile() + " not found.");
System.exit(1);
}
folder.open(Folder.READ_ONLY);
&n ......
Reflection是Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说"自审",并能直接操作程序的内部属性。例如,使用它能获得 Java 类中各成员的名称并显示出来。 Java 的这一能力在实际应用中也许用得不是很多,但是在其它的程序设计语言中根本就不存在这一特性。例如,Pascal、C 或者 C++ 中就没有办法在程序中获得函数定义相关的信息。
JavaBean 是 reflection 的实际应用之一,它能让一些工具可视化的操作软件组件。这些工具通过 reflection 动态的载入并取得 Java 组件(类) 的属性。
1. 一个简单的例子
考虑下面这个简单的例子,让我们看看 reflection 是如何工作的。
import java.lang.reflect.*;
public class DumpMethods {
public static void main(String args[]) {
try {
Class c = Class.forName("java.util.Stack");
Method m[] = c.getDeclaredMethods();
&n ......
1、语法:必须比较熟悉,在写代码的时候IDE的编辑器对某一行报错应该能够根据报错信息知道是什么样的语法错误并且知道任何修正。
2、命令:必须熟悉JDK带的一些常用命令及其常用选项,命令至少需要熟悉:appletviewer、HtmlConverter、jar、 java、javac、javadoc、javap、javaw、native2ascii、serialver,如果这些命令你没有全部使用过,那么你对java实际上还很不了解。
3、工具:必须至少熟练使用一种IDE的开发工具,例如Eclipse、Netbeans、JBuilder、Jdeveloper、IDEA、JCreator或者Workshop,包括进行工程管理、常用选项的设置、插件的安装配置以及进行调试。
4、API:Java的核心API是非常庞大的,但是有一些内容笔者认为是必须熟悉的,否则不可能熟练的运用Java,包括:
◆java.lang包下的80%以上的类的功能的灵活运用。
◆java.util包下的80%以上的类的灵活运用,特别是集合类体系、规则表达式、zip、以及时间、随机数、属性、资源和Timer.
◆java.io包下的60%以上的类的使用,理解IO体系的基于管道模型的设计思路以及常用IO类的特性和使用场合。
◆java.math包下的100%的内容。
◆java.net包下的60%以上的内容,对各个类的功能比较熟悉。
◆j ......
也许Java虚拟机的实现者应该去考虑这样一个想法:从除Java字节码文件之外的一些数据源装载Java类,比如关系型数据库中的关系定义、包含了结构化数据的XML数据源。
如果Java实现了这个想法,那么像ORM映射、Web Services中XML Schema与Java类之间的映射之类的麻烦事将变成一些愉快的事情。
关系型数据库中的关系定义所使用的数据类型也大都有相应的Java类型与之对应,Java虚拟机可以从数据库读取关系定义信息,并装载一个相应的POJO类。这样一来,ORM就可以大大简化,也许开发人员就不用去麻烦地使用像Hibernate之类的一些ORM框架了。
包含结构化数据的XML数据源中的数据可以直接被映射到Java中的简单属性。因此,从这种数据源装载相应POJO类是可行的。Web Services的发展之所以这么艰难,一个重要的原因应该是Java对象到XML的序列化过程和XML到Java对象的反序列化过程太麻烦了。如果Java虚拟机可以通过这种方法屏蔽这些麻烦的操作,也许用不了多久Web Services的开发者一定会感觉他们活在一个真正分布式计算的时代。
以后,人们应该改变观念:Java类并不只是存在于Java字节码文件中,Java虚拟机装载类的来源至少包括Java字节码文件、关系型数据库中的关系定义和包含了结构 ......
一个示例代码:
//源角色
public class Adaptee
{public int get220V(){return 220;}}
//目标角色
public interface Target{int get110V(); int get220V();}
//适配器角色:扩展源角色类,实现目标角色接口,从而使得角色改动时候,不用改动源角色,只要改动适配器
public class Adapter extends Adaptee implements Target{
public int get110V(){return 110;}
}
//客户端
public class Client{
public static void main(String[] args){ new Client().test();}
public void test(){
Target target = new Adapter();
int v1 = target.get110V();
int v2 = target.get220V(); }
}
以上适配器模式扩展了源角色,实现了目标角色接口,
从而满足了同时提供220V,110V电压的要求 ......