@Override public ListIterator<String> listIterator() { thrownewUnsupportedOperationException("不允许调用listIterator方法"); }
@Override public ListIterator<String> listIterator(int index) { thrownewUnsupportedOperationException("不允许调用listIterator方法"); }
@Override public List<String> subList(int fromIndex, int toIndex) { return list.subList(fromIndex, toIndex); } @Override publicvoidsort(Comparator<? super String> c) { thrownewUnsupportedOperationException("不允许调用sort(Comparator<? super String>方法"); }
@Override public Spliterator<String> spliterator() { thrownewUnsupportedOperationException("不允许调用spliterator方法"); }}
} 1.6 Class对象中的三个常用方法 public String getName();//获取全限定类名 public String getSimple();//获取类名 public Object getInstance();//创建Class对象所代表的那个类的对象,底层实际上使用的是该类的无参构造
反射获取成员方法 public Method get Method(String name,Class…args);//获取public方法 public Method get getDeclaredMethod(String name,Class…args);//获取 任意修饰 方法 public Method[] get Methods();//获取所有的public成员,包括父类继承的 public Method[] get getDeclaredMethods();//获取所有任意修饰方法,不包含父类继承的
for (Method method : methods) { if (method.isAnnotationPresent(MyTest.class)) { method.invoke(newDemo()); }else { System.out.println("N Annotation"); } } }}
总结: 反射技术获取Class字节码对象 Class clazz = 类名.class; Class clazz = 对象名.getClass(); Class clazz = Class.forName(“包名”,”类名”);
通过反射技术怄气构造方法对象,并创建对象 获取构造: public Constructor getConstructor(参数的类型.class,…)//获取单个 public 构造 public Constructor getDeclareConstructor(参数的类型.class,…)//获取单个 任意修饰 构造 public Constructor[] getConstructors()//获取所有个 public 构造 public Constructor[] getDeclareConstructors()//获取所有 任意修饰 构造 使用构造: 构造方法对象.newInstance(实际参数); 如果是私有构造: 必须在使用之前设置暴力权限->构造方法对象.getAccessable(true);
反射获取成员方法对象,并调用方法 public Method getMethod(String name,参数的类型.class,…)//获取单个 public 方法 public Method getDeclareMethod(String name,参数的类型.class,…)//获取单个 任意修饰 方法 public Method[] getMethods()//获取所有个 public 方法,包括父类继承的 public Method[] getDeclareMethods()//获取所有 任意修饰 方法,不包含父类的
System.out.println("程序继续执行.."); while (true) { Thread.sleep(1000); }
} }
总结: Selector作用: Selector可以让多个服务器注册到它上,完成多路复用功能
使用Selector选择器 注册: channel.register(selector,SelectionKey.OP_ACCEPT); 方法: //表示所有被连接到服务器通道的集合 public Set selectedKeys(); Set keys = selector.selectedKeys();
//获取所有已经成功注册到选择器的服务器通道集合 public Set keys(); Set keys = selector.keys();
//如果目前没有客户端连接,该方法会阻塞。如果有客户端连接会返回本次连接的客户端数量 public int select(); int count = selector.select();
3.byteBuffer的三种添加数据方式 public ByteBuffer put(byte b);//添加单个字节 public ByteBuffer put(byte b,bs);//添加字节数组 public ByteBuffer put(byte b,bs,int startIndex,int len);//添加一个字节数组中的一部分
8.byteBuffer的其他方法 public int remaining();//获取position与limit之间的元素数 public boolean isReadyOnly();//获取当前缓冲区是否可读 public boolean isDirect();//获取当前缓冲区是否为直接缓冲区 public boolean clear();//还原缓冲区的初始状态
将position设置0 将limit置为capacity 丢弃标记 public Buffer flip();//切换读写模式(缩小范围)
将limit设置为当前position位置 将当前position位置设置为0 丢弃标记 public Buffer rewind();//重绕缓冲区
创建和使用ByteBuffer 创建: public static allocate(int capacity);//在堆区中申请一个固定大小的ByteBuffer缓冲区 public static allocateDirect(int capacity);//在系统的内存中申请一个固定大小字节的ByteBuffer缓冲区 public static wrap(byte[] arr);//把一个字节数组直接包装成ByteBuffer缓冲区 使用: public ByteBuffer put(byte b);//添加单个字节 public ByteBuffer put(byte b,bs);//添加字节数组 public ByteBuffer put(byte b,bs,int startIndex,int len);//添加一个字节数组中的一部分 public int capacity();//获取Buffer容量 buffer.limit(); buffer.position(); buffer.mark(); public int remaining();//获取position与limit之间的元素数 public boolean isReadyOnly();//获取当前缓冲区是否可读 public boolean isDirect();//获取当前缓冲区是否为直接缓冲区 public boolean clear();//还原缓冲区的初始状态 public Buffer flip();//切换读写模式(缩小范围) public Buffer rewind();//重绕缓冲区
总结: TCP协议特点:面向有连接(先建立连接,后建立数据) UDP协议特点:面向无连接(只需要发送数据,不需关心对方是否存在) TCP协议两个常用名称 Socket:客户端类 •构造方法 public Socket(String ip,int port);//服务器IP地址,服务器端口号 •常用方法 public OutputStream getOutputStream();//获取连接通道中的输出流 public InputStream getInputStream();//获取连接通道中的输入流 public void shutDownOutput();//关闭连接通道中的输出流 public void shutDownInput();//关闭连接通道中的输入流 public void close();//关闭客户端对象
ServerSocket:服务器类 •构造方法 public ServerSocket(int port);//指定服务器端使用的端口号 •常用的成员方法 public Socket accept();//接收连接到服务器的Socket对象,如果暂时没有客户端,该方法会阻塞 public Socket close();//关闭服务器对象
4.2 PrintStream的构造和常用方法 构造方法: public PrintStream(String Path);//直接指定路径 public PrintStream(File file);//直接指定文件 public PrintStream(OutputStream out);//先给一个输出流,绑定什么对象就打印到什么对象
成员方法: public void print(各种类型);//不带换行的打印 public void println(各种类型);//带换行的打印
字符输入流 顶层父类:Reader(抽象类) 共性方法: public void close();//释放资源 public int read();//一次读一个char字符,返回字符ASCII码值,为int类型 public int read(char[] chs);//一次读一个char字符数组,返回值表示实际读取的字符个数
FileReader类的使用 文件的字符输入流(从文件中读取字符数据的)
•构造方法 public FileReader(String Path); public FileReader(File file);
字符输出流 顶层父类:Writer(抽象类) 共性方法: public void close();//释放资源 public int flush();//对于字符串游泳 public int write();//一次写一个char字符,返回字符ASCII码值,为int类型 public int write(char[] chs);//一次写一个char字符数组 public int write(char[] chs,int startIndex,int len);//一次写一个char字符数组的一部分
public write(String str);//直接写一个字符串 public write(String str,int startIndex,int len);//直接写一个字符串的一部分
FileWriter类的使用 文件的字符输出流(向文件中写字符数据) •构造方法 public FileWriter(String Path); public FileWriter(File file);
总结: Java四大流: -字节输出流OutputStream: 子类:FileOutputStream public void close();//关闭该流,释放资源 public void flush();//刷新缓冲区(主要字符流使用) public void write(int b);//一次写一个字节,输入是int,但是只能写一个byte的大小,即最大127 public void write(byte[] bs);//一次写一个字节数组 public void write(byte[] bs,int startIndex,int len);//一次写这一个字节数组中的一部分
构造方法三件事: 创建输出流对象 若存在覆盖,若不存在创建 释放资源
-字节输入流InputStream: 子类:FileInputStream public void close();//关闭该流,释放资源 public int read();//一次读一个字节 public int read(byte[] bs);//一次读一个字节数组,返回值表示实际读取的字节个数 public int read(byte[] bs,int startIndex,int len);//一次读一个字节数组的一部分(基本不用)
构造方法三件事: 创建输入流对象 若存在则读取,若不存在报错 释放资源
-字符输出流Writer: 子类:FileWriter public void close();//释放资源 public void flush();//刷新缓冲区
public int write();//一次写一个char字符,返回字符ASCII码值,为int类型 public int write(char[] chs);//一次写一个char字符数组 public int write(char[] chs,int startIndex,int len);//一次写一个char字符数组的一部分 public write(String str);//直接写一个字符串 public write(String str,int startIndex,int len);//直接写一个字符串的一部分
构造方法三件事: 创建字符输出流对象 若存在覆盖,若不存在创建 释放资源
-字符输入流Reader: public void close();//释放资源 public int read();//一次读一个char字符,返回字符ASCII码值,为int类型 public int read(char[] chs);//一次读一个char字符数组,返回值表示实际读取的字符个数
排序的工具类 对数组进行排序:Arrays.sort(array,new Comparator<数组元素类型>);//必须引用类型 对List集合排序:Collections.sort(,new Comparator<集合中元素对类型>); 对Set集合排序: 并不是所有的Set都能排序,TreeSet才能排序:TreeSet set = new TreeSet(new 比较器对象()); TreeSet排序:TreeSet set = new TreeSet(new 比较器对象());//或自己写排序算法:冒泡,选择,插入,希尔,快速,堆,归并…