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 = "hxydream@163.com";
3. protected String msgSubject = "babytree";
4. protected String msgCc = "nobody@erewhon.com";
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("nobody@host.domain"));
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);

JAVA经典总结的更多相关文章

  1. JAVA经典算法40题及解答

    JAVA经典算法40题 [程序1]   题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分 ...

  2. Java经典算法四十例编程详解+程序实例

    JAVA经典算法40例 [程序1]   题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?   1.程 ...

  3. JAVA经典算法40题

    1: JAVA经典算法40题 2: [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 3 ...

  4. Java经典编程题50道之五十

    有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,况原有的数据和计算出的平均分数存放在磁盘文件 "stud"中. public ...

  5. Java经典设计模式之十一种行为型模式(附实例和详解)

    Java经典设计模式共有21中,分为三大类:创建型模式(5种).结构型模式(7种)和行为型模式(11种). 本文主要讲行为型模式,创建型模式和结构型模式可以看博主的另外两篇文章:Java经典设计模式之 ...

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

    博主在大三的时候有上过设计模式这一门课,但是当时很多都基本没有听懂,重点是也没有细听,因为觉得没什么卵用,硬是要搞那么复杂干嘛.因此设计模式建议工作半年以上的猿友阅读起来才会理解的比较深刻.当然,你没 ...

  7. JAVA经典算法40题(原题+分析)之分析

    JAVA经典算法40题(下) [程序1]   有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?   1.程序分析:  ...

  8. JAVA经典算法40题(原题+分析)之原题

    JAVA经典算法40题(上) [程序1]   题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? [程 ...

  9. JAVA经典算法50题(转)

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/51097928 JAVA经典算法50题 [程序1]   题目:古典问题:有一对兔子, ...

  10. 2019年19道java经典面试题(附答案)

    1.不可变对象 指对象一旦被创建状态不能再改变.任何修改都会创建一个新的对象,如 String.Integer及其它包装类. 2.能否创建一个包含可变对象的不可变对象? 可以.不要共享可变对象的引用就 ...

随机推荐

  1. centos7编译安装Python3.6(与2.7并存)

    首先去官网下载python3.6 https://www.python.org/ 环境准备:#yum install openssl-devel bzip2-devel expat-devel gdb ...

  2. android 显示internet 图片

    try { HttpGet httpRequest = new HttpGet(edtUrl.getText() .toString()); HttpClient httpclient = new D ...

  3. java初学一

    1.区分大小写 public static void main String args[]  是类体中的一个方法,之后的两个大括号以及之间的内容叫做方法体,一个java应用程序中必须有一个类且只有一个 ...

  4. Webpack+React+ES6 最新环境搭建和配置(2017年)

    刚刚学习React,发现React在ES6下的语法才是本体,结合ES6新的语言特性,使组件化开发显得更加直观.而且现在的Angular2也开始使用支持强类型的TypeScript,转译(transpi ...

  5. 对于近阶段公司代码 review 小结

    来新公司,给公司的SDK review了一下.发现了不少小问题,在此总结一下. (我下面说明问题可能是很简单,但是搞清楚某些问题还是花了些时间的,大家引以为戒吧) 先谈谈处理的问题: 1.某天QA说有 ...

  6. std::tuple作为参数invoke调用函数

    template<typename Function, typename Tuple, std::size_t... Index> decltype(auto) invoke_impl(F ...

  7. 高通camera结构(摄像头基础介绍)

    摄像头基础介绍 一.摄像头结构和工作原理. 拍摄景物通过镜头,将生成的光学图像投射到传感器上,然后光学图像被转换成电信号,电信号再经过模数转换变为数字信号,数字信号经过DSP加工处理,再被送到电脑中进 ...

  8. kdump+crash

    参考:http://www.360doc.com/content/19/0205/08/36367108_813163495.shtml https://blog.csdn.net/u01436103 ...

  9. sbt安装与配置

    下载地址:http://www.scala-sbt.org/download.html 当前版本:sbt-0.13.13.tgz 安装 1.解压并赋予权限 [root@hidden util]# ta ...

  10. PHP设计模式(六): 单例模式