1、排序与查找
使用Arrays可以对数组进行排序与查找操作。Arrays.sort(Object[] a)可以对实现了Comparable接口的对象进行排序;使用binarySearch(Object[] a, Object key)将可以对已经排序好了的对象数组进行二分法查找。实例如下:
  1. class Student implements Comparable 
  2.     int num; 
  3.     String name; 
  4.     Student(int num,String name) 
  5.     { 
  6.         this.num=num; 
  7.         this.name=name; 
  8.     } 
  9.     public String toString() 
  10.     { 
  11.         return "number="+num+","+"name="+name; 
  12.     } 
  13.     public int compareTo(Object o) 
  14.     { 
  15.         Student s=(Student)o; 
  16.         //return num>s.num ? 1 : (num==s.num ? 0 : -1); 
  17.         int result=num>s.num ? 1 : (num==s.num ? 0 : -1); 
  18.         if(0==result) 
  19.         { 
  20.             result=name.compareTo(s.name); 
  21.         } 
  22.         return result; 
  23.     } 
 排序和查找: 
  1. Student[] ss=new Student[]{new Student(1,"zhangsan"), 
  2.                    new Student(2,"lisi"), 
  3.                    new Student(3,"wangwu"), 
  4.                    new Student(3,"mybo")}; 
  5.     Arrays.sort(ss); 
  6.     for(int i=0;i<ss.length;i++) 
  7.     { 
  8.         System.out.println(ss[i]); 
  9.     } 
  10.     int index=Arrays.binarySearch(ss,new Student(2,"lisi")); 
  11.     System.out.println("index="+index); 
  12.     System.out.println(ss[index]); 
2、封装类和基本类型转换
  1. int i=3
  2.     Integer in=new Integer(i); 
  3.     int j=in.intValue(); 
  4.     System.out.println("j="+j); 
  5.     String str=in.toString(); 
  6.     System.out.println("str="+str); 
  7.      
  8.     String str2="134"
  9.     System.out.println(Integer.valueOf(str2)); 
 3、反射动态获取含参数的构造函数以及创建对象
  1. Class c=Class.forName(args[0]); 
  2.         Constructor[] cons=c.getDeclaredConstructors(); 
  3.         /*for(int i=0;i<cons.length;i++) 
  4.         { 
  5.             System.out.println(cons[i]); 
  6.         } 
  7.         Method[] ms=c.getDeclaredMethods(); 
  8.         for(int i=0;i<ms.length;i++) 
  9.         { 
  10.             System.out.println(ms[i]); 
  11.         }*/ 
  12.         Class[] params=cons[0].getParameterTypes(); 
  13.         Object[] paramValues=new Object[params.length]; 
  14.         for(int i=0;i<params.length;i++) 
  15.         { 
  16.             if(params[i].isPrimitive()) 
  17.             { 
  18.                 paramValues[i]=new Integer(i+3); 
  19.             } 
  20.         } 
  21.         Object o=cons[0].newInstance(paramValues); 
  22.         Method[] ms=c.getDeclaredMethods(); 
  23.         ms[0].invoke(o,null); 
 
  1. class Point 
  2.     static 
  3.     { 
  4.         System.out.println("Loading Point"); 
  5.     } 
  6.     int x,y; 
  7.     void output() 
  8.     { 
  9.         System.out.println("x="+x+","+"y="+y); 
  10.     } 
  11.     Point(int x,int y) 
  12.     { 
  13.         this.x=x; 
  14.         this.y=y; 
  15.     } 
 4、获取运行时相关信息、进程相关信息:Runtime类、Process类
  1. Runtime rt=Runtime.getRuntime(); 
  2.         System.out.println(rt.freeMemory()); 
  3.         System.out.println(rt.totalMemory()); 
  4.         try 
  5.         { 
  6.             //rt.exec("notepad"); 
  7.             Process p=rt.exec("javac ArrayTest.java"); 
  8.             InputStream is=p.getInputStream(); 
  9.             int data; 
  10.             while((data=is.read())!=-1
  11.             { 
  12.                 System.out.print((char)data); 
  13.             } 
 5、Socket编程
TCP编程:
  Server端先启动,并处于阻塞状态。步骤:绑定端口、调用accept方法处于监听状态、输入输出流进行交互、关闭各项资源
  1. public class ServerService { 
  2.     public static void main(String[] args) throws Exception { 
  3.         ServerSocket ss = new ServerSocket(6000); 
  4.         Socket s = ss.accept(); 
  5.         OutputStream os = s.getOutputStream(); 
  6.         os.write("welcome client, this is server!".getBytes()); 
  7.          
  8.         InputStream is = s.getInputStream(); 
  9.         byte[] b = new byte[100]; 
  10.         int len = is.read(b); 
  11.          
  12.         System.out.println(new String(b,0, len)); 
  13.          
  14.         is.close(); 
  15.         os.close(); 
  16.         s.close(); 
  17.         ss.close(); 
  18.     } 
  Client启动,并连接到Server。步骤:开启到某ip和端口的连接、输入输出流进行交互、关闭各项资源
  1. public class Client { 
  2.     public static void main(String[] args) throws Exception { 
  3.         Socket s = new Socket("127.0.0.1"6000); 
  4.         OutputStream os = s.getOutputStream(); 
  5.         os.write("hello server, this is client!".getBytes()); 
  6.         InputStream is = s.getInputStream(); 
  7.         byte[] b = new byte[100]; 
  8.         int len = is.read(b); 
  9.         System.out.println(new String(b, 0, len)); 
  10.          
  11.         is.close(); 
  12.         os.close(); 
  13.         s.close(); 
  14.     } 
 改进版:多线程server,持续运行
  1. public class ServerService { 
  2.     public static void main(String[] args) throws Exception { 
  3.         ServerSocket serverSocket = new ServerSocket(6000); 
  4.         Server server = new Server(serverSocket); 
  5.         new Thread(server).start(); 
  6.     } 
  7.  
  8.  
  9. class Server implements Runnable { 
  10.     private ServerSocket serverSocket; 
  11.  
  12.     public Server(ServerSocket serverSocket) { 
  13.         this.serverSocket = serverSocket; 
  14.     } 
  15.  
  16.     @Override 
  17.     public void run() { 
  18.         Socket s = null
  19.         try { 
  20.             while(true){ 
  21.                 s = serverSocket.accept(); 
  22.                 OutputStream os = s.getOutputStream(); 
  23.                 os.write("welcome client, this is server!".getBytes()); 
  24.                  
  25.                 InputStream is = s.getInputStream(); 
  26.                 byte[] b = new byte[100]; 
  27.                 int len = is.read(b); 
  28.                  
  29.                 System.out.println(new String(b, 0, len)); 
  30.                  
  31.                 is.close(); 
  32.                 os.close(); 
  33.                 s.close(); 
  34.             } 
  35.         } catch (IOException e) { 
  36.             e.printStackTrace(); 
  37.         } 
  38.  
  39.     } 
  40.  
 UDP编程:
接收端编程:UDPReceiver
  1. public class UDPReceiver { 
  2.     public static void main(String[] args) { 
  3.         try { 
  4.             DatagramSocket ds = new DatagramSocket(6000); 
  5.             byte[] buf = new byte[100]; 
  6.             DatagramPacket dp = new DatagramPacket(buf, 100); 
  7.             ds.receive(dp); 
  8.  
  9.             System.out.println(new String(buf, 0, dp.getLength())); 
  10.             ds.close(); 
  11.         } catch (SocketException e) { 
  12.             e.printStackTrace(); 
  13.         } catch (IOException e) { 
  14.             e.printStackTrace(); 
  15.         } 
  16.     } 
 发送端编程:UDPSender
  1. public class UDPSender { 
  2.     public static void main(String[] args) { 
  3.         try { 
  4.             DatagramSocket ds = new DatagramSocket(); 
  5.             String str = "hello, this is zhangsan"
  6.             DatagramPacket dp = new DatagramPacket(str.getBytes(), str.length(), 
  7.                     InetAddress.getByName("localhost"), 6000); 
  8.              
  9.             ds.send(dp); 
  10.             ds.close(); 
  11.         } catch (SocketException e) { 
  12.             e.printStackTrace(); 
  13.         } catch (UnknownHostException e) { 
  14.             e.printStackTrace(); 
  15.         } catch (IOException e) { 
  16.             e.printStackTrace(); 
  17.         } 
  18.     } 
 6、文件操作
创建与操作系统无关的文件
  1. File fDir=new File(File.separator); 
  2.         String strFile="JavaLesson"+File.separator+"Lesson7"
  3.             File.separator+"1.txt"
  4.         File f=new File(fDir,strFile); 
  5.         f.createNewFile(); 
 【注意】File fDir=new File(File.separator); 表示根目录, 在windows下面表示所在目录结构的根目录'D:\',
在linux或unix下,代表根目录'/'。
 
 7、setToString和mapToString方法
setToString
private <T> String setToString(Set<T> set) {
    StringBuffer sb = new StringBuffer();
    for (T o : set) {
      sb.append(o.toString());
    }
    return sb.toString();
  }
 
mapToString
  private <K, V> String mapToString(Map<K, V> configMap) {
            StringBuffer sb = new StringBuffer();
            for (K k : configMap.keySet()) {
              sb.append(k + "->" + configMap.get(k));
            }
            return sb.toString();
          }
8、多线程程序的停止方式
在多线程程序中,由于Thread类的stop方法已经标记为depracated, 所以不能采取stop方法来停止。需要自己写程序来控制程序的退出,方式有二种:
(1)使用私有boolean flag变量进行控制
  1. private boolean flag = true
  2.  
  3. @Override 
  4. public void run(){ 
  5.   while(flag){ 
  6.       //... 
  7.   }  
  8.  
  9. public void stopThread(){ 
  10.   flag = false
(2)使用break语句退出循环
  1. @Override 
  2. public void run(){ 
  3.   while(true){ 
  4.      if(...) 
  5.         break//退出循环 
  6.   } 
 
  9、序列化对象
前提:对象必须实现Serializable接口,含有不能被序列化的对象时申明为transient,静态成员变量不能被序列化
 
  1. ObjectOutputStream os = new ObjectOutputStream();  
  2. os.writeObject(new SerObject()); 
 例如,要写入可通过 ObjectInputStream 中的示例读取的对象,请执行以下操作: 
        FileOutputStream fos = new FileOutputStream("t.tmp");
        ObjectOutputStream oos = new ObjectOutputStream(fos);

        oos.writeInt(12345);
        oos.writeObject("Today");
        oos.writeObject(new Date());

        oos.close();
 
 例如,要从由 ObjectOutputStream 中的示例写入的流读取:
        FileInputStream fis = new FileInputStream("t.tmp");
        ObjectInputStream ois = new ObjectInputStream(fis);

        int i = ois.readInt();
        String today = (String) ois.readObject();
        Date date = (Date) ois.readObject();

        ois.close();
10、多线程下,同步方法使用的是this监视器,可以与this同步块进行同步,其他对象(如obj)则不可以。
  1. public class Demo01 { 
  2.  
  3.     public static void main(String[] args) throws Exception { 
  4.  
  5.         MyThread mt = new MyThread(); 
  6.         new Thread(mt).start(); 
  7.         Thread.sleep(10); //必须等待,否则主线程会在自己的时间片内完成flag值的修改,则启动的时候执行的都是obj中的代码,达不到验证同步的目的
  8.         mt.flag = true
  9.         new Thread(mt).start(); 
  10.         
  11.  
  12.     } 
  13.  
  14. class MyThread implements Runnable { 
  15.     private Logger logger; 
  16.     private Object object = new Object(); 
  17.     public boolean flag   = false
  18.  
  19.     public MyThread() { 
  20.         super(); 
  21.         DOMConfigurator.configure(this.getClass().getClassLoader() 
  22.                 .getResource("com/alibaba/thread/log4j.xml")); 
  23.         logger = LoggerFactory.getLogger(this.getClass().getName()); 
  24.     } 
  25.  
  26.     private int ticket = 100
  27.  
  28.     /* 
  29.      * (non-Javadoc) 
  30.      * @see java.lang.Runnable#run() 
  31.      */ 
  32.     public void run() { 
  33.  
  34.         if (flag == false) { 
  35.             while (true) { 
  36.                 sell(); 
  37.             } 
  38.         } else { 
  39.             while (true) { 
  40.                 synchronized (this) { 
  41.                     if (ticket > 0) { 
  42.                         try { 
  43.                             Thread.sleep(10); 
  44.                         } catch (InterruptedException e) { 
  45.                             e.printStackTrace(); 
  46.                         } 
  47.                         if (logger.isInfoEnabled()) { 
  48.                             logger.info("obj: " + Thread.currentThread().getName() + " sell: " 
  49.                                     + ticket--); 
  50.                         } 
  51.                     } else { 
  52.                         return
  53.                     } 
  54.                 } 
  55.             } 
  56.         } 
  57.  
  58.     } 
  59.  
  60.     public synchronized void sell() { 
  61.         if (ticket > 0) { 
  62.             try { 
  63.                 Thread.sleep(10); 
  64.             } catch (InterruptedException e) { 
  65.                 e.printStackTrace(); 
  66.             } 
  67.             if (logger.isInfoEnabled()) { 
  68.                 logger.info("syn: " + Thread.currentThread().getName() + " sell: " + ticket--); 
  69.             } 
  70.         } else { 
  71.             return
  72.         } 
  73.     } 
  74.