Thinking in Java
JAVA探索
对知识的贪婪是我前进的动力
展开
-
JAVA I/O系统 Thinking in Java 之 RandomAccessFile
RandomAccessFile是脱离InputStream和OutputStream单独存在的类。他实现了DataOutput, DataInput, Closeable三个类,封装了类似装饰器DataInputStream和DataOutputStream的数据类型转换功能,以及独有的在文件中寻找切入点的功能。它可以在一个文件中向前或向后移动,获取当前所处的文件位置,移动到某个位置,判断文件的...原创 2019-12-23 18:11:22 · 155 阅读 · 0 评论 -
JAVA I/O系统 Thinking in Java 之 Reader和Writer
Reader和Writer是java1.1为了支持面向国际化的字符操作而出现的。老的I/O流继承层次结构仅支持8位字节流,不能很好的处理16位的Unicode字符,而Unicode用于字符国际化(java本身的char也是16位的Unicode),所以添加了Reader和Writer来支持。因此Reader/Writer和InputSream/OutputStream之间最大的区别在于前者适用于字...原创 2019-12-23 13:51:35 · 153 阅读 · 0 评论 -
JAVA I/O系统 Thinking in Java 之 装饰器FilterInputStream/FilterOutputStream
Java I/O系统中有个装饰器模式设计,对装饰器模式不太了解的同学,戳这里。FilterInputStream和FilterOutputStream是装饰器的两个父类,这两个父类继承了InputStream和OutputStream的所有方法。这两个父类下面提供了不同的子装饰类,这些子装饰类是我们真正需要用到的。我们这里来介绍几个经常用到的。1.数据类型装饰器DataInputStrea...原创 2019-12-17 21:11:22 · 143 阅读 · 0 评论 -
JAVA 泛型 Thinking in Java
我们可以利用多态的特性将基类作为方法的参数类型使用,使代码更加灵活,但需要不断的继承基类;我们可以利用接口的特性来实现特定的方法,从而方便快捷的实现一个新类来达到目的,但;但是javaSE5带来了一个新概念:泛型。泛型实现了参数化类型,使代码可以应用于多种类型。1.简单泛型泛型出现的一个主要原因就是:容器类。如果我们想要创造一个容器类,那么可以这样:public class Cont...原创 2019-12-17 14:31:58 · 167 阅读 · 0 评论 -
深入理解JAVA虚拟机阅读理解(四)线程安全
线程安全 当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方法进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象是线程安全的。-----Brian Goetz笔者理解:当一个线程访问一个对象期间,不用考虑因为其他线程的访问造成该线程获取到错误的结果,那这个对象是线程安全的。 JAVA语言中的线...原创 2019-05-22 20:02:51 · 153 阅读 · 0 评论 -
深入理解JAVA虚拟机阅读随笔(三)Java与线程
java工程师对线程一般都不难理解,我们知道线程是进程中的一条执行工作,知道多线程与单线程的区别,但很少有人知道线程的实现原理是什么,java虚拟机是怎样在服务器上创建并执行一条线程的,这就是本篇文章所要讲解的内容。 什么是线程 线程是比进程更轻量级的调度执行单位,线程的引入,可以把一个进程的资源分配和执行调度分开,各个线程既可以共享进程的资源(内存地址、文件I/O等),又可以独立调度(...原创 2019-05-17 11:58:12 · 183 阅读 · 0 评论 -
深入理解JAVA虚拟机阅读随笔(二)hotspot虚拟机对象探秘
对象的创建 Java是一门面向对象的编程语言,随时都有对象在创建。代码层面最常见的是new关键字创建,那么虚拟机是怎么执行一个对象的创建过程的呢?当虚拟机遇到一条new指令时,首先会去检查这个指令的参数在常量池中能否定位到一个类的符号引用,并且检查这个符号引用的类是否已经加载、解析和初始化过,如果没有,那么必须先执行相应的类加载过程。类加载的过程在别的文章详解。类加载通过后,虚拟机将会...原创 2019-05-15 16:06:53 · 188 阅读 · 0 评论 -
深入理解JAVA虚拟机阅读随笔(一)运行时数据区域
Java虚拟机在执行JAVA程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有的区域则依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范(Java SE 7 版)》的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域:jvm运行时数据区域结构图从图中我们可以看出,程序计数...原创 2019-05-08 15:25:53 · 177 阅读 · 0 评论 -
JAVA I/O系统 Thinking in Java 之 File类
File类的文件具有一定的误导性,我们可能会认为它指代的是文件,实际上并非如此。它技能代表一个特定文件的名称,又能代表一个目录下的一组文件的名称。如果它指的是一个文件集,我们就可以对此集合调用list()方法,从而获取一个目录下的所有文件名称。实际上,FilePath是一个更好的名字。1.目录列表器这里尝试获取一个目录下的全部文件和部分文件,首先获取目录下所有的文件名称。 publ...原创 2019-12-10 21:10:19 · 190 阅读 · 0 评论 -
JAVA I/O系统 Thinking in Java 之 输入/输出
“流”代表了任何可以产出数据的数据源对象(输入流)和可以接收数据的接收端对象(输出流),这一点当你从程序的角度来说就不难理解了,当你想要读取数据的时候,需要从一个数据源那里读取数据输入到程序内存中,当你想要写数据的时候,需要将程序内存中的数据输出到一个接收端中。“流”屏蔽了实际的I/O设备中处理数据的细节,让java开发者不用关注具体的数据处理,只需要使用jdk提供的类来进行数据操作。java...原创 2019-12-12 12:29:04 · 157 阅读 · 0 评论 -
JAVA 初始化与清理 Thinking in Java
初始化与清理随着计算机革命的发展,“不安全”的编程方式已经逐渐成为变成代价高昂的主因之一。--《Thinking in Java》初始化和清理正是设计安全的两个主要问题。开发者必须清除何时,如何初始化和清理内存,否则可能会导致资源无法使用或资源无法释放的bug。1.用构造器确保初始化。C++引入了构造器的概念,这是在创建对象时被自动调用的特殊方法。java也引入了构造器,并额外提供...原创 2019-12-16 18:05:15 · 161 阅读 · 0 评论 -
JAVA I/O系统 Thinking in Java
对程序语言的设计者来说,创建一个好的输入/输出(I/O)系统是一项艰难的任务 。 --《Thinking in Java》JAVA I/O对java开发者来说一直是一个重点中的重点,复杂的JAVA I/O系统常常让初学者望而却步。在充分理解并运用JAVA I/O之前,我们需要学习大量的类。本文是根据Thinking in Java的章节来学习的,有条件的同学可以看一看原著,会对本文有更详细的理...原创 2019-12-10 21:10:39 · 161 阅读 · 0 评论