- 浏览: 26800 次
- 性别:
- 来自: 杭州
最新评论
文章列表
1.配置文件中每一个<bean>解析成一个BeanDefinition对象,并保存到BeanDefinitionRegistry中
2.容器扫描BeanDefinitionRegistry中的BeanDefinition,使用Java的反射机制自动识别出Bean工厂后处理器(实现BeanFactoryPostProcessor接口)的Bean,然后调用这些Bean工厂后处理器对BeanDefinitionRegistry中的BeanDefinition进行加工处理(BeanDefinitionRegistryPostProcessor接口)
实现BeanFactoryPostPr ...
java 基本类型存储解析
- 博客分类:
- java
byte b=-128;
byte b=127;
都是可以编译通过的,在这里-128和127两个常量都是byte类型的,jvm会处理这个过程。
byte b=128;
编译不通过的,Type mismatch: cannot convert from int to byte
因为128已经超过byte的最大表示,jvm无法把这个常量当做byte,就默认当做int处理,则出现类型不匹配的错误。
同理,short的处理也是一样的。
宽类型 缩小为 窄数字类型时,就保留最后几位,符号位可能也发生变化。
例如1111 1111 0111 1111--》0111 1111
在java中,用十六进 ...
jndi--命名和目录服务api
用于查找远程的资源,例如对象、属性。
在java中的远程调用例如rmi(remote methed invoke)都是基于jndi进行远程查找的,然后扩展功能进行使用。
例如rmi,
1.是通过客户端的Stubs( 存根 ),存根生存在客户端,但代表了远程对象,它接受 A 的方法调用,并将这些方法调用映射到远端实际 B 对象。对于对象 A 来说,由于有了存根的存在,远程调用形式看起来都和本地调用一致。
2.在 B 对象所在的服务器端,对应地存在 Skeleton( 骨架 ) , skeleton 是远程对象的代理,负责从网络接受调用的请求。并且将这些调用 ...
当使用 fail-fast iterator 对 Collection 或 Map 进行迭代操作过程中尝试直接修改 Collection / Map 的内容时,即使是在单线程下运行, java.util.ConcurrentModificationException 异常也将被抛出。
Iterator 被创建之后会保存原来容器的modCount,当原来的对象数量发生变化时,Iterator的保存的modCount不会同步改变,当执行Iterator任务操作之前都会执行checkForComodification方法,校验原来容器的modCount和保存的modCount,如果对不上这 ...
heap(堆):是由程序员自己分配和回收,若其在程序结束时,未回收时则由操作系统来完成回收工作。java中是有jvm去控制。
stack(栈):是由操作系统来分配和回收的。
它们之间有缺点的比较:
heap 一般比较灵活,且内存不要求连续,但是容易造成内存泄露;
stack 一般比较固定,且内存一般分配是连续的,不容易引起内存泄露。
它们都不同于数据结构中的堆栈结构,请区分理解。
原来的I/O包和NIO处理数据最大的不同之处在于数据打包(packaged)和传输(transmitted)的方式。正如前面所提到的那样,IO(java.io.*)是以流的方式处理数据的,而NIO是以blocks(块)的方式来处理数据的.
一个流面向(stream-oriented)的I/O系统在处理数据时是一次只处理一个字节;作为input的stream一次向计算机生产一个byte,作为output的stream一次向计算机要求消费一个byte(计算机生产byte),对stream创建filter是一件非常容易的事情,同时如果你希望通过chain模式将几个filter连在一起 ...
java 线程的几个方法
- 博客分类:
- java
Thread的方法
sleep()
1. sleep ()函数有一个参数,通过参数可使线程在指定的时间内进入停滞状态,当指定的时间过后,线程则自动进入可执行状态。blocked线程池是进入阻塞状态的线程,跟锁没有关系。
2. 当调用sleep ()函数后,线程不会释放它的“锁标志”。
yield()
1.通过yield ()函数,可使线程进入可执行状态,排程器从可执行状态的线程中重新进行排程。所以调用了yield()的函数也有可能马上被执行。
2. 当调用yield ()函数后,线程不会释放它的“锁标志”。
join()
调用某线程的该方法,将当前线程与该线程"合并", ...
现在的系统的都是分时系统,达到多进程的效果。cpu只是将时间切割为时间片,然后将时间片分配给这些程序,获得时间片的程序开始执行,不等执行完毕,下个程序又获得时间片开始执行,这样多个程序轮流执行一段时间,由于现在cpu的高速计算能力,给人的感觉就像是多个程序在同时执行一样。
一个进程就是一个执行中的程序,而每一个进程都有自己独立的一块内存空间,一组系统资源.在进程概念中,每一个进程的内部数据和状态都是完全独立的.
多任务是指在一个系统中可以同时运行多个程序,即有多个独立运行的任务,每个任务对应一个进程
多线程则指的是在单个程序中可以同时运行多个不同的线程,执行不同的任务.多线程意味着一个程 ...
java 访问修饰符
- 博客分类:
- java
对于类成员(字段和方法)的访问权限来说,
public:所有类都可访问。
protected:继承访问权限。基类通过protected把访问权限赋予派生类而不是所有类,
另外,protected也提供包访问权限,也就是说,相同包内的其他类可以访问protected元素。
默认为包访问权限,即包内的类对其有访问权限。
private:除了包含这个成员的类外,其他任何类都无法访问这个成员。
对于类访问权限来说,
仅有两个选择:包访问权限或public。
类既不可以是private的,也不可以是protected的,但内部类是个特例,一个内部类可以是private或protected的。
代理模式只是原来对象的一个替身(原来对象约束了代理的行为)。
装饰模式是对原对象的功能增强。
适配器模式是要改变原对象的接口。
代码都是差不多的, 都是:代理类里面有一个被代理对象的属性,有一个invoke方法。任何方法最后都变成调用invoke方法。
在Java中,大家比较熟悉的是通过继承机制而产生的类型体系结构。比如String继承自Object。根据Liskov替换原则,子类是可以替换父类的。当需要Object类的引用的时候,如果传入一个String对象是没有任何问题的。但是反过来的话,即 ...
java 泛型学习--类型擦除
- 博客分类:
- java
类型擦除(type erasure)。 Java中的泛型基本上都是在编译器这个层次来实现的。在生成的Java字节代码中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参数,会被编译器在编译的时候去掉。这个过程就称为类型擦除。如在代码中定义的List<Object>和List<String>等类型,在编译之后都会变成List。JVM看到的只是List,而由泛型附加的类型信息对JVM来说是不可见的。Java编译器会在编译时尽可能的发现可能出错的地方,但是仍然无法避免在运行时刻出现类型转换异常的情况。类型擦除也是Java的泛型实现方式与C++模板机制实现方式之间的重要区别。 ...
java 泛型学习--泛型方法
- 博客分类:
- java
通过在类的定义中添加一个形式类型参数列表,可以将类泛型化。方法也可以被泛型化,不管它们定义在其中的类是不是泛型化的。
泛型类在多个方法签名间实施类型约束。在List<V>中,类型参数V出现在get()、add()、contains() ...
java 泛型学习--类型通配符
- 博客分类:
- java
假设您具有该方法:
void printList(List l) {
for (Object o : l)
System.out.println(o);
}
上面的代码在 JDK 5.0 上编译通过,但是如果试图用List<Integer>调用它,则会得到警告。出现警告是因为,您将泛型(List<Integer>)传递给一个只承诺将它当作List(所谓的原始类型)的方法,这将破坏使用泛型的类型安全。
如果试图编写像下面这样的方法,那么将会怎么样?
void printList(List<Object> l) {
...