黑马程序员--基础复习2012.8.5

来源:互联网 发布:射手影音 for mac 编辑:程序博客网 时间:2024/05/17 02:01
---------------------- android培训、java培训、期待与您交流! ----------------------

       网络编程

      

OSI

       应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

TCP/IP    应用层(数据段)、传输层(数据包)、网络互连层(数据帧)、主机到网络层(比特)

传输协议:通讯规则

       UDP

1将数据及源和目的封装在数据包中,不需要建立连接(面向无连接)

2每个数据报的大小限制在64k

3因无连接,是不可靠协议

4不需要建立连接,速度快

       TCP

              1建立连接,形成传输数据通道

              2在建立连接中进行大数据量传输

              3通过三次握手完成连接,是可靠协议

              4必须建立连接效率会低

 

 

 

 

import java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

 

/*

 * 定义udp协议数据传输的接收端

 */

/*

 * 1,定义udpsocket服务

 * 2,定义一个数据包,因为要存储接收到的字节数

 * 3,通过socket服务receive方法将接收到的数据存入已定义好的数据包上

 * 4,通过数据包对象的特有功能,取出数据

 * 5,关闭资源

 */

public class UdpReceive {

       publicstatic void main(String[] args) throws IOException {

              //1,创建udp socket,建立端点

              DatagramSocketds = new DatagramSocket(10000);

             

              //2,定义数据包,用于存储数据

              byte[]buf = new byte[1024];

              DatagramPacketdp = new DatagramPacket(buf, buf.length);

              //3,通过socket服务receive方法将接收到的数据存入已定义好的数据包上

              ds.receive(dp);

              //4,通过数据包对象的特有功能,取出数据

              Stringip = dp.getAddress().getHostAddress();

             

              Stringdata = new String(dp.getData(),0,dp.getLength());

             

              intport = dp.getPort();

              System.out.println("ip:"+ ip +"port:" +  port +"data:" + data );

             

               // 5,关闭资源

              ds.close();

       }

}

 

/*

 * 定义udp协议数据传输的发送端

 */

 

publicclass UdpSend {

 

    publicstaticvoid main(String[] args)throws IOException {

       //TODO Auto-generatedmethod stub

       //1,创建udp服务,通过DatagramSocket对象

       DatagramSocket ds = new DatagramSocket();

       //2,确定数据

       byte[] buf ="udp sendclient".getBytes();

       DatagramPacket dp =

           new DatagramPacket(buf,buf.length, InetAddress.getByName("127.0.0.1"),10000);

       //3,通过socket服务,将已有的数据包发送出去,通过send()方法;

       ds.send(dp);

       //4,关闭资源

       ds.close();

    }

 

}

 

 

class TcpClient2{

    publicstaticvoid main(String[] args)throws IOException{

       //建立socket服务。指定要连接主机和端口

       Socket s = new Socket("127.0.0.1",10004);

       //获取socket流中的输出流

       OutputStream out = s.getOutputStream();

       //将数据写到该流中

       out.write("服务端,你好".getBytes());

       //获取socket输入流

       InputStream in = s.getInputStream();

      

       byte[] buf =newbyte[1024];

       //将服务端反馈的信息获取到

       int len = in.read(buf);

       //打印

       System.out.println(s.getInetAddress() +":" + new String(buf,0,len));

       //关闭资源

       s.close();

    }

}

class TcpServer2{

    publicstaticvoid main(String[] args)throws IOException{

       //建立服务端的Socket服务并监听端口

       ServerSocket ss = new ServerSocket(10004);

       //通过ServerSocketaccept方法获取连接过来的客户端对象

       Socket s = ss.accept();

       //获取socket输入流

       InputStream in = s.getInputStream();

      

       byte[] buf =newbyte[1024];

       //读取输入流信息

       int len = in.read(buf);

       //输出信息

       System.out.println(s.getInetAddress() +":" + new String(buf,0,len));

       //读取输出流

       OutputStream out = s.getOutputStream();

       //想输出流中写入数据

       out.write("哥们你也好".getBytes());

       //关闭资源

       s.close();

    }

}

 

反射,反射就是把java类中的各种成分映射成相应的java类。

获取字节码

    String string = "abc";

    Class cls1 = string.getClass();

    Class cls2 = String.class;

    Classcls3 = Class.forName("java.lang.String");

 

JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性。众所周知,属性名称符合这种模式,其他Java 类可以通过自身机制发现和操作这些JavaBean 属性。

privatestaticvoidsetProperty(Object obj, String propertyName,

Objectvalue) throwsIntrospectionException,

IllegalAccessException,InvocationTargetException {//根据对象和属性名,设置对象的属性值

PropertyDescriptorpd = newPropertyDescriptor(propertyName,obj.getClass());//获取属性描述

MethodmethodSetX = pd.getWriteMethod();//抽取方法

methodSetX.invoke(obj,value);//调用方法设置

}

privatestaticObject getProperty(Object obj,

StringpropertyName) throwsIntrospectionException,

IllegalAccessException,InvocationTargetException {//根据对象和属性名,获取对象的属性值

// PropertyDescriptorpd = new PropertyDescriptor(propertyName,obj.getClass());//获取属性描述

// MethodmethodGetX = pd.getReadMethod();//抽取方法

// ObjectretVal= methodGetX.invoke(obj);//调用方法取值

 

BeanInfobeanInfo = Introspector.getBeanInfo(obj.getClass());//获取BeanInfo

PropertyDescriptor[]pds =beanInfo.getPropertyDescriptors();//获取所有的属性描述

ObjectretVal = null;

for(PropertyDescriptorpd:pds){//遍历属性描述

if(pd.getName().equals(propertyName)){//如果找到需要的属性名

MethodmethodGetX = pd.getReadMethod();//获取方法

retVal= methodGetX.invoke(obj);//调用方法取值

break;

}

}

returnretVal;

}

 

 

Java5新特性

1,静态导入

2,增强for循环

3,基本数据类型的自动拆箱与装箱

4,枚举

    枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。如果枚举只有一个成员时,就可以作为一种单例的实现。

5,注解

    相当于一种标记,在程序中加了注解就等于为程序打上了某种标记。可以用反射来了解类的各种元素上有无标记,加的是何种标记。可以加在包、类、方法、变量等

    注解类似接口@interface

    属性类似方法 String color();

6,泛型

    泛型是提供给javac编译器使用的,可以限定集合中的输入类型,让编译器挡住源程序中的非法输入,编译器编译带类型说明的集合时会去除掉类型的信息,使程序运行效率不受影响,对于参数化的泛型类型,getClass方法返回值和原始类型完全一样。由于编译生成的字节码会去掉泛型的类型信息,只要能跳过编译器就可以往某个泛型集合中加入其他类型的数据,例如用泛型得到集合,再调用其add方法即可

    //通过方法获取泛型类型

publicclass GenericTest {

    publicstaticvoid main(String[] args)throws SecurityException,NoSuchMethodException{

       ArrayList<String> list = new ArrayList<String>();

       Method applyMethod = GenericTest.class.getDeclaredMethod("applyMethod", list.getClass());

       Type[] types = applyMethod.getGenericParameterTypes();

       ParameterizedType pType = (ParameterizedType) types[0];

       System.out.println(pType.getRawType());

       System.out.println(pType.getActualTypeArguments()[0]);

    }

   

    publicstaticvoid applyMethod(ArrayList<String> list){

      

    }

}


---------------------- android培训、java培训、期待与您交流!

----------------------详细请查看:http://edu.csdn.net/heima

原创粉丝点击