[Java Basics2] Iterable, Socket, Reflection, Proxy

Parent interface of Collection: Iterable Interface

A class that implements the Iterable can be used with the new for-loop.

The Iterable interface has only one method:

public interface Iterable<T> {
  public Iterator<T> iterator();
}

It is possible to use your own collection type classes with the new for-loop. To do so, your class must implement thejava.lang.Iterable<E> interface. Here is a very basic example:

public class MyCollection<E> implements Iterable<E>{

    public Iterator<E> iterator() {
        return new MyIterator<E>();
    }
}

And here is the corresponding implementation skeleton of the MyIterator class:

public class MyIterator <T> implements Iterator<T> {

    public boolean hasNext() {

        //implement...
    }

    public T next() {
        //implement...;
    }

    public void remove() {
        //implement... if supported.
    }
}

迭代器应用: list l = new ArrayList(); l.add("aa"); l.add("bb"); l.add("cc"); for (Iterator iter = l.iterator(); iter.hasNext();) {  String str = (String)iter.next();  System.out.println(str); }

Java sockets

A socket is one end-point of a two-way communication link between two programs running on the network. Socket classes are used to represent the connection between a client program and a server program. The java.net package provides two classes--Socket and ServerSocket--that implement the client side of the connection and the server side of the connection, respectively.

总: Client[port] <----->Server[listening port, communication port] ,

Server side: ServerSocket serverSocket = new ServerSocket(5000);  //Server will be listening to requests from clients on port 5000

Client side: Socket chatSocket = new Socket("192.1.168.100", 5000);  //The server is running on port 5000 at 192.1.168.100

Socket sock = serverSocket.accept();  //Server will return a new port to communicate with clients

InputStreamReader reader = new InputStreamReader(chatSocket.getInputStream());

BufferedReader breader = new BufferedReader(reader);

String msg = breader.readLine();

Reflection

1, Get Class: 如果compile time已知class,那可以A.class。如果runtime才知class name,那可以Class.forName("className");

Get Class以后就可以获取这个Class的所有信息,例如.getMethods(), .getConstructors(), .getInterfaces(), .getFields(), .getAnnotations()...

2, Get constructor以后可以Instantiate object:

Constructor constructor=A.class.getConstructor(String.class);

A a= (A) constructor.newInstance("StringArgument");

3, Get fields以后可以get 或set object里的这个field:

Field someField = A.class.getField("FieldName");  //.getField()方法只能获取public fields

A a = new A();

Object value = someField.get(a);

someField.set(a, value);

4,Get method以后可以invoke这个method on some object:

Method method = A.class.getMethod("MethodName", String.class);  //.getMethod()方法只能获取public methods

Object returnValue = method.invoke(new A(), "StringArgument");

5, Get private field/method

Field privateField = A.class.getDeclaredField("FieldName");  //or .getDeclaredMethod("MethodName");

privateField.setAccessible(true);

Object fieldValue = privateField.get(new A());

6, Get annotations

Annotations可以是在class上,或者method, field, parameter上...

在定义自己的@interface的时候,如果@Retention(RetentionPolicy.RUNTIME)表示在runtime时可以获取这个annotation.

Annotation annotation = A.class.getAnnotation(MyAnnotation.class);

if(annotation instanceof MyAnnotation) {annotation.getName();...}

Proxy

To create dynamic implementations of interface at runtime with the help of reflection.

InvocationHandler handler = new MyInvocationHandler(); //implement .invoke()方法

MyInterface proxy = (MyInterface) Proxy.newProxyInstance(MyInterface.class.getClassLoader(), new Class[] {MyInterface.class}, handler);

asd

时间: 2024-10-11 18:22:12

[Java Basics2] Iterable, Socket, Reflection, Proxy的相关文章

java.net.SocketException: socket closed

在使用socket编程的时候,发现当使用完getInputStream方法后,再获取OutputStream就会报 java.net.SocketException: socket closed错误 看到JAVA api中写到 java.net.Socket.getInputStream方法: getInputStream public InputStream getInputStream()throws IOException 返回此套接字的输入流. 如果此套接字具有关联的通道,则所得的输入流

读懂Java中的Socket编程(转)

Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的Socket编程,并且如何写一个客户端/服务器程序. 餐前甜点 Unix的输入输出(IO)系统遵循Open-Read-Write-Close这样的操作范本.当一个用户进程进行IO操作之前,它需要调用Open来指定并获取待操作文件或设备读取或写入的权限.一旦IO操作对象被打开,那么这个用户进程可以对这个

java网络编程socket解析

转载:http://www.blogjava.net/landon/archive/2013/07/02/401137.html Java网络编程精解笔记2:Socket详解 Socket用法详解 在C/S通信模式中,client需要主动创建于server连接的Socket(套接字).服务器端收到了客户端的连接请求,也会创建与客户连接的Socket.Socket可看做是通信两端的收发器.server与client都通过Socket来收发数据. 1.构造Socket 1.Socket() 2.So

Java TCP/UDP socket 编程流程总结

最近正好学习了一点用java socket编程的东西.感觉整体的流程虽然不是很繁琐,但是也值得好好总结一下. Socket Socket可以说是一种针对网络的抽象,应用通过它可以来针对网络读写数据.就像通过一个文件的file handler就可以都写数据到存储设备上一样.根据TCP协议和UDP协议的不同,在网络编程方面就有面向两个协议的不同socket,一个是面向字节流的一个是面向报文的. 对socket的本身组成倒是比较好理解.既然是应用通过socket通信,肯定就有一个服务器端和一个客户端.

Java反射机制(Reflection)

Java反射机制(Reflection) 一.反射机制是什么 Java反射机制是程序在运行过程中,对于任意一个类都能够知道这个类的所有属性和方法;对于任意一个对象都能够调用它的任意一个方法和属性,这种动态获取类信息以及动态调用对象方法的功能就是JAVA语言的反射机制. 二.反射机制能干什么 (1)在运行时判断任意一个对象所属的类 (2)在运行时构造任意一个类的对象 (3)在运行时判断任意一个类所具有的成员变量和方法 (4)在运行时调用任意一个对象的方法 (PS:注意反射机制都是在程序运行时,而不

java.lang.Exception: Socket bind failed: [730048]

严重: Error initializing endpoint java.lang.Exception: Socket bind failed: [730048] ?????????×???(Э?é/???????/???)????í?? at org.apache.tomcat.util.net.AprEndpoint.init(AprEndpoint.java:576) at org.apache.coyote.http11.Http11AprProtocol.init(Http11AprP

java网络编程socket\server\TCP笔记(转)

java网络编程socket\server\TCP笔记(转) 2012-12-14 08:30:04|  分类: Socket |  标签:java  |举报|字号 订阅 1 TCP的开销 a  连接协商三次握手,c->syn->s,s->syn ack->c, c->ack->s b  关闭协商四次握手,c->fin->s, s->ack-c,s->fin->c,c->ack->s c  保持数据有序,响应确认等计算开销 d

java.lang.Exception: Socket bind failed

1.错误描述 严重: Failed to initialize end point associated with ProtocolHandler ["http-apr-8080"] java.lang.Exception: Socket bind failed: [730048] ?????????×???(Э?é/???????/???)????í?? at org.apache.tomcat.util.net.AprEndpoint.bind(AprEndpoint.java:4

android的NDK和java进行本地socket通信

关于Android应用与Framework的socket通信,相信关心这个问题的朋友们已经看过<android使用socket使底层和framework通信>这篇文章,美中不足的是作者只贴出一些关键的代码片段而并没有放出源码.我这里还是以一个能实际运行的例子为基础来讲,这样也方便大家学习. 首先看一下效果,如下图.我填写姓名"Potter",选择性别"Mr"然后点击发送,底层socket收到消息后将消息直接返回给我,我将返回的结果(Mr.Potter)直