
java编程语言学习
该专栏主要是讲Java一些基础知识,从基础再渐渐深入Java进阶,该专栏主要系统性的总结Java疯狂讲义和Java编程思想两本书,还参考一些其他人的博客,对于想深入学习Java的来说,这专栏应该有帮助的。
xuguoli_beyondboy
只要笑一笑,没什么过不了。程序员懂得编程之美,也要懂得生活之美,艺术之美,心理之美。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
操作符
1赋值1当方法传入引用类型时,该引用类型对对象的改变会影响实参所指向的对象的改变(这就是方法调用中的别名问题),当方法传入的是基本类型时,该形参基本类型怎么变也不会影响到实参的值。代码例子:class Letter { char c; }public class Test{ static void f(Letter y) { y.c = 'z'; }原创 2015-02-05 23:09:17 · 520 阅读 · 0 评论 -
复用类
1代理:它是Java第三种关系,这是继承与组合的中庸之道,因为我们将一个成员对象置于所要构造的类中(就像组合),但与此同时我们在新类中暴露了该成员对象的所有方法(就像继承),而代理可以拥有更多的控制力,致我们可以选择只提供在成员对象中的方法的某个子集。代理解析图: 代码例子:public class SpaceShipControls { void up(int原创 2015-02-03 22:44:48 · 566 阅读 · 0 评论 -
字符串
重载”+”与StringBuilder1.由于String是一个不可变类,其内容一旦赋值就不允许再被改变,因此当为String对象重载“+”操作符时,编译器会自动创建一个StringBuilder对象,然后调用append(String)方法添加完字符后,又以toString()方法返回,而StringBuilder但是一个字符容器,可以通过其自身的方法改变字符串。 代码例子:pub原创 2015-04-04 10:35:59 · 520 阅读 · 0 评论 -
再学异常
捕获异常 ##异常处理1.异常处理有两种基本模式:终止模式:在这种模型中,将假设错误非常关键,以至于程序无法返回到异常发生的地方继续执行,一旦异常被抛出,就表明错误已无法挽回,也不能回来继续执行。(它是Java和c++所支持的模型)恢复模型:异常处理程序的工作是修正错误,然后重新尝试调用出问题的方法,并认为第二次能成功。创建自定义异常1.可以用记录日志来关联异常 代码例原创 2015-02-27 13:43:59 · 629 阅读 · 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 · 720 阅读 · 0 评论 -
再学Java I/O系统
输入和输出1.为了提高输出和输出的效率,我们常常可以用缓冲类来包装输入和输出流,如:增加了缓冲区,可以让写的操作不必每次要进行实际的物理写动作,直接填充其内容,一次性flush就可以写出很多内容到物理资源中了,其实重点的是如果没有缓冲区I/O操作会阻塞当前进程,对于I/O缓冲区技术这块我参考了操作系统的书籍,画了一个图: 性能比较:public class BasicFileOutput{原创 2015-04-17 01:11:27 · 783 阅读 · 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 · 559 阅读 · 0 评论 -
深入线程(二)
错失的信号1.当两个线程使用notify()/wait()或notifyAll()/wait()进行协作时,有可能会错过某个信号。下面举个例子: 缺陷方式:T1: synchronized(sharedMonitor) { sharedMonitor.notify(); } T2: while(someCondition) { //Point1 synchroni原创 2015-07-16 00:58:04 · 663 阅读 · 0 评论 -
深入线程(一)
基本线程机制1.常用Executor的三种区别:CachedTreadPool会在执行过程中通常创建与所需数量相同的线程,然后又在一定时间内回收线程。FixedThreadPool一次性按预先执行代价高昂的线程分配,当超过其线程最大的数量时,会按照其提交的顺序排队。SingleThreadExecutor就是单个可重用的线程,其执行顺序为提交的顺序。 代码例子:public class L原创 2015-07-07 23:34:59 · 904 阅读 · 0 评论 -
多态
1转机1.将一个方法调用同一个方法主体关联起来被称作绑定,若在程序执行前进行绑定(如果有的话,有编译器和连接程序实现),叫做前期绑定,如果运行时根据对象的类型进行绑定,那就是后期绑定(也叫动态绑定或运行时绑定). 2.如果父类private的方法,不但不能被子类重写,且当用多态调用时,执行的方法将是引用类型名称的方法,而不是所指向实际对象的方法。 代码例子: public class原创 2015-02-08 00:33:33 · 492 阅读 · 0 评论 -
Java的类初始化的详解
前两周看到了Java编程思想的初始化及类的加载那里,一直没找时间把它总结出来,对于初始化和类的加载过程,感觉Java编程思想讲的较浅还不够深入,于是我结合Java疯狂讲义2和人家博客后,就打算按照自己的理解来把它梳理一下。 之前我一直对Java有个疑问,那就是一个Java类文件在首次被使用时,需要经过什么步骤。这里我参考了书籍我画个JVM对首次使用类的处理步骤流程图:原创 2014-12-29 23:02:06 · 7240 阅读 · 2 评论 -
Java六大存储区域笔记
现在大部分计算机高级语言都是有内存六大区域去分配存储相关数据的,Java也不例外。在Java编程思想书籍指出了Java六大存储区域。下面六点便是Java编程思想书籍的描述:1. 寄存器(register)。这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部。但是寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配。你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象。原创 2014-12-15 09:16:08 · 3924 阅读 · 4 评论 -
集合
1java集合概述1.Java的集合类主要由两个接口派生而出:Collection和Map,这两个接口又包含了一些子接口或实现类,如图: 2Collection和Iterator接口1.当使用Iterator对集合元素进行迭代时,Iterator并不是把集合元素本身传给了迭代变量,而是把集合元素的传给了迭代变量,所以修改迭代变量的值对集合元素本身没有任何影响。 代码例子:public class原创 2015-03-05 17:20:54 · 832 阅读 · 0 评论 -
多线程
线程和进程1.进程是处于运行过程中的程序,其具有一定的独立功能,有以下3个特点:独立性:进程是系统中独立存在的实体,它可以拥有自己独立的资源,每一个进程都拥有自己私有的地址空间,在没有经过进程本身允许的情况下,一个用户进程不可以直接访问其他进程的地址空间。动态性:进程与程序的区别在于,程序只是一个静态的指令集合,而进程是一个正在系统中活动的指令集合,在进程中加入了时间的概念,进程具有自原创 2015-03-17 10:06:49 · 870 阅读 · 0 评论 -
输入和输出
理解Java的IO流1.Java的IO流是实现输入和输出的基础,它可以方便的实现数据的输入和输出操作,在Java中把不同的输入和输出源(键盘,文件,网络连接等)抽象表述为“流”通过流的方式允许Java程序使用相同的方式来访问不同的输入和输出源。 2.字节流和字符流的区别:字节流操作的数据单元是8位的字节,而字符流操作的数据单元是16位的字符。(字节流主要由InputStream和OutputStr原创 2015-03-04 21:51:30 · 819 阅读 · 0 评论 -
泛型
1泛型入门1为什么要设计泛型,有下面两个简单的理由。集合对元素类型没有任何限制,这样可能引发一些问题,例如,想创建一个只能保存Dog对象的集合,但程序也可以轻易地将Cat对象“丢”进去,所以可能引发异常。由于把对象"丢进"集合时,集合丢失了对象的状态信息,集合只知道它盛装的是Object,因此取出集合元素后通常还需要进行强制类型转换,这种强制类型转换即增加了编程的复杂度,也可能引发Cl原创 2015-02-04 13:33:01 · 758 阅读 · 0 评论 -
异常处理
1异常类的继承1.try块里声明的变量是代码块内部局部变量,它只在try块内有效,在catch块中不能访问该变量。 2.异常(Exception)和错误(Error)两种,Exception可以被捕获,而Error错误,一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,动态链接失败等,这种错误无法捕获或无法恢复,故catcha是不能捕获到Error对象,也无须在其throws子句中声明该方法可能原创 2015-02-07 01:00:05 · 550 阅读 · 0 评论 -
与运行环境交互
1.与用户互动1.主类的main方法是由JVM直接通过类名调用,不会先创建主类的对象,然后通过对象来调用该主方法。 2.Java可以使用Scanner可以接受文件,输入流,字符串作为数据源,Scanner设置分隔符可以使用useDelimiter方法。 代码例子:public class ScannerKeyBoardTest{ public static void main(Stri原创 2015-02-20 16:27:45 · 735 阅读 · 0 评论 -
面向对象下
1增强的包装类1JDK1.5以后提供了自动装箱和自动拆箱功能,所谓自动装箱,就是可以把一个基本类型变量直接赋给对应的包装类变量,或者赋给Object变量,自动拆箱则与之相反,允许直接把包装类对象直接赋给一个对应的基本类型变量。2同样两个int类型的数值包装成Integer实例后,如果两个数其中一个数范围时-128——127之间,则这两个包装后的实例对象不是同一个对象。该Integer用了缓原创 2015-02-02 15:31:38 · 1125 阅读 · 1 评论 -
面向对象上
1类和对象1修饰符2类,Field,方法三类的修饰符。类:public,final,abstract,或者完全省略这三个修饰类。Field:修饰符可以省略,也可以是public,protected,private,static,final,其中public,protected,private三个最多只能出现其中之一,可以与static,final组合起来修饰Field。方法原创 2015-01-29 21:52:53 · 686 阅读 · 0 评论 -
Java数据类型和运算符
1基本数据类型1如果直接将一个较小的整数常量(在byte或short类型的表述范围内)赋给一个byte或short变量,系统会自动把这个整数常量当成byte或者short类型来处理(系统默认整数常量是int)。2如果使用一个巨大的整数常量(超出了int类型的表数范围)时,Java不会自动把这个整数常量当成long类型来处理。如果希望系统把一个整数常量当成long类型来处理,应在这个整数原创 2015-01-23 20:18:40 · 937 阅读 · 0 评论