Java第一篇

一、知识点小节
  @author MrSun
  1、安装JDK一般不需要设置环境变量classpath = "D:\jdk1.8\jre\lib\rt.jar;.;"
  2、基本数据类型从低到高:byte  short  char  int  long  float  double
  3、(dog  instanceof  animal.class)判断左边的对象是否是右边的类或子类创建的对象;
  4、UML:三层(1层、常规字体,表示具体类的名字;斜体表示抽象类的名字;2层、成员变量;3层、类中方法的名字)
  5、子类不继承父类的构造方法,可以用super()调用父类的构造方法;
  6、如果子类重写了父类的静态方法,那么子类对象的上转型对象不能调用子类重写的静态方法,只能调用父类的静态方法
  7、接口中的只有常量(默认public static final修饰),只能有抽象方法;
  8、abstract类和接口的比较:
     (1)abstract类和接口都可以有abstrat方法;
     (2)abstract类中既可以有常量也可以有变量,接口中只能有常量;
     (3)abstract类中也可以有非abstract方法,接口中只能有abstract方法;
  9、接口回调,指把实现某一接口的实例对象(实现这个接口的类创建的对象)赋值给接口声明的变量,用这个变量调用实例对象(实现这个接口的类创建的对象)中实现接口中的方法;
 10、进程是操作系统中一个小单元,线程是进程中的一个小单元;(线程之间1、新建;2、运行;3、中断;和4、死亡的顺序);

 11、地址的表示1、域名(www.baidu.com);2、IP地址(202.108.35.210);

Java程序设计实用教程(源码以及电子教案:www.ptpedu.com.cn)

二、用UDP实现张三和李四对话的例子

张三的代码:

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

public class ZhangSan {
    public static void main(String args[]) {
          Scanner scanner = new Scanner(System.in);
          Thread readData ;
          ReceiveLetterForZhang receiver = new ReceiveLetterForZhang();
          try{ readData = new Thread(receiver);
                readData.start();           //负责接收信息的线程
                byte [] buffer=new byte[1];
                InetAddress address=InetAddress.getByName("127.0.0.1");
                DatagramPacket dataPack=
                new DatagramPacket(buffer,buffer.length, address,666);
                DatagramSocket postman=new DatagramSocket();
                System.out.print("输入发送给李四的信息:");
                while(scanner.hasNext()) {
                    String mess = scanner.nextLine();
                    buffer=mess.getBytes();
                    if(mess.length()==0)
                        System.exit(0);
                    buffer=mess.getBytes();
                    dataPack.setData(buffer);
                    postman.send(dataPack);  
                    System.out.print("继续输入发送给李四的信息:");
                }
           }
           catch(Exception e) {
                System.out.println(e);
           }
       }
}


import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class ReceiveLetterForZhang implements Runnable{
    public void run() {
          DatagramPacket pack=null;
          DatagramSocket postman=null;
          byte data[]=new byte[8192];
          try{  pack=new DatagramPacket(data,data.length);
                postman = new DatagramSocket(888);
          }
          catch(Exception e){}
          while(true) {  
            if(postman==null) break;
            else
              try{ postman.receive(pack);
                   String message=new String(pack.getData(),0,pack.getLength());
                   System.out.printf("%25s\n","收到:"+message);
              }
              catch(Exception e){}
          }
       }
}

李四的代码:

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

public class LiSi {
     public static void main(String args[]) {
          Scanner scanner = new Scanner(System.in);
          Thread readData ;
          ReceiveLetterForLi receiver = new ReceiveLetterForLi();
          try{  readData = new Thread(receiver);
                readData.start();           //负责接收信息的线程
                byte [] buffer=new byte[1];
                InetAddress address=InetAddress.getByName("127.0.0.1");
                DatagramPacket dataPack=
                new DatagramPacket(buffer,buffer.length, address,888);
                DatagramSocket postman=new DatagramSocket();
                System.out.print("输入发送给张三的信息:");
                while(scanner.hasNext()) {
                    String mess = scanner.nextLine();
                    buffer=mess.getBytes();
                    if(mess.length()==0)
                        System.exit(0);
                    buffer=mess.getBytes();
                    dataPack.setData(buffer);
                    postman.send(dataPack);  
                    System.out.print("继续输入发送给张三的信息:");
                }
           }
           catch(Exception e) {
                System.out.println(e);
           }
       }
}


import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class ReceiveLetterForLi implements Runnable {
    public void run() {
          DatagramPacket pack=null;
          DatagramSocket postman=null;
          byte data[]=new byte[8192];
          try{  pack=new DatagramPacket(data,data.length);
                postman = new DatagramSocket(666);
          }
          catch(Exception e){}
          while(true) {  
            if(postman==null) break;
            else
              try{ postman.receive(pack);
                   String message=new String(pack.getData(),0,pack.getLength());
                   System.out.printf("%25s\n","收到:"+message);
              }
              catch(Exception e){}
          }
       }
}


三、用Socket实现客户端和服务器之间交互(计算圆的面积)

客户端代码:

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.InputMismatchException;
import java.util.Scanner;

public class Client {
    public static void main(String args[]) {
          Scanner scanner = new Scanner(System.in);
          Socket mysocket=null;
          DataInputStream in=null;
          DataOutputStream out=null;
          Thread readData ;
          Read read=null;
          try{  mysocket=new Socket();
                read = new Read();
                readData = new Thread(read);
                System.out.print("输入服务器的IP:");
                String IP = scanner.nextLine();
                System.out.print("输入端口号:");
                int port = scanner.nextInt();
                if(mysocket.isConnected()){}
                else{
                  InetAddress  address=InetAddress.getByName(IP);
                  InetSocketAddress socketAddress=new InetSocketAddress(address,port);
                  mysocket.connect(socketAddress);
                  in =new DataInputStream(mysocket.getInputStream());
                  out = new DataOutputStream(mysocket.getOutputStream());
                  read.setDataInputStream(in);
                  readData.start();
                }
           }
           catch(Exception e) {
                System.out.println("服务器已断开"+e);
           }
           System.out.print("输入园的半径(放弃请输入N):");
           while(scanner.hasNext()) {
               double radius=0;
               try {
                   radius = scanner.nextDouble();
               }
               catch(InputMismatchException exp){
                  System.exit(0);
               }   
               try {
                   out.writeDouble(radius);
               }
               catch(Exception e) {}
           }
       }
}

中间线程代码Read类:

import java.io.DataInputStream;
import java.io.IOException;

public class Read implements Runnable {
     DataInputStream in;
       public void setDataInputStream(DataInputStream in) {
          this.in = in;
       }
       public void run() {
          double result=0;
          while(true) {
            try{ result=in.readDouble();
                 System.out.println("圆的面积:"+result);
                 System.out.print("输入园的半径(放弃请输入N):");
            }
            catch(IOException e) {
                 System.out.println("与服务器已断开"+e);
                 break;
            }   
          }
       }
}

服务端代码:

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

    public static void main(String[] args) {
         ServerSocket server=null;
          ServerThread thread;
          Socket you=null;
          while(true) {
            try{  server=new ServerSocket(2010);
            }
            catch(IOException e1) {
                  System.out.println("正在监听"); //ServerSocket对象不能重复创建
            }
            try{  System.out.println(" 等待客户呼叫");
                  you=server.accept();
                  System.out.println("客户的地址:"+you.getInetAddress());
            }
            catch (IOException e) {
                  System.out.println("正在等待客户");
            }
            if(you!=null) {
                  new ServerThread(you).start(); //为每个客户启动一个专门的线程  
            }
          }
       }
    }
    class ServerThread extends Thread {
       Socket socket;
       DataOutputStream out=null;
       DataInputStream  in=null;
       String s=null;
       ServerThread(Socket t) {
          socket=t;
          try {  out=new DataOutputStream(socket.getOutputStream());
                 in=new DataInputStream(socket.getInputStream());
          }
          catch (IOException e){}
       }  
       public void run() {        
          while(true) {
             try{  double r=in.readDouble();//堵塞状态,除非读取到信息
                   double area=Math.PI*r*r;
                   out.writeDouble(area);
             }
             catch (IOException e) {
                   System.out.println("客户离开");
                    return;
             }
          }
    }

}

Java第一篇