Java进阶
xuguoli_beyondboy
只要笑一笑,没什么过不了。程序员懂得编程之美,也要懂得生活之美,艺术之美,心理之美。
展开
-
Java六大存储区域笔记
现在大部分计算机高级语言都是有内存六大区域去分配存储相关数据的,Java也不例外。在Java编程思想书籍指出了Java六大存储区域。下面六点便是Java编程思想书籍的描述:1. 寄存器(register)。这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部。但是寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配。你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象。原创 2014-12-15 09:16:08 · 3824 阅读 · 4 评论 -
深入线程(一)
基本线程机制1.常用Executor的三种区别:CachedTreadPool会在执行过程中通常创建与所需数量相同的线程,然后又在一定时间内回收线程。FixedThreadPool一次性按预先执行代价高昂的线程分配,当超过其线程最大的数量时,会按照其提交的顺序排队。SingleThreadExecutor就是单个可重用的线程,其执行顺序为提交的顺序。 代码例子:public class L原创 2015-07-07 23:34:59 · 845 阅读 · 0 评论 -
深入Java注解
注解的基本语法1.四种元注解的使用说明: 编写注解处理器1.Java处理注解的过程如图: 代码实例://注解接口类@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface UseCase{ public int id(); public String descript原创 2015-06-10 17:31:51 · 513 阅读 · 0 评论 -
类型信息
class对象1.Java程序在它开始运行之前并非完全加载,而是等到各个部分在必需时才加载的,也就是说当你第一次创建一个对象时或第一次对类的静态成员引用,或者第一次调用相关方法时,它就加载,而后面的多次这样重复操作,它是不会再次加载的。 2.JVM为使用类而做的三个准备步骤:加载:这是由类加载器执行的,该步骤将查找字节码(通常在classpath所指定的路径中查找,但如果找不到,会在当前路径查找原创 2015-05-16 09:26:06 · 506 阅读 · 0 评论 -
再学Java I/O系统
输入和输出1.为了提高输出和输出的效率,我们常常可以用缓冲类来包装输入和输出流,如:增加了缓冲区,可以让写的操作不必每次要进行实际的物理写动作,直接填充其内容,一次性flush就可以写出很多内容到物理资源中了,其实重点的是如果没有缓冲区I/O操作会阻塞当前进程,对于I/O缓冲区技术这块我参考了操作系统的书籍,画了一个图: 性能比较:public class BasicFileOutput{原创 2015-04-17 01:11:27 · 684 阅读 · 0 评论 -
字符串
重载”+”与StringBuilder1.由于String是一个不可变类,其内容一旦赋值就不允许再被改变,因此当为String对象重载“+”操作符时,编译器会自动创建一个StringBuilder对象,然后调用append(String)方法添加完字符后,又以toString()方法返回,而StringBuilder但是一个字符容器,可以通过其自身的方法改变字符串。 代码例子:pub原创 2015-04-04 10:35:59 · 479 阅读 · 0 评论 -
再看泛型
简单泛型1.元组:它是将一组对象直接打包存储于其中的一个单一对象,这个容器对象允许读取其中元素,但是不允许向其中存放新的对象。(这个概念也称为数据传送对象,或信使。) 代码例子: //一个2维元组public class TwoTuple<A,B> { //用final确保了A,B不能改变的赋值的安全性 public final A first; public final B seco原创 2015-03-09 22:50:29 · 677 阅读 · 0 评论 -
再学异常
捕获异常 ##异常处理1.异常处理有两种基本模式:终止模式:在这种模型中,将假设错误非常关键,以至于程序无法返回到异常发生的地方继续执行,一旦异常被抛出,就表明错误已无法挽回,也不能回来继续执行。(它是Java和c++所支持的模型)恢复模型:异常处理程序的工作是修正错误,然后重新尝试调用出问题的方法,并认为第二次能成功。创建自定义异常1.可以用记录日志来关联异常 代码例原创 2015-02-27 13:43:59 · 570 阅读 · 0 评论 -
内部类
1.匿名内部类1.如果基类有一个有参数的构造器,可以在创建匿名类时来传递。 代码例子:abstract class Base { public Base(int i) { print("Base constructor, i = " + i); } public abstract void f();} public class AnonymousConstructor {原创 2015-02-17 13:47:43 · 546 阅读 · 0 评论 -
多态
1转机1.将一个方法调用同一个方法主体关联起来被称作绑定,若在程序执行前进行绑定(如果有的话,有编译器和连接程序实现),叫做前期绑定,如果运行时根据对象的类型进行绑定,那就是后期绑定(也叫动态绑定或运行时绑定). 2.如果父类private的方法,不但不能被子类重写,且当用多态调用时,执行的方法将是引用类型名称的方法,而不是所指向实际对象的方法。 代码例子: public class原创 2015-02-08 00:33:33 · 445 阅读 · 0 评论 -
Java的类初始化的详解
前两周看到了Java编程思想的初始化及类的加载那里,一直没找时间把它总结出来,对于初始化和类的加载过程,感觉Java编程思想讲的较浅还不够深入,于是我结合Java疯狂讲义2和人家博客后,就打算按照自己的理解来把它梳理一下。 之前我一直对Java有个疑问,那就是一个Java类文件在首次被使用时,需要经过什么步骤。这里我参考了书籍我画个JVM对首次使用类的处理步骤流程图:原创 2014-12-29 23:02:06 · 7066 阅读 · 2 评论 -
操作符
1赋值1当方法传入引用类型时,该引用类型对对象的改变会影响实参所指向的对象的改变(这就是方法调用中的别名问题),当方法传入的是基本类型时,该形参基本类型怎么变也不会影响到实参的值。代码例子:class Letter { char c; }public class Test{ static void f(Letter y) { y.c = 'z'; }原创 2015-02-05 23:09:17 · 473 阅读 · 0 评论 -
复用类
1代理:它是Java第三种关系,这是继承与组合的中庸之道,因为我们将一个成员对象置于所要构造的类中(就像组合),但与此同时我们在新类中暴露了该成员对象的所有方法(就像继承),而代理可以拥有更多的控制力,致我们可以选择只提供在成员对象中的方法的某个子集。代理解析图: 代码例子:public class SpaceShipControls { void up(int原创 2015-02-03 22:44:48 · 517 阅读 · 0 评论 -
缓存实例的不可变类
设计不可变类的好处在于它被多个对象共享时,该类的Field不用担心被某个对象改变。当程序需要经常使用多个相同的不可变类实例时,那么可以用缓存来满足这种需求,这样可以减少系统内存的开销。Java中用不少的类是用到缓存实例的不可变类来返回相同的实例。原创 2014-12-09 18:29:09 · 1547 阅读 · 4 评论 -
深入线程(二)
错失的信号1.当两个线程使用notify()/wait()或notifyAll()/wait()进行协作时,有可能会错过某个信号。下面举个例子: 缺陷方式:T1: synchronized(sharedMonitor) { sharedMonitor.notify(); } T2: while(someCondition) { //Point1 synchroni原创 2015-07-16 00:58:04 · 624 阅读 · 0 评论