最近为了完成开发一个后台通过串口接收网络拓扑和传感数据,并显示网络拓扑和收到的数据的任务,又重新回顾下java。大学时代曾经学过这么课程。现在基本的任务完成了,来做一个自己关于java方面的一些总结吧。
1:java虚拟机。首先要理解java虚拟机。Java虚拟机是编译和运行Java程序等的各种命令及其运行环境的总称,这是比较正规的定义。我们可以把Java虚拟机理解为在操作系统提供的系统调用的基础上,有一个包围操作系统的层次,就是java虚拟计算机,简称java虚拟机,我们的java程序就是在这个层次之上的,不和操作系统有任何关系。
2:变量。这个是编程语言的核心概念。Java的类也可以理解为一种广义上的变量。
3:面向对象的编程。这个也不说了。
4:文件与数据流。与C语言的输入输出相比,JAVA的输入输出从使用上来说,相对简单点。C语言采用文件指针,操作系统采用文件描述符,JAVA采用输出输出类。InputStream, OutputStream, Reader, Writer以及继承自这几个抽象类的一些子类。FileInputStream, BufferedInputStream,DataInputStream, InputReader, BufferedInputReader等等。其中Reader,Writer系列处理文本文件较方便。InputStream, OutputStream系列处理字节流。 串口的读取也是转换成这些类。
5:异常处理。让程序在运行时,能够动态的捕捉到出现异常的情况,利于程序的调试维护和运行时的出错处理能力。
6:多线程。Java的多线程编程,通过类的同步函数和同步语句块来实现加锁机制和线程的交互协作。Synchronized , wait, notify, 对象等候集等概念。
7:网络套接字方面。基本的URL类。TCP,UDP,套接字编程。
8:图形界面。容器,组件,事件对象,事件监听器,事件处理等。
下面附上一点程序。
第一个程序:是用JAVA实现的一个生产者消费者问题。
程序有三个线程。主线程ProviderConsumer,生产者线程Provider,消费者线程Consumer。然后他们共同拥有一个在堆上的全局共有对象m_data。当然这个程序只是一个抽象的例子,实际做的是一个线程从串口读取网络拓扑和传感数据,另外一个线程实时的在屏幕上更新显示拓扑图和传感数据。
class ExpData
{
/**
* @param args
*/
public boolean m_ready=false;
public int m_pressure;
public synchronized void mb_update(int data)
{
if(m_ready==true)
{
System.out.println("等待数据消费之后才可以更新...");
try
{
wait();
}
catch(Exception e)
{
e.printStackTrace();
System.err.println(e);
}
}
m_pressure=data;
System.out.println("压力数据"+m_pressure+"更新成功");
m_ready=true;
notify();
}
public synchronized void mb_analyze()
{
if(m_ready==false)
{
System.out.println("等待数据更新之后才可以消费...");
try
{
wait();
}
catch(Exception e)
{
e.printStackTrace();
System.err.println(e);
}
}
System.out.println("压力数据"+m_pressure+"成功得到分析");
m_ready=false;
notify();
}
}
class Provider extends Thread
{
public ExpData m_data;
public Provider(ExpData data)
{
m_data=data;
}
public void run()
{
System.out.println("生产者线程开始工作");
for(int i=0;i<3;i++)
{
m_data.mb_update(10);
}
System.out.println("生产者线程工作完成");
}
}
class Consumer extends Thread
{
public ExpData m_data;
public Consumer(ExpData data)
{
m_data=data;
}
public void run()
{
System.out.println("消费者线程开始工作");
for(int i=0;i<3;i++)
{
m_data.mb_analyze();
}
System.out.println("消费者线程工作完成");
}
}
public class ProviderConsumer
{
/**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
ExpData m_data= new ExpData();//生存者和消费者共同处理的数据
Provider provider=new Provider(m_data);
Consumer consumer=new Consumer(m_data);
consumer.start();
provider.start();
}
}