Java基础知识回顾-5 常用基础类
2011-06-10 00:02
645 查看
1、排序与查找
使用Arrays可以对数组进行排序与查找操作。Arrays.
排序和查找:
2、封装类和基本类型转换
3、反射动态获取含参数的构造函数以及创建对象
4、获取运行时相关信息、进程相关信息:Runtime类、Process类
5、Socket编程
TCP编程:
Server端先启动,并处于阻塞状态。步骤:绑定端口、调用accept方法处于监听状态、输入输出流进行交互、关闭各项资源
Client启动,并连接到Server。步骤:开启到某ip和端口的连接、输入输出流进行交互、关闭各项资源
改进版:多线程server,持续运行
UDP编程:
接收端编程:UDPReceiver
发送端编程:UDPSender
6、文件操作
创建与操作系统无关的文件
【注意】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变量进行控制
(2)使用break语句退出循环
9、序列化对象
前提:对象必须实现Serializable接口,含有不能被序列化的对象时申明为transient,静态成员变量不能被序列化
例如,要写入可通过 ObjectInputStream 中的示例读取的对象,请执行以下操作:
例如,要从由 ObjectOutputStream 中的示例写入的流读取:
10、多线程下,同步方法使用的是this监视器,可以与this同步块进行同步,其他对象(如obj)则不可以。
使用Arrays可以对数组进行排序与查找操作。Arrays.
sort(Object[] a)可以对实现了Comparable接口的对象进行排序;使用
binarySearch(Object[] a, Object key)将可以对已经排序好了的对象数组进行二分法查找。实例如下:
class Student implements Comparable { int num; String name; Student(int num,String name) { this.num=num; this.name=name; } public String toString() { return "number="+num+","+"name="+name; } public int compareTo(Object o) { Student s=(Student)o; //return num>s.num ? 1 : (num==s.num ? 0 : -1); int result=num>s.num ? 1 : (num==s.num ? 0 : -1); if(0==result) { result=name.compareTo(s.name); } return result; } }
排序和查找:
Student[] ss=new Student[]{new Student(1,"zhangsan"), new Student(2,"lisi"), new Student(3,"wangwu"), new Student(3,"mybo")}; Arrays.sort(ss); for(int i=0;i<ss.length;i++) { System.out.println(ss[i]); } int index=Arrays.binarySearch(ss,new Student(2,"lisi")); System.out.println("index="+index); System.out.println(ss[index]); }
2、封装类和基本类型转换
int i=3; Integer in=new Integer(i); int j=in.intValue(); System.out.println("j="+j); String str=in.toString(); System.out.println("str="+str); String str2="134"; System.out.println(Integer.valueOf(str2));
3、反射动态获取含参数的构造函数以及创建对象
Class c=Class.forName(args[0]); Constructor[] cons=c.getDeclaredConstructors(); /*for(int i=0;i<cons.length;i++) { System.out.println(cons[i]); } Method[] ms=c.getDeclaredMethods(); for(int i=0;i<ms.length;i++) { System.out.println(ms[i]); }*/ Class[] params=cons[0].getParameterTypes(); Object[] paramValues=new Object[params.length]; for(int i=0;i<params.length;i++) { if(params[i].isPrimitive()) { paramValues[i]=new Integer(i+3); } } Object o=cons[0].newInstance(paramValues); Method[] ms=c.getDeclaredMethods(); ms[0].invoke(o,null);
class Point { static { System.out.println("Loading Point"); } int x,y; void output() { System.out.println("x="+x+","+"y="+y); } Point(int x,int y) { this.x=x; this.y=y; } }
4、获取运行时相关信息、进程相关信息:Runtime类、Process类
Runtime rt=Runtime.getRuntime(); System.out.println(rt.freeMemory()); System.out.println(rt.totalMemory()); try { //rt.exec("notepad"); Process p=rt.exec("javac ArrayTest.java"); InputStream is=p.getInputStream(); int data; while((data=is.read())!=-1) { System.out.print((char)data); }
5、Socket编程
TCP编程:
Server端先启动,并处于阻塞状态。步骤:绑定端口、调用accept方法处于监听状态、输入输出流进行交互、关闭各项资源
public class ServerService { public static void main(String[] args) throws Exception { ServerSocket ss = new ServerSocket(6000); Socket s = ss.accept(); OutputStream os = s.getOutputStream(); os.write("welcome client, this is server!".getBytes()); InputStream is = s.getInputStream(); byte[] b = new byte[100]; int len = is.read(b); System.out.println(new String(b,0, len)); is.close(); os.close(); s.close(); ss.close(); } }
Client启动,并连接到Server。步骤:开启到某ip和端口的连接、输入输出流进行交互、关闭各项资源
public class Client { public static void main(String[] args) throws Exception { Socket s = new Socket("127.0.0.1", 6000); OutputStream os = s.getOutputStream(); os.write("hello server, this is client!".getBytes()); InputStream is = s.getInputStream(); byte[] b = new byte[100]; int len = is.read(b); System.out.println(new String(b, 0, len)); is.close(); os.close(); s.close(); } }
改进版:多线程server,持续运行
public class ServerService { public static void main(String[] args) throws Exception { ServerSocket serverSocket = new ServerSocket(6000); Server server = new Server(serverSocket); new Thread(server).start(); } } class Server implements Runnable { private ServerSocket serverSocket; public Server(ServerSocket serverSocket) { this.serverSocket = serverSocket; } @Override public void run() { Socket s = null; try { while(true){ s = serverSocket.accept(); OutputStream os = s.getOutputStream(); os.write("welcome client, this is server!".getBytes()); InputStream is = s.getInputStream(); byte[] b = new byte[100]; int len = is.read(b); System.out.println(new String(b, 0, len)); is.close(); os.close(); s.close(); } } catch (IOException e) { e.printStackTrace(); } } }
UDP编程:
接收端编程:UDPReceiver
public class UDPReceiver { public static void main(String[] args) { try { DatagramSocket ds = new DatagramSocket(6000); byte[] buf = new byte[100]; DatagramPacket dp = new DatagramPacket(buf, 100); ds.receive(dp); System.out.println(new String(buf, 0, dp.getLength())); ds.close(); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
发送端编程:UDPSender
public class UDPSender { public static void main(String[] args) { try { DatagramSocket ds = new DatagramSocket(); String str = "hello, this is zhangsan"; DatagramPacket dp = new DatagramPacket(str.getBytes(), str.length(), InetAddress.getByName("localhost"), 6000); ds.send(dp); ds.close(); } catch (SocketException e) { e.printStackTrace(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
6、文件操作
创建与操作系统无关的文件
File fDir=new File(File.separator); String strFile="JavaLesson"+File.separator+"Lesson7"+ File.separator+"1.txt"; File f=new File(fDir,strFile); 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变量进行控制
private boolean flag = true; @Override public void run(){ while(flag){ //... } } public void stopThread(){ flag = false; }
(2)使用break语句退出循环
@Override public void run(){ while(true){ if(...) break; //退出循环 } }
9、序列化对象
前提:对象必须实现Serializable接口,含有不能被序列化的对象时申明为transient,静态成员变量不能被序列化
ObjectOutputStream os = new ObjectOutputStream(); 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)则不可以。
public class Demo01 { public static void main(String[] args) throws Exception { MyThread mt = new MyThread(); new Thread(mt).start(); Thread.sleep(10); //必须等待,否则主线程会在自己的时间片内完成flag值的修改,则启动的时候执行的都是obj中的代码,达不到验证同步的目的 mt.flag = true; new Thread(mt).start(); } } class MyThread implements Runnable { private Logger logger; private Object object = new Object(); public boolean flag = false; public MyThread() { super(); DOMConfigurator.configure(this.getClass().getClassLoader() .getResource("com/alibaba/thread/log4j.xml")); logger = LoggerFactory.getLogger(this.getClass().getName()); } private int ticket = 100; /* * (non-Javadoc) * @see java.lang.Runnable#run() */ public void run() { if (flag == false) { while (true) { sell(); } } else { while (true) { synchronized (this) { if (ticket > 0) { try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } if (logger.isInfoEnabled()) { logger.info("obj: " + Thread.currentThread().getName() + " sell: " + ticket--); } } else { return; } } } } } public synchronized void sell() { if (ticket > 0) { try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } if (logger.isInfoEnabled()) { logger.info("syn: " + Thread.currentThread().getName() + " sell: " + ticket--); } } else { return; } } }
相关文章推荐
- Java基础知识:带你快速回顾常用基础知识
- 分享Java基础知识:带你快速回顾常用基础知识
- Java学习第五天及基础知识回顾
- Java基础知识强化之网络编程笔记21:Android网络通信之 Android常用OAuth登录(获取令牌信息)
- java基础知识回顾之java Thread类--java线程实现常见的两种方式实现Runnable接口(二)
- java基础知识回顾之---java String final类普通方法
- java基础知识回顾----流程控制
- Java基础知识回顾--IO流
- 【Java基础】常用知识积累(一)
- 黑马程序员——java基础知识回顾(一)(java语言基础组成)
- Java基础知识:常用API
- java基础知识回顾之java Thread类学习(七)--java多线程安全问题(死锁)
- Java基础知识回顾-7
- Android框架常用java基础知识:反射,注解,动态代理
- java基础知识回顾之javaIO类--File类应用:递归深度遍历文件
- Java基础知识回顾之四 ----- 集合List、Map和Set
- Java基础回顾 : 文件类中的一些常用的方法
- java基础知识回顾---单例模式的三种实现
- Java基础知识的回顾
- JAVA基础知识回顾一 基本类型、类型转化