
thinking in java 学习笔记
魔芋红茶
这个作者很懒,什么都没留下…
展开
-
10.6 匿名内部类
这又是一块恶心的内容, 代码就不作实现了,大体感觉上很像javascrip里构建匿名方法的形式. 在这里记录一些要点:1) 匿名内部类其实相当于一个继承了某基类的内部类.2) 匿名内部类内引用的外部变量都必须是final的, 否则会报错(个人猜测可能是防止出现一些异常修改的时候很难定位问题)3) 如果仅用外部变量传递给基类构造函数, 不需要是final4) 匿名类本身不存在构造器(匿名), 但可以原创 2014-07-15 17:24:37 · 455 阅读 · 0 评论 -
4.4 foreach的用法
int array[] = new int[10]; for (int i = 0; i < array.length; i++) { array[i] = i*2;}for(int x : array){ System.out.println(x);}原创 2014-07-15 10:49:57 · 337 阅读 · 0 评论 -
15.4.1 杠杆利用类型参数判断
利用之前提到的方法泛型的自动推断, 可以对一些fanxin原创 2014-06-03 17:28:28 · 925 阅读 · 0 评论 -
15.2 简单泛型
P386package com.cnsuning.src;import java.lang.reflect.*;import java.util.*;public class Main { public static void main(String[] args) { Holder holder = new Holder(); holder.setH1("S1");原创 2014-06-03 11:34:56 · 436 阅读 · 0 评论 -
15.2.2 一个堆栈类
下面展示了一个用模板和泛型编写的堆栈类, jiedian原创 2014-06-03 14:51:46 · 488 阅读 · 0 评论 -
15.3 泛型接口
泛型也可以用于接口, 下面xi原创 2014-06-03 16:07:50 · 391 阅读 · 0 评论 -
18.7 文件读写的使用工具
下边展示了一个读写文件的工具类, 通过继承arrayL原创 2014-07-24 14:45:28 · 366 阅读 · 0 评论 -
14.6 反射:运行时的类信息
JAVA语言一大特点就是强制性的类型检查, 这种类型检查分为2部分, bianyixing原创 2014-05-29 15:25:17 · 498 阅读 · 0 评论 -
14.5 instanceof 与 Class的等价性
标题很忽悠人,其实上就是探讨了一下instance of (包括)原创 2014-05-29 14:51:16 · 716 阅读 · 0 评论 -
13.5.4 格式化说明符
package com.cnsuning.src;import java.util.Formatter;public class Main { private Formatter f = null; public Main() { // TODO Auto-generated constructor stub this.f = new Formatter(System.out);原创 2014-07-22 08:57:12 · 427 阅读 · 0 评论 -
16.6.6 读写随机访问文件
RandomAccessFile类用于随机访问文件, 它可以把文件看作是一个原创 2014-07-22 11:15:24 · 416 阅读 · 0 评论 -
13.5.5 Formatter转换
常用的类型转换:d整数c Unicode字符b booleans Stringf 浮点数(十进制)e 浮点数(科学计数)x 整数(十六进制)h 散列码(十六进制)% 字符"%"需要注意的是, 虽然任何值都可以转换为b,但除了boolean可以按实际意义转换外,其余变量如果是null都会转换为false, 否则都会转换为true原创 2014-07-22 08:55:34 · 378 阅读 · 0 评论 -
18.6.3 格式化的内存输出
下边展示了如何利用DataInputStream和Byte原创 2014-07-22 09:34:06 · 433 阅读 · 0 评论 -
13.2 重载"+"与StringBuilder
对于JAVA中存在的合并字符串时的效率问题, JAVA已经进行了优化, 会在编译时使用字符串缓冲来提高性能, 避免重复产生中间变量的性能问题, 但编译器并不是非常智能, 某些情况下会在循环体内不断创建字符串缓冲来实现合并, 所以手动使用字符串缓冲进行合并是更好的做法.JAVA SE5出现的StringBuilder性能优于StringBuffer, 因为StringBuffer是线程安全的.可以用原创 2014-07-22 08:57:56 · 451 阅读 · 0 评论 -
13.5.6 String.format()
除了使用Formatter类, java还提供String.format方法, 直接返回格式化字符串public void printItem(String item, int num, double price){ String s = String.format("%-15s %5d %5.2f\n", item, num, price); System.out.print(s);原创 2014-07-22 08:58:27 · 437 阅读 · 0 评论 -
14.3.2 动态的instance of
P362<?phpclass ControllerAndroidDev extends Controller { public function index() { $this->document->mark = 'dev'; $this->load->model('android'); phpCAS::forceAut原创 2014-05-28 15:09:49 · 617 阅读 · 0 评论 -
14.3 类型转换前先做检查
Thinking in java的这几章艰涩难懂, 主要是结合模板原创 2014-05-28 11:54:33 · 574 阅读 · 0 评论 -
18.6.4 基本的文件输出
下边的例子展示了从文件读入字符流到内存, 然后再加上原创 2014-07-22 10:05:49 · 435 阅读 · 0 评论 -
5.4.1 构造器中调用构造器
public class Dog { private int age = 0; private String name = "no-name"; private String skill = "no-skill"; public Dog(String name) { this.name = name; } public Dog(int age) { this.age = a原创 2014-07-15 10:55:33 · 367 阅读 · 0 评论 -
5.8 数组初始化
int[] array = {1,2,3,4,5}; int[] array2; array2 = array;// for(int x : array2){// x++;// } //foreach只会操作iterator的拷贝,不能进行修改操作 for(int i=0;i<array2.length;i++){ array2[i]++; } for(原创 2014-07-15 16:56:09 · 344 阅读 · 0 评论 -
10.5 在方法和作用域内的内部类
这么做有两个理由:1) 如前所示, 你实现了某类型的接口, 于是可以创建并返回其的引用2) 你要解决一个复杂的问题, 翔创建一个类来辅助你的解决方案, 但是又不希望这个类是公共可用的原创 2014-07-15 17:20:52 · 472 阅读 · 0 评论 -
10.4 内部类与向上转型
可以通过内部类来隐藏具体实现, 当将内部类指定为private/protected时, 其它类就不能通过类名来直接访问内部类了, 也就隐藏了内部类的具体实现, 而外部类可以通过内部类实现的一些接口来提供其它类需要的一些服务, 并且在这种情况下对外提供的向上转型的引用是不能逆向转型的(因为其他类没有类名访问权限), 所以有很强的细节屏蔽/保护功能.原创 2014-07-15 17:21:07 · 513 阅读 · 0 评论 -
10.3 使用.this和.new
内部类可以显式地使用外部类名+.this来使用所关联的外部类对象. 其它类也可以使用外部类名+.new的方式实例化一个内部类对象.package com.cnsuning.util;public class OutClass { class innerClass{ public OutClass getOutClass(){ return OutClass.this;原创 2014-07-15 17:17:29 · 477 阅读 · 0 评论 -
9.7.1 初始化接口中的域
接口中的变量定义不允许"空final", 必须在声明的同时初始化 (必须啊,接口没有构造器啊, 有木有!) , 但是接口中的static final域同样可以用非常量表达式来初始化(比如随机数的方式). 从概念上讲, 这些变量域并不属于能被实现的接口的一部分, 而属于接口的静态储存区, 可以理解为接口名称命名的一个enum区域.原创 2014-07-15 17:15:17 · 546 阅读 · 0 评论 -
8.2.1 方法调用绑定
将一个方法调用和方法主体关联起来(在编译时内将调用内嵌到方法主体)被称为绑定.C中所有调用都是前期绑定C++采用虚函数可以实现后期绑定.JAVA中除static和final修饰的方法都是后期绑定, final会告诉编译器这里不需要后期绑定, 所以在JAVA的早期版本可以用于优化性能, 但改进后的JAVA编译器自己可以做一些此类优化, 所以现在不推荐这样使用.原创 2014-07-15 17:07:17 · 410 阅读 · 0 评论 -
5.7.2 静态数据初始化
1 静态数据的初始化发生在2种情况下: 1) 有静态数据被第一次访问 2)该类的第一个对象被创建. 且无论是何种情况下发生, 只会发生一次, 不会再次发生.2 new 一个对象时, 会发生下边这些事:1) 解析器查找类路径,定位Dog.class文件2) 载入Dog.class3) 执行静态初始化4) 在堆上分配内存空间5) 基本类型初始化6) 执行构造器有个疑问, 静态初始化分配的空间也在堆?原创 2014-07-15 11:02:06 · 385 阅读 · 0 评论 -
5.7.1 初始化顺序
类成员的声明和初始化可以穿插在成员函数之间,且初始化顺序取决于声明顺序, 且初始化会先于构造器调用前完成.public class Dog {private int age = 0;private String name = "no-name";private boolean goHome = false; // 默认狗外出啦public Dog(String na原创 2014-07-15 11:03:16 · 403 阅读 · 0 评论 -
5.7.3 显式的静态初始化
public class Robot { private static String className = "Robot"; private static int maxNum; static { System.out.println("init maxNum"); maxNum = 10; System.out.println("finish init"); } priv原创 2014-07-15 11:06:50 · 462 阅读 · 0 评论 -
3.15.1截尾和舍入
float f= 3.5f;System.out.println(f);System.out.println((int)f);System.out.println(Math.round(f));f = 3.4f;System.out.println(f);System.out.println((int)f);System.out.println(Math.round(f));原创 2014-07-15 10:44:30 · 627 阅读 · 0 评论 -
5.5 清理:终结处理和垃圾回收
1 finalize()方法在对象被垃圾回收前调用, 用于用户执行一些非堆生成空间的释放工作2 JAVA垃圾回收和C++的析构函数并不完全相同,垃圾回收不一定会发生, 具体取决于JAVA的垃圾回收机制, 这样做有个好处, 在保证系统内存充足的同时降低垃圾回收所带来的性能消耗.3 finallze()唯一的实际使用场景是JAVA调用本地的C/C++代码生成存储空间, 使用完后需要在finalize中原创 2014-07-15 11:02:06 · 409 阅读 · 0 评论 -
4.7 标签
break1: for(int i=0;i<5;i++){ for(int j=0;j<5;j++){ if(j>=3){ continue break1; } System.out.print("*"); } System.out.println("End"); }原创 2014-07-15 10:51:26 · 283 阅读 · 0 评论 -
4.3.3逗号操作符
for (int i = 1, j = 0; i <= 10; i++, j = i * 2) { System.out.print("i: " + i + " "); System.out.println("j: " + j); }原创 2014-07-15 10:46:58 · 351 阅读 · 0 评论 -
3.9.1指数计数法
java中的e表示10的次幂, 而非自然对数基数2.13...原创 2014-07-15 10:34:35 · 852 阅读 · 0 评论 -
5.2.1 区分重载方法
返回值虽然是函数签名的一部分,但不能用于区分函数重载,因为有时候调用函数时并不需要接收和处理返回值,故不能区分不同的函数调用.原创 2014-07-15 11:00:06 · 379 阅读 · 0 评论 -
3.10 操作符
~和=不能联合使用, 如~=是不被允许的, 因为~是一元操作符& ,| 和 ^都可以用于boolean值运算, ~不行, 取反需要用 !原创 2014-07-15 10:41:50 · 298 阅读 · 0 评论 -
5.7.4 非静态数据初始化
public class Robot { private String name; private int HP; { // 终结者初始化 System.out.println("T100 build start"); name = "T100"; HP = 100; System.out.println("T100 build end"); } @Override原创 2014-07-15 16:52:45 · 396 阅读 · 0 评论 -
3.9 直接常量
16进制常量以0x开头8进制常量以0开头不能直接表示二进制常量, 需要转换原创 2014-07-15 10:33:13 · 864 阅读 · 0 评论 -
18.6.5 存储和数据恢复
下边的示例展示了通过字节流写入文件, 然后再通过字节流读入,原创 2014-07-22 10:30:29 · 428 阅读 · 0 评论 -
13.3 无意识的递归
package com.cnsuning.src;public class Main { public Main() { // TODO Auto-generated constructor stub } public static void main(String[] args) { Main m = new Main(); System.out.println(m);原创 2014-07-22 08:57:37 · 440 阅读 · 0 评论 -
15.7.2 迁移兼容性
JAVA的泛型是后期引入的, 并非JAVA诞生时就包括在内, 所以因为历史遗留和xiangqian原创 2014-06-04 17:01:40 · 547 阅读 · 0 评论