JAVA经典总结

Java经典实例(第二版)
1. 获取环境变量
Java代码
1.    System.getenv("PATH");
2.    System.getenv("JAVA_HOME");  

2. 获取系统属性
Java代码
1.    System.getProperty("pencil color");  // 得到属性值
2.    java -Dpencil color=green
3.    System.getProperty("java.specification.version");  // 得到Java版本号
4.    Properties p = System.getProperties();  // 得到所有属性值
5.    p.list(System.out);  

3. StringTokenizer
Java代码
1.    // 能够同时识别, 和 |
2.    StringTokenizer st = new StringTokenizer("Hello, World|of|Java", ", |");
3.    while (st.hasMoreElements()) {
4.        st.nextToken();
5.    }
6.
7.    // 把分隔符视为token
8.    StringTokenizer st = new StringTokenizer("Hello, World|of|Java", ", |",  true);  

4. StringBuffer(同步)和StringBuilder(非同步)
Java代码
1.    StringBuilder sb = new StringBuilder();
2.    sb.append("Hello");
3.    sb.append("World");
4.    sb.toString();
5.    new StringBuffer(a).reverse();   // 反转字符串  

5. 数字
Java代码
1.    // 数字与对象之间互相转换 - Integer转int
2.    Integer.intValue();
3.
4.    // 浮点数的舍入
5.    Math.round()
6.
7.    // 数字格式化
8.    NumberFormat
9.
10.    // 整数 -> 二进制字符串
11.    toBinaryString() 或valueOf()
12.
13.    // 整数 -> 八进制字符串
14.    toOctalString()
15.
16.    // 整数 -> 十六进制字符串
17.    toHexString()
18.
19.    // 数字格式化为罗马数字
20.    RomanNumberFormat()
21.
22.    // 随机数
23.    Random r = new Random();
24.    r.nextDouble();
25.    r.nextInt();  

6. 日期和时间
Java代码
1.    // 查看当前日期
2.    Date today = new Date();
3.    Calendar.getInstance().getTime();
4.
5.    // 格式化默认区域日期输出
6.    DateFormat df = DateFormat.getInstance();
7.    df.format(today);
8.
9.    // 格式化制定区域日期输出
10.    DateFormat df_cn = DateFormat.getDateInstance(DateFormat.FULL, Locale.CHINA);
11.    String now = df_cn.format(today);
12.
13.    // 按要求格式打印日期
14.    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
15.    sdf.format(today);
16.
17.    // 设置具体日期
18.    GregorianCalendar d1 = new GregorianCalendar(2009, 05, 06);  // 6月6日
19.    GregorianCalendar d2 = new GregorianCalendar();  // 今天
20.    Calendar d3 = Calendar.getInstance();  // 今天
21.    d1.getTime();  // Calendar或GregorianCalendar转成Date格式
22.    d3.set(Calendar.YEAR, 1999);
23.    d3.set(Calendar.MONTH, Calendar.APRIL);
24.    d3.set(Calendar.DAY_OF_MONTH, 12);
25.
26.    // 字符串转日期
27.    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
28.    Date now = sdf.parse(String);
29.
30.    // 日期加减
31.    Date now = new Date();
32.    long t = now.getTime();
33.    t += 700*24*60*60*1000;
34.    Date then = new Date(t);
35.
36.    Calendar now = Calendar.getInstance();
37.    now.add(Calendar.YEAR, -2);
38.
39.    // 计算日期间隔(转换成long来计算)
40.    today.getTime() - old.getTime();
41.
42.    // 比较日期
43.    Date 类型,就使用equals(), before(), after()来计算
44.    long类型,就使用==, <, >来计算
45.
46.    // 第几日
47.    使用 Calendar的get()方法
48.    Calendar c = Calendar.getInstance();
49.    c.get(Calendar.YEAR);
50.
51.    // 记录耗时
52.    long start = System.currentTimeMillis();
53.    long end = System.currentTimeMillis();
54.    long elapsed = end - start;
55.    System.nanoTime();  //毫秒
56.
57.    // 长整形转换成秒
58.    Double.toString(t/1000D);  

7. 结构化数据
Java代码
1.    // 数组拷贝
2.    System.arrayCopy(oldArray, 0, newArray, 0, oldArray.length);
3.
4.    // ArrayList
5.    add(Object o)  // 在末尾添加给定元素
6.    add(int i, Object o)  // 在指定位置插入给定元素
7.    clear()  // 从集合中删除全部元素
8.    Contains(Object o)  // 如果Vector包含给定元素,返回真值
9.    get(int i)  // 返回 指定位置的对象句柄
10.    indexOf(Object o)  // 如果找到给定对象,则返回其索引值;否则,返回-1
11.    remove(Object o)  // 根据引用删除对象
12.    remove(int i)  // 根据 位置删除对象
13.    toArray()  // 返回包含集合对象的数组
14.
15.    // Iterator
16.    List list = new ArrayList();
17.    Iterator it = list.iterator();
18.    while (it.hasNext())
19.    Object o = it.next();
20.
21.    // 链表
22.    LinkedList list = new LinkedList();
23.    ListIterator it = list.listIterator();
24.    while (it.hasNext())
25.    Object o = it.next();
26.
27.    // HashMap
28.    HashMap<String, String> hm = new HashMap<String, String>();
29.    hm.get(key);  // 通过key得到value
30.    hm.put("No1", "Hexinyu");
31.    hm.put("No2", "Sean");
32.    // 方法1: 获取全部键值
33.    Iterator<String> it = hm.values().iterator();
34.    while (it.hasNext()) {
35.        String myKey = it.next();
36.        String myValue = hm.get(myKey);
37.    }
38.    // 方法2: 获取全部键值
39.    for (String key : hm.keySet()) {
40.        String myKey = key;
41.        String myValue = hm.get(myKey);
42.    }
43.
44.    // Preferences - 与系统相关的用户设置,类似名-值对
45.    Preferences prefs = Preferences.userNodeForPackage(ArrayDemo.class);
46.    String text = prefs.get("textFontName", "lucida-bright");
47.    String display = prefs.get("displayFontName", "lucida-balckletter");
48.    System.out.println(text);
49.    System.out.println(display);
50.    // 用户设置了新值,存储回去
51.    prefs.put("textFontName", "new-bright");
52.    prefs.put("displayFontName", "new-balckletter");
53.
54.    // Properties - 类似名-值对,key和value之间,可以用"=",":"或空格分隔,用"#" 和"!"注释
55.    InputStream in = MediationServer.class.getClassLoader().getResourceAsStream("msconfig.properties");
56.    Properties prop = new Properties();
57.    prop.load(in);
58.    in.close();
59.    prop.setProperty(key, value);
60.    prop.getProperty(key);
61.
62.    // 排序
63.    1. 数组:Arrays.sort(strings);
64.    2. List:Collections.sort(list);
65.    3. 自定义类:class SubComp implements Comparator
66.        然 后使用Arrays.sort(strings, new SubComp())
67.
68.    // 两个接口
69.    1. java.lang.Comparable: 提供对象的自然排序,内置于类中
70.       int compareTo(Object o);
71.        boolean equals(Object o2);
72.    2. java.util.Comparator: 提供特定的比较方法
73.       int compare(Object o1, Object o2)
74.
75.    // 避免重复排序,可以使用TreeMap
76.    TreeMap sorted = new TreeMap(unsortedHashMap);
77.
78.    // 排除重复元素
79.    Hashset hs - new HashSet();
80.
81.    // 搜索对象
82.    binarySearch(): 快 速查询 - Arrays, Collections
83.    contains(): 线型搜 索 - ArrayList, HashSet, Hashtable, linkedList, Properties, Vector
84.    containsKey(): 检 查集合对象是否包含给定 - HashMap, Hashtable, Properties, TreeMap
85.    containsValue(): 主 键(或给定值) - HashMap, Hashtable, Properties, TreeMap
86.    indexOf(): 若 找到给定对象,返回其位置 - ArrayList, linkedList, List, Stack, Vector
87.    search(): 线 型搜素 - Stack
88.
89.    // 集合转数组
90.    toArray();
91.
92.    // 集合总结
93.    Collection: Set - HashSet, TreeSet
94.    Collection: List - ArrayList, Vector, LinkedList
95.    Map: HashMap, HashTable, TreeMap  

8. 泛型与foreach
Java代码
1.    // 泛型
2.    List<String> myList = new ArrayList<String>();
3.
4.    // foreach
5.    for (String s : myList) {
6.        System.out.println(s);
7.    }  

9. 面向对象
Java代码
1.    // toString()格式化
2.    public class ToStringWith {
3.        int x, y;
4.        public ToStringWith(int anX, int aY) {
5.            x = anX;
6.            y = aY;
7.        }
8.        public String toString() {
9.            return "ToStringWith[" + x + "," + y + "]";
10.        }
11.        public static void main(String[] args) {
12.            System.out.println(new ToStringWith(43, 78));
13.        }
14.    }
15.
16.    // 覆盖equals方法
17.    public boolean equals(Object o) {
18.        if (o == this)  // 优化
19.            return true;
20.        if (!(o instanceof EqualsDemo))  // 可投射到这个类
21.            return false;
22.        EqualsDemo other = (EqualsDemo)o;  // 类型转换
23.        if (int1 != other.int1)  // 按字段比较
24.            return false;
25.        if (!obj1.equals(other.obj1))
26.            return false;
27.        return true;
28.    }
29.
30.    // 覆盖hashcode方法
31.    private volatile int hashCode = 0;  //延迟初始化
32.    public int hashCode() {
33.        if (hashCode == 0) {
34.            int result = 17;
35.            result = 37 * result + areaCode;
36.        }
37.        return hashCode;
38.    }
39.
40.    // Clone方法
41.    要 克隆对象,必须先做两步: 1. 覆盖对象的clone()方法; 2. 实现空的Cloneable接口
42.    public class Clone1 implements Cloneable {
43.        public Object clone() {
44.            return super.clone();
45.        }
46.    }
47.
48.    // Finalize方法
49.    Object f = new Object() {
50.        public void finalize() {
51.            System.out.println("Running finalize()");
52.        }
53.    };
54.    Runtime.getRuntime().addShutdownHook(new Thread() {
55.        public void run() {
56.            System.out.println("Running Shutdown Hook");
57.        }
58.    });
59.    在 调用System.exit(0);的时候,这两个方法将被执行
60.
61.    // Singleton模式
62.    // 实现1
63.    public class MySingleton() {
64.        public static final MySingleton INSTANCE = new MySingleton();
65.        private MySingleton() {}
66.    }
67.    // 实现2
68.    public class MySingleton() {
69.        public static MySingleton instance = new MySingleton();
70.        private MySingleton() {}
71.        public static MySingleton getInstance() {
72.            return instance;
73.        }
74.    }
75.
76.    // 自定义异常
77.    Exception: 编 译时检查
78.    RuntimeException: 运行时检查
79.    public class MyException extends RuntimeException {
80.        public MyException() {
81.            super();
82.        }
83.        public MyException(String msg) {
84.            super(msg);
85.        }
86.    }  

10. 输入和输出
Java代码
1.    // Stream, Reader, Writer
2.    Stream: 处 理字节流
3.    Reader/Writer: 处理字符,通用Unicode
4.
5.    // 从标准输入设备读数据
6.    1. 用System.in的BufferedInputStream()读取字节
7.        int b = System.in.read();
8.          System.out.println("Read data: " + (char)b);  // 强 制转换为字符
9.    2. BufferedReader 读取文本
10.        如果从Stream转成Reader,使用 InputStreamReader类
11.        BufferedReader is = new BufferedReader(new
12.          InputStreamReader(System.in));
13.          String inputLine;
14.          while ((inputLine = is.readLine()) != null) {
15.              System.out.println(inputLine);
16.              int val = Integer.parseInt(inputLine);  // 如果inputLine为整数
17.        }
18.          is.close();
19.
20.    // 向标准输出设备写数据
21.    1. 用System.out的println()打印数据
22.    2. 用PrintWriter打印
23.        PrintWriter pw = new PrintWriter(System.out);
24.          pw.println("The answer is " + myAnswer + " at this time.");
25.
26.    // Formatter类
27.    格 式化打印内容
28.    Formatter fmtr = new Formatter();
29.    fmtr.format("%1$04d - the year of %2$f", 1951, Math.PI);
30.    或 者System.out.printf();或者System.out.format();
31.
32.    // 原始扫描
33.    void doFile(Reader is) {
34.        int c;
35.        while ((c = is.read()) != -1) {
36.            System.out.println((char)c);
37.        }
38.    }
39.
40.    // Scanner扫描
41.    Scanner 可以读取File, InputStream, String, Readable
42.    try {
43.        Scanner scan = new Scanner(new File("a.txt"));
44.        while (scan.hasNext()) {
45.            String s = scan.next();
46.        }
47.        } catch (FileNotFoundException e) {
48.            e.printStackTrace();
49.        }
50.    }
51.
52.    // 读取文件
53.    BufferedReader is = new BufferedReader(new FileReader("myFile.txt"));
54.    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("bytes.bat"));
55.    is.close();
56.    bos.close();
57.
58.    // 复制文件
59.    BufferedIutputStream is = new BufferedIutputStream(new FileIutputStream("oldFile.txt"));
60.    BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream("newFile.txt"));
61.    int b;
62.    while ((b = is.read()) != -1) {
63.        os.write(b);
64.    }
65.    is.close();
66.    os.close();
67.
68.    // 文件读入字符串
69.    StringBuffer sb = new StringBuffer();
70.    char[] b = new char[8192];
71.    int n;
72.    // 读一个块,如果有字符,加入缓冲区
73.    while ((n = is.read(b)) > 0) {
74.        sb.append(b, 0, n);
75.    }
76.    return sb.toString();
77.
78.    // 重定向标准流
79.    String logfile = "error.log";
80.    System.setErr(new PrintStream(new FileOutputStream(logfile)));
81.
82.    // 读写不同字符集文本
83.    BufferedReader chinese = new BufferedReader(new InputStreamReader(new FileInputStream("chinese.txt"), "ISO8859_1"));
84.    PrintWriter standard = new PrintWriter(new OutputStreamWriter(new FileOutputStream("standard.txt"), "UTF-8"));
85.
86.    // 读取二进制数据
87.    DataOutputStream os = new DataOutputStream(new FileOutputStream("a.txt"));
88.    os.writeInt(i);
89.    os.writeDouble(d);
90.    os.close();
91.
92.    // 从指定位置读数据
93.    RandomAccessFile raf = new RandomAccessFile(fileName, "r");  // r表示已 只读打开
94.    raf.seek(15);  // 从15开始读
95.    raf.readInt();
96.    raf.radLine();
97.
98.    // 串行化对象
99.    对象串 行化,必须实现Serializable接口
100.    // 保存 数据到磁盘
101.    ObjectOutputStream os = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(FILENAME)));
102.    os.writeObject(serialObject);
103.    os.close();
104.    // 读出数据
105.    ObjectInputStream is = new ObjectInputStream(new FileInputStream(FILENAME));
106.    is.readObject();
107.    is.close();
108.
109.    // 读写Jar或Zip文档
110.    ZipFile zippy = new ZipFile("a.jar");
111.    Enumeration all = zippy.entries();  // 枚举值列出所有文件清单
112.    while (all.hasMoreElements()) {
113.        ZipEntry entry = (ZipEntry)all.nextElement();
114.        if (entry.isFile())
115.            println("Directory: " + entry.getName());
116.
117.        // 读写文件
118.        FileOutputStream os = new FileOutputStream(entry.getName());
119.        InputStream is = zippy.getInputStream(entry);
120.        int n = 0;
121.        byte[] b = new byte[8092];
122.        while ((n = is.read(b)) > 0) {
123.            os.write(b, 0, n);
124.            is.close();
125.            os.close();
126.        }
127.    }
128.
129.    // 读写gzip文档
130.    FileInputStream fin = new FileInputStream(FILENAME);
131.    GZIPInputStream gzis = new GZIPInputStream(fin);
132.    InputStreamReader xover = new InputStreamReader(gzis);
133.    BufferedReader is = new BufferedReader(xover);
134.    String line;
135.    while ((line = is.readLine()) != null)
136.        System.out.println("Read: " + line);  

11. 目录和文件操作
Java代码
1.    // 获取文件信息
2.    exists(): 如 果文件存在,返回true
3.    getCanonicalPath(): 获 取全名
4.    getName(): 文件名
5.    getParent(): 父 目录
6.    canRead(): 如果文件可读,返回true
7.    canWrite(): 如 果文件可写,返回true
8.    lastModified(): 文 件更新时间
9.    length(): 文件大小
10.    isFile(): 如 果是文件,返回true
11.    ifDirectory(): 如 果是目录,返回true
12.    要 调用文件的这些方法,必须
13.    File f = new File(fileName);
14.
15.    // 创建文件
16.    File f = new File("c:\\test\\mytest.txt");
17.    f.createNewFile();  // 创建mytest.txt文件到test目录下
18.
19.    // 修改文件名
20.    File f = new File("c:\\test\\mytest.txt");
21.    f.renameTo(new File("c:\\test\\google.txt"));
22.    把 mytest.txt修改成google.txt
23.
24.    // 删除文件
25.    File f = new File("c:\\test\\mytest.txt");
26.    f.delete();
27.
28.    // 临时文件
29.    File f = new File("C:\\test");  // 指定一个文件夹
30.    // 在test文件夹中创建foo前缀,tmp后缀的临时文件
31.    File tmp = File.createTempFile("foo", "tmp", f);
32.    tmp.deleteOnExit();  // 在程序结束时删除该临时文件
33.
34.    // 更改文件属性
35.    setReadOnly(): 设 置为只读
36.    setlastModified(): 设置最后更改时间
37.
38.    // 列出当前文件夹的文件列表
39.    String[] dir = new java.io.File(".").list();
40.    java.util.Arrays.sort(dir);
41.    for (int i = 0; i < dir.length; i++) {
42.        System.out.println(dir[i]);
43.    }
44.
45.    // 过滤文件列表
46.    class OnlyJava implements FilenameFilter {
47.        public boolean accept(File dir, String s) {
48.            if (s.endsWith(".java") || s.endsWith(".class") || s.endsWith(".jar"))
49.                return true;
50.        }
51.    }
52.
53.    // 获取根目录
54.    File[] rootDir = File.listRoots();
55.    for (int i = 0; i < rootDir.length; i++) {
56.        System.out.println(rootDir[i]);
57.    }
58.
59.    // 创建新目录
60.    new File("/home/ian/bin").mkdir();  // 如果"/home/ian"存在,则可以创建bin目录
61.    new File("/home/ian/bin").mkdirs();  // 如果"/home/ian"不存在,会创建所有的目录  

12. 国际化和本地化
Java代码
1.    // I18N资源
2.    ResourceBundle rb = ResourceBundle.getBundle("Menus");
3.    String label = rb.getString("exit.label");
4.    // ResourceBundle相当于名值对,获取Menus按钮的区域属性
5.    Menus_cn.properties: 不 同区域的属性文件
6.
7.    // 列出有效区域
8.    Locale[] list = Locale.getAvailableLocales();
9.
10.    // 指定区域
11.    Locale cnLocale = Locale.CHINA;
12.
13.    // 设置默认区域
14.    Locale.setDefault(Locale.CHINA);
15.
16.    // 格式化消息
17.    public class MessageFormatDemo {
18.        static Object[] data = {
19.            new java.util.Date(),
20.            "myfile.txt",
21.            "could nto be opened"
22.        };
23.        public static void main(String[] args) {
24.            String result = MessageFormat.format("At {0,time} on {0,date}, {1} {2}.", data);
25.            System.out.println(result);
26.        }
27.    }
28.    输 出: At 10:10:08 on 2009-6-18, myfile.txt could nto be opened.
29.
30.    // 从资源文件中读消息
31.    Widgets.properties 在com.sean.cook.chap11下
32.    ResourceBundle rb = ResourceBundle.getBundle("com.sean.cook.chap11.Widgets");
33.    String propt = rb.getString("filedialogs.cantopen.string");
34.    String result = MessageFormat.format(rb.getString("filedialogs.cantopen.format"), data);  

13. 网络客户端
Java代码
1.    // 访问服务器
2.    Socket socket = new Socket("127.0.0.1", 8080);
3.    // todo something
4.    socket.close();
5.
6.    // 查找网络地址
7.    InetAddress.getByName(hostName).getHostAddress()); // 根据主机名得到IP地址
8.    InetAddress.getByName(ipAddr).getHostName()); // 根据IP地址得到主机名
9.
10.    // 连接具体异常
11.    UnknownHostException
12.    NoRouteToHostException
13.    ConnectException
14.
15.    // Socket读写文本数据
16.    BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
17.    String remoteTime = in.readline();
18.    PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
19.    out.print("send message to client \r\n");
20.    out.flush();
21.
22.    // Socket读写二进制数据
23.    DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
24.    long remoteTime = (long)(in.readUnsignedByte() << 24);
25.    DataOutputStream out = new DataOutputStream(socket.getOutputStream(), true);
26.
27.    // Socket读写串行化数据
28.    ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(socket.getInputStream()));
29.    Object o = in.readObject();
30.    if (o instanceof Date) // 验证对象类型
31.    ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream(), true);
32.
33.    // UDP数据报
34.    private final static int PACKET_SIZE = 1024;
35.
36.    String host = "EV001B389673DE";
37.    InetAddress serverAddr = InetAddress.getByName(host);
38.    DatagramSocket socket = new DatagramSocket();
39.    byte[] buffer = new byte[PACKET_SIZE]; // 分配数据缓冲空间
40.    DatagramPacket packet = new DatagramPacket(buffer, PACKET_SIZE, serverAddr, 8080);
41.    packet.setLength(PACKET_SIZE-1); // 设置数据长度
42.    socket.send(packet);
43.    socket.receive(packet); // 接收数据  

14. 服务器端: Socket
Java代码
1.    // 创建ServerSocket
2.    ServerSocket serverSocket;
3.    Socket clientSocket;
4.
5.    serverSocket = new ServerSocket(9999);
6.    while ((clientSocket = serverSocket.accept()) != null) {
7.        System.out.println("Accept from client " + s.getInetAddress());
8.        s.close();
9.    }
10.
11.    // 监听内部网
12.    public static final short PORT = 9999;
13.    public static final String INSIDE_HOST = "acmewidgets-inside"; // 网络接口名
14.    public static final int BACKLOG = 10; // 待发数
15.    serverSocket = new ServerSocket(PORT, BACKLOG, InetAddress.getByName(INSIDE_HOST));
16.
17.    // 返回相应对象
18.    ServerSocket serverSocket =  new ServerSocket(9999);;
19.    Socket clientSocket;
20.    BufferedReader in = null;
21.    PrintWriter out = null;
22.    while (true) {
23.        clientSocket = serverSocket.accept();
24.        in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream(), "8859_1"));
25.        out = new PrintWriter(new OutputStreamWriter(clientSocket.getOutputStream(), "8859_1"), true);
26.        String echoLine;
27.        while ((echoLine = in.readLine()) != null) {
28.            System.out.println("Read " + echoLine);
29.            out.print(echoLine + "\r\n");
30.        }
31.    }
32.    以 上例子返回字符串,如果返回二进制,则使用DataOutputStream;返回对象,使用ObjectOutputStream
33.
34.    // 处理多客户端
35.    需要 把接收数据的处理放入多线程中
36.    public class EchoServerThreaded {
37.        public static final int ECHOPORT = 7;
38.        public static final int NUM_THREADS = 4;
39.
40.        public static void main(String[] av) {
41.            new EchoServerThreaded(ECHOPORT, NUM_THREADS);
42.        }
43.
44.        public EchoServerThreaded2(int port, int numThreads) {
45.            ServerSocket servSock;
46.            Socket clientSocket;
47.            try {
48.                servSock = new ServerSocket(ECHOPORT);
49.            } catch(IOException e) {
50.                throw new RuntimeException("Could not create ServerSocket " + e);
51.            }
52.            for (int i = 0; i < numThreads; i++) {
53.                new Handler(servSock, i).start();
54.            }
55.        }
56.    }
57.    class Handler extends Thread {
58.        ServerSocket servSock;
59.        int threadNumber;
60.
61.        Handler(ServerSocket s, int i) {
62.            super();
63.            servSock = s;
64.            threadNumber = i;
65.            setName("Thread " + threadNumber);
66.        }
67.
68.        public void run() {
69.            while (true) {
70.                try {
71.                    System.out.println(getName() + " waiting");
72.                    Socket clientSocket;
73.                    synchronized (servSock) {
74.                        clientSocket = servSock.accept();
75.                    }
76.                    System.out.println(getName() + " starting, IP=" + clientSocket.getInetAddress());
77.                    BufferedReader is = new BufferedReader(new InputStreamReader(
78.                        clientSocket.getInputStream()));
79.                    PrintStream os = new PrintStream(clientSocket.getOutputStream(), true);
80.                    String line;
81.                    while ((line = is.readLine()) != null) {
82.                        os.print(line + "\r\n");
83.                        os.flush();
84.                    }
85.                    System.out.println(getName() + " ENDED ");
86.                    clientSocket.close();
87.                } catch (IOException ex) {
88.                    System.out.println(getName() + ": IO Error on socket " + ex);
89.                    return;
90.                }
91.            }
92.        }
93.    }
94.
95.    // 使用SSL和JSSE保护Web服务器
96.    SSLServerSocketFactory ssf = (SSLServerSocketFactory)SSLServerSocketFactory.getDefault();
97.    ServerSocket serverSocket = ssf.createServerSocket(8080);
98.
99.    // Log4j
100.    Level 级别: DEBUG < INFO < WARN < ERROR < FATAL < OFF
101.    Appender: 输 出信息
102.    ConsoleAppender: 输出控制台 System.out
103.
104.    // 找到网络接口
105.    Enumeration list = NetworkInterface.getNetworkInterfaces();
106.    while (list.hasMoreElements()) {
107.        NetworkInterface iface = (NetworkInterface)list.nextElement();
108.        System.out.println(iface.getDisplayName());
109.        Enumeration addrs = iface.getInetAddresses();
110.        while (addrs.hasMoreElements()) {
111.            InetAddress addr = (InetAddress)addrs.nextElement();
112.            System.out.println(addr);
113.        }
114.    }  

15. Java Mail
Java代码
1.    // 发送Mail
2.    protected String msgRecIp = "[email protected]";
3.    protected String msgSubject = "babytree";
4.    protected String msgCc = "[email protected]";
5.    protected String msgBody = "test body";
6.    protected Session session;
7.    protected Message msg;
8.
9.    public void doSend() {
10.        // 创建属性文件
11.        Properties props = new Properties();
12.        props.put("mail.smtp.host", "mailhost");
13.        // 创建Session对象
14.        session = Session.getDefaultInstance(props, null);
15.        session.setDebug(true);
16.        msg = new MimeMessage(session); // 创建邮件
17.        msg. setFrom(new InternetAddress("[email protected]"));
18.        InternetAddress toAddr = new InternetAddress(msgRecIp);
19.        msg.addRecipient(Message.RecipientType.TO, toAddr);
20.        InternetAddress ccAddr = new InternetAddress(msgCc);
21.        msg.addRecipient(Message.RecipientType.CC, ccAddr);
22.        msg.setSubject(msgSubject);
23.        msg.setText(msgBody);
24.        Transport.send(msg);
25.    }
26.
27.    // 发送MIME邮件
28.    Multipart mp = new MimeMultipart();
29.    BodyPart textPart = new MimeBodyPart();
30.    textPart.setText(message_body);  // 设置类型"text/plain"
31.    BodyPart pixPart = new MimeBodyPart();
32.    pixPart.setContent(html_data, "text/html");
33.    mp.addBodyPart(textPart);
34.    mp.addBodyPart(pixPart);
35.    mesg.setContent(mp);
36.    Transport.send(mesg);
37.
38.    // 读Mail
39.    Store store = session.getStore(protocol);
40.    store.connect(host, user, password);
41.    Folder rf;
42.    rf = store.getFolder(root);
43.    rf = store.getDefaultFolder();
44.    rf.open(Folder.READ_WRITE);  

16. 数据库访问
Java代码
1.    // JDO
2.    Properties p = new Properties();
3.    p.load(new FileInputStream("jdo.properties"));
4.    PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory(p);
5.    PersistenceManager pm = pmf.getPersistenceManager();
6.    // 提交数据
7.    pm.currentTransaction().begin();
8.    if (o instanceof Collection) {
9.        pm.makePersistentAll((Collection) o);
10.    } else {
11.        pm.makePersistent(o);
12.    }
13.    pm.currentTransaction().commit();
14.    pm.close();
15.    // 取出数据
16.    Object[] data = new Object[3];
17.    pm.retrieveAll(data);
18.    for (int i = 0; i < data.length; i++) {
19.        System.out.println(data[i]);
20.    }
21.    pm.close();
22.
23.    // 数据操作
24.    Class clz = Class.forName("oracle.jdbc.driver.OracleDriver");
25.    String dbUrl = "jdbc:oracle:thin:@192.168.0.23:1521#:nms";
26.    Connection conn = DriverManager.getConnection(dbUrl, "su", "1234");
27.    Statement stmt = conn.createStatement();
28.    ResultSet rs = stmt.executeQuery("select * from pmtable");
29.    while (rs.next()) {
30.        String name = rs.getString(1);
31.        String otherName = rs.getString("name");
32.    }
33.
34.    // 使用PreparedStatement提高性能,除了查询,都使用executeUpdate执行操作
35.    PreparedStatement pstmt = conn.prepareStatement("select * from pmtable where name = ?");
36.    pstmt.setString(1, "sean");
37.    ResultSet rs = pstmt.executeQuery();
38.
39.    // 调用存储过程
40.    CallableStatement cs = conn.prepareCall("{ call ListDefunctUsers }");
41.    ResultSet rs = cs.executeQuery();
42.
43.    // 显示数据库表信息
44.    DatabaseMetaData meta = conn.getMetaData();
45.    meta.getDatabaseProductName();
46.    meta.getDatabaseProductVersion();
47.    meta.getDefaultTransactionIsolation();  

17. XML
    SAX: 在读取文档提取相应的标记事件(元素起始、元素结束、文档起始)
    DOM: 在内存中构造与文档中元素相应的树,可以遍历、搜索、修改
    DTD: 验证文档是否正确
    JAXP: 用于XML处理的Java API
    Castor: 开源项目,用于Java对象与XML映射
Java代码
1.    // 从对象中生成XML
2.    private final static String FILENAME = "serial.xml";
3.    public static void main(String[] args) throws IOException {
4.        String a = "hard work and best callback";
5.        new SerialDemoXML().write(a);
6.        new SerialDemoXML().dump();
7.    }
8.    public void write(Object obj) throws IOException {
9.        XMLEncoder os = new XMLEncoder(new BufferedOutputStream(new FileOutputStream(FILENAME)));
10.        os.writeObject(obj);
11.        os.close();
12.    }
13.    public void dump() throws IOException {
14.        XMLDecoder out = new XMLDecoder(new BufferedInputStream(new FileInputStream(FILENAME)));
15.        System.out.println(out.readObject());
16.        out.close();
17.    }
18.    serial.xml 格式内容如下:
19.    <?xml version="1.0" encoding="UTF-8"?>
20.    <java version="1.6.0_02" class="java.beans.XMLDecoder">
21.        <string>hard work and best callback</string>
22.    </java>
23.    控 制台输出
24.    hard work and best callback
25.
26.    // XSLT转换XML
27.    XSLT 可以用来对输出格式进行各种控制
28.    Transformer tx = TransformerFactory.newInstance().newTransformer(new StreamSource("people.xml"));
29.    tx.transform(new StreamSource("people.xml"), new StreamResult("people.html"));
30.
31.    // 用SAX解析XML - 主要用于查找关键元素,不用全文遍历
32.    public SaxLister() throws SAXException, IOException {
33.        XMLReader parser = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
34.        parser.setContentHandler(new PeopleHandler());
35.        parser.parse("C:\\StudySource\\javacooksrc2\\xml\\people.xml");
36.    }
37.    class PeopleHandler extends DefaultHandler {
38.        boolean parent = false;
39.        boolean kids = false;
40.        public void startElement(String nsURI, String localName, String rawName, Attributes attr) throws SAXException {
41.            System.out.println("startElement: " +  localName + "," + rawName);
42.            if (rawName.equalsIgnoreCase("name"))
43.                parent = true;
44.            if (rawName.equalsIgnoreCase("children"))
45.            kids = true;
46.        }
47.        public void characters(char[] ch, int start, int length) {
48.            if (parent) {
49.                System.out.println("Parent: " + new String(ch, start, length));
50.                parent = false;
51.            } else if (kids) {
52.                System.out.println("Children: " + new String(ch, start, length));
53.                kids = false;
54.            }
55.        }
56.        public PeopleHandler() throws SAXException {
57.            super();
58.        }
59.    }
60.
61.    // DOM解析XML - 遍历整个树
62.    String uri = "file:" + new File("C:\\StudySource\\javacooksrc2\\xml\\people.xml").getAbsolutePath();
63.    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
64.    DocumentBuilder builder = factory.newDocumentBuilder();
65.    Document doc = builder.parse(uri);
66.    NodeList nodes = doc.getChildNodes();
67.    for (int i = 0; i < nodes.getLength(); i++) {
68.        Node n = nodes.item(i);
69.        switch (n.getNodeType()) {
70.        case Node.ELEMENT_NODE:
71.            // todo
72.            break;
73.        case Node.TEXT_NODE:
74.            // todo
75.            break;
76.        }
77.    }
78.
79.    // 使用DTD或者XSD验证
80.    定 义好DTD或XSD文件
81.    XmlDocument doc = XmlDocument.createXmlDocument(uri, true);
82.
83.    // 用DOM生成XML
84.    DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();
85.    DocumentBuilder parser = fact.newDocumentBuilder();
86.    Document doc = parser.newDocument();
87.    Node root = doc.createElement("Poem");
88.    doc.appendChild(root);
89.    Node stanza = doc.createElement("Stanza");
90.    root.appendChild(stanza);
91.    Node line = doc.createElement("Line");
92.    stanza.appendChild(line);
93.    line.appendChild(doc.createTextNode("Once, upon a midnight dreary"));
94.    line = doc.createElement("Line");
95.    stanza.appendChild(line);
96.    line.appendChild(doc.createTextNode("While I pondered, weak and weary"));  

18. RMI
Java代码
1.    a. 定义 客户端与服务器之间的通信接口
2.    public interface RemoteDate extends Remote {
3.        public Date getRemoteDate() throws RemoteException;
4.        public final static String LOOKUPNAME = "RemoteDate";
5.    }
6.
7.    b. 编 写RMI服务器
8.    public class RemoteDateImpl extends UnicastRemoteObject implements RemoteDate {
9.        public RemoteDateImpl() throws RemoteException {
10.            super();
11.        }
12.        public Date getRemoteDate() throws RemoteException {
13.            return new Date();
14.        }
15.    }
16.    RemoteDateImpl im = new RemoteDateImpl();
17.    System.out.println("DateServer starting...");
18.    Naming.rebind(RemoteDate.LOOKUPNAME, im);
19.    System.out.println("DateServer ready.");
20.
21.    c. 运 行rmic生成stub
22.    javac RemoteDateImpl.java
23.    rmic RemoteDateImpl
24.
25.    d. 编 写客户端
26.    netConn = (RemoteDate)Naming.lookup(RemoteDate.LOOKUPNAME);
27.    Date today = netConn.getRemoteDate();
28.    System.out.println(today.toString());
29.
30.    e. 确 保RMI注册表运行
31.    rmiregistry
32.
33.    f. 启 动服务器
34.    java RemoteDateImpl
35.
36.    g. 运 行客户端
37.    java DateClient  

19. 包和包装机制
    jar cvf /tmp/test.jar .  // 当前目录压缩到test.jar中
    jar xvf /tmp/test.jar  // 把test.jar解压到当前目录
    从指定class运行jar文件
    a. Main-Class: HelloWord  // 注意中间有一个空格
    b. jar cvmf manifest.mf hello.jar HelloWorld.class
    c. java -jar hello.jar

20. Java线程
Java代码
1.    // 停止线程 - 不要使用stop()方法
2.    private boolean done = false;
3.    public void run() {
4.        while (!done) {
5.            //todo
6.        }
7.    }
8.    public void shutDown() {
9.        done = true;
10.    }
11.    可 以调用shutDown()方法来结束线程
12.
13.    // 如果读取IO的时候出现堵塞,那么可以使用下面方法
14.    public void shutDown() throws IOException {
15.        if (io != null)
16.            io.close();
17.    }
18.
19.    // 启动一线程,等待控制台输入,使用join()方法来暂停当前线程,直到其他线程调用
20.    Thread t = new Thread() {
21.        public void run() {
22.            System.out.println("Reading");
23.            try {
24.                System.in.read();
25.            } catch (IOException e) {
26.                System.err.println(e);
27.            }
28.            System.out.println("Thread finished.");
29.        }
30.    };
31.    System.out.println("Starting");
32.    t.start();
33.    System.out.println("Joining");
34.    try {
35.        t.join();
36.    } catch (InterruptedException e) {
37.        System.out.println("Who dares imterrupt my sleep?");
38.    }
39.    System.out.println("Main finished.");
40.
41.    // 加锁保证同步
42.    Lock lock = new ReentrantLock();
43.    try {
44.        lock.lock();
45.        // todo
46.    } finally {
47.        lock.unlock();
48.    }
49.
50.    线 程通信wait(), notify(), notifyAll()
51.    生产者-消费者模式
52.    Executors  

21. 内省或“命令类的类”
Java代码
1.    // 反射
2.    Class c = Class.forName("java.lang.String");
3.    Constructor[] cons = c.getConstructors();
4.    for (int i = 0; i < cons.length; i++) {
5.        System.out.println(cons[i].toString());
6.    }
7.    Method[] meths = c.getMethods();
8.    for (int i = 0; i < meths.length; i++) {
9.        System.out.println(meths[i].toString());
10.    }
11.
12.    // 动态装载类
13.    Class c = Class.forName("java.lang.String");
14.    Object obj = c.newInstance();
15.
16.    // 通过反射调用类的方法
17.    class X {
18.        public void master(String s) {
19.            System.out.println("Working on \"" + s + "\"");
20.        }
21.    }
22.    Class clx = X.class;
23.    Class[] argTypes = {String.class};
24.    Method worker = clx.getMethod("master", argTypes);
25.    Object[] theData = {"Chocolate chips"};
26.    worker.invoke(new X(), theData);
27.    输 出: Working on "Chocolate chips"  

22. Java与其他语言的结合
Java代码
1.    // 执行CMD命令,在Eclipse控制台输出
2.    Process p = Runtime.getRuntime().exec("C:/StudySource/ver.cmd");
3.    p.waitFor(); // 等待命令执行完
4.    BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
5.    String s;
6.    while ((s = br.readLine()) != null)
7.        System.out.println(s);
8.
9.    // 调用Jython - 计算22.0/7
10.    BSFManager manager = new BSFManager();
11.    String[] fntypes = {".py"};
12.    manager.registerScriptingEngine("jython", "org.apache.bsf.engines.jython.JythonEngine", fntypes);
13.    Object r = manager.eval("jython", "testString", 0, 0, "22.0/7");
14.    System.out.println("Result type is " + r.getClass().getName());
15.    System.out.println("Result value is " + r);
时间: 2024-10-08 13:25:12

JAVA经典总结的相关文章

Java经典23种设计模式之结构型模式(二)

接上篇,本文介绍结构型模式里的组合模式.装饰模式.外观模式. 一.组合模式(Composite) 组合模式:将对象组合成树形结构,表示"部分--整体"的层次结构.最终达到单个对象和组合对象的使用具有一致性.单看这句话貌似有点抽象,其实比较简单. 以李云龙的独立团为例,目的要统计赵嘉宇一战共歼灭敌人多少个.最高的级别是团,一个团有若干个营,一个营有若干个排,一个排有若干个战士.(为了简化问题,排下面就不设行政单位了).很自然的,李云龙给营长开会回去给老子统计.营长回去给各个排长开会,赶紧

(转)Java经典设计模式(3):十一种行为型模式(附实例和详解)

原文出处: 小宝鸽 Java经典设计模式共有21中,分为三大类:创建型模式(5种).结构型模式(7种)和行为型模式(11种). 本文主要讲行为型模式,创建型模式和结构型模式可以看博主的另外两篇文章:Java经典设计模式之五大创建型模式(附实例和详解).Java经典设计模式之七大结构型模式(附实例和详解). 行为型模式细分为如下11种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 接下来对11种行为型模式逐个进行介

Java经典编程题50道之五十

有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,况原有的数据和计算出的平均分数存放在磁盘文件 "stud"中. public class Example50 {    public static void main(String[] args) {        stud();    } public static void stud() {        Scanner ss = new Scanner(System.in); 

(转)Java经典设计模式(2):七大结构型模式(附实例和详解)

原文出处: 小宝鸽 总体来说设计模式分为三大类:创建型模式.结构型模式和行为型模式. 博主的上一篇文章已经提到过创建型模式,此外该文章还有设计模式概况和设计模式的六大原则.设计模式的六大原则是设计模式的核心思想,详情请看博主的另外一篇文章:Java经典设计模式之五大创建模式(附实例和详解). 接下来我们看看结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式.其中适配器模式主要分为三类:类的适配器模式.对象的适配器模式.接口的适配器模式.其中的对象的适配器

Java经典问题算法大全

Java经典问题算法大全/*[程序1]题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... */ package cn.com.flywater.FiftyAlgorthm; public class FirstRabbit {public static final int MONTH = 15;public static v

Java经典23种设计模式之行为型模式(三)

本文接着介绍11种行为型模式里的备忘录模式.观察者模式.状态模式. 一.备忘录模式 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可以将该对象恢复到原先保存的状态.还是比较好理解的. 1.Memento 备忘录存储原发器对象的内部状态,这个类就是要存储的对象的状态.状态需要多少个变量,在Memento里就写多少个变量. public class Memento { private String state; public Meme*to(String st

Java经典23种设计模式之结构型模式(三)------附代理模式、适配器模式、外观模式区别

本文介绍7种结构型模式里的剩下两种:享元模式.代理模式. 一.享元模式FlyWeight 享元模式比较简单且重要,在很多场合都被用到,只不过封装起来了用户看不到.其概念:运用共享内存技术最大限度的支持大量细粒度的对象.这个概念给的有些抽象,说白了就是如果内存中存在某个对象A,如果再次需要使用对象A的时候如果内存中有A这个对象就直接使用它,不要再次new了.如果没有,则重新new一个.基于这个特点,享元模式使用时一般会给待访问对象传递一个Tag,用来标识这个对象,而且要同时使用抽象工厂的方法进行访

Java经典习题(2)

6.输入一行字符,分别统计出其中英文字母.空格.数字和其他字符的个数. 程序分析:从控制台获取一行输入,然后对String字符串的内容进行判断,统计每种字符的个数,直到遇到回车"\n"为止. import java.util.Scanner; public class Question6 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.next

Java经典设计模式之七大结构型模式(附实例和详解)

博主在大三的时候有上过设计模式这一门课,但是当时很多都基本没有听懂,重点是也没有细听,因为觉得没什么卵用,硬是要搞那么复杂干嘛.因此设计模式建议工作半年以上的猿友阅读起来才会理解的比较深刻.当然,你没事做看看也是没有坏处的. 总体来说设计模式分为三大类:创建型模式.结构型模式和行为型模式. 博主的上一篇文章已经提到过创建型模式,此外该文章还有设计模式概况和设计模式的六大原则.设计模式的六大原则是设计模式的核心思想,详情请看博主的另外一篇文章:Java经典设计模式之五大创建模式(附实例和详解).

Java经典23种设计模式之创造型模式(二)

本文记录5种创造型模式的剩下两种:建造者模式(Builder).原型模式(PROTOTYPE). 一.建造者模式(别名:生成者模式) 将复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示.一个完整的建造者模式包含以下几个概念: 1.产品类 Product public class Person { private String head; private String body; private String foot; public String getHead() { ret