netty的一些概念
这里面的部分概念参考了《Apress JavaI.O . NIO and NIO2》
Buffer
NIO的一些操作基础就是Buffer
Channels
它的具体作用是帮助 DMA 快速的从硬盘上获取和写入数据
这里面的部分概念参考了《Apress JavaI.O . NIO and NIO2》
NIO的一些操作基础就是Buffer
它的具体作用是帮助 DMA 快速的从硬盘上获取和写入数据
在刚接触Java的时候经常听到的一句话便是在 Java 中,Exception 是可以捕获的,Error 是不可以捕获的。但是在随着学习的深入,会发现有些观点需要重新认识下了。
Throwable 这个类是自 JDK1.0 开始就存在于 Java 的语言之中。
首先引用一段 Oracle 官方文档上对 Throwable 的介绍Java8 Thrwoable的介绍:
The Throwable class is the superclass of all errors and exceptions in the Java language. Only objects that are instances of this class (or one of its subclasses) are thrown by the Java Virtual Machine or can be thrown by the Java throw statement. Similarly, only this class or one of its subclasses can be the argument type in a catch clause. For the purposes of compile-time checking of exceptions, Throwable and any subclass of Throwable that is not also a subclass of either RuntimeException or Error are regarded as checked exceptions.
Instances of two subclasses, Error and Exception, are conventionally used to indicate that exceptional situations have occurred. Typically, these instances are freshly created in the context of the exceptional situation so as to include relevant information (such as stack trace data).
太长,省略大部分了……
简单翻译下就是,Throwable 是 Error 和 Exception 的父类,并且只能是 Error 和 Exception 的实例才可以通过 throw 语句或者 Java虚拟机 抛出异常。Exception 或者 Error 是在出错的情况下新创建的,从而将出错的信息和数据包含进去。
另外在这个文档中还提到了一点就是当低层方法向高层方法抛出异常的时候,如果抛出的异常是受检查的异常,则
首先简单介绍下TreeSet和TreeMap的两种排序:
1 | private static void compareWithCpmparator(){ |
1 | a |
comparator
是空的,Debug一遍,发现这个方法其实调用的是NavigableMap
里面的comparator
1 | public Comparator<? super E> comparator() { |
1 | Comparator super K> comparator() |
comparator
。/**
在使用TreeSet的时候,插入的元素需要实现Comparable这个接口,而刚刚的元素是String,查看String的代码发现:
1 | public final class String implements java.io.Serializable, Comparable<String>, CharSequence { |
确实实现了,再测试一个没有实现的元素:
在Java里面,List转为Array是调用的Java的一个Arrays.copyOf()这个方法,查看了下源代码:
1 | public Object[] toArray() { |
在这里需要注意的是在copyOf()方法中的那个三元表达式,也就是说在这里无论执行的true还是false,都会返回一个新的数组对象。而在这里有一行代码就是((Object)newType == (Object)Object[]).class),这一句看起来没什么,其实可以看参数
Class<? extends T[]> newType和
Object会发现这两个数组对象都被强转成了
Object,而
==`比较符是不能比较不同类型的。例如:
1 | public void te(){ |
上面的代码在代码的编译期就会被提示==
不可以适用于上述的两种情况.如下:
若需要快速的解决乱码问题可以直接看配置文件:
在项目中的web.xml中添加Spring的字符过滤器,配置如下:
1 | <filter> |
由于当时在学习Spring的时候还是在一年前,那时候Spring才是刚到4.3还是4.5.然后做了一个项目之后便了解到了SpringBoot,于是一直在用SpringBoot,所以导致现在配置起来就有点忘记了。所以现在记录下此次配置的过程中所遇到的坑。
第一个坑就是org.springframework.web.servlet.DispatcherServlet
这个类一直找不到;于是在POM中添加了个各种依赖终于发现缺少Spring Web MVC
这个依赖包。。。
1 | <servlet> |
首先, 一般来讲在Java中初始化一个类是通过new来操作的, 但是有一种情况却不适合这种new操作,那就是通过配置文件来进行实例化操作。
例如,在Spring中,需要加载配置文件中的类,这是比较常见的配置。 那么在Spring启动类中如何将这个类加载进容器中呢,显然进行new操作是不太现实的。 这时候就需要Java的反射操作了,Java的反射操作一般来讲有两种:分别是Class.forName()
和classLoader.loadCLass()
最后都是通过newInstance()
来进行初始化,但是在这里却发现假设反射的类中含有带参数的构造器,那么此时这个newInstance()就会抛NoSuchMethodException
,这是因为newInstance()因为不加参数所以调用的是默认构造器,而反射类中已经包含了带参数的构造器,所以无不带参数构造器,遂抛出异常。
但是此时newInstance()是加不了参数的,所以若需要通过制定构造器来进行反射的话需要一个类叫Constructor,
新建一个实体类:
read()方法经常用于读取一个byte数组或者char数组,其内部的方法如下:
1 | public final int read(byte b[]) throws IOException { |
首先在读取字节流的时候是所有的字节流的顶级类的是InputStream抽象类,而继承自Inputstream的类都是带有read方法,每一个类几乎丢重写了自己的read方法,而这就是多态的一种体现。
public interface Map
和一个内部接口:interface Entry
getKey(),getValue(),setValue
等#HashMap实现类:
1 | Node |
1 | Iterator iterator =map.entrySet().iterator(); |