Thinking In Java
北在哪
这个作者很懒,什么都没留下…
展开
-
第18章 Java I/O系统
新I/O(nio)所使用的的结构更接近于操作系统执行I/O的方式:通道和缓冲器。缓冲器作为我们与通道交互的媒介,我们可以通过缓冲器从通道中获取数据,也可以通过缓冲器将数据发送给通道。唯一直接与通道交互的缓冲器是ByteBuffer,但是无法读取或输出对象,字符串对象也不行。“big endian”(高位优先)将最重要的字节存放在地址最低的存储器单元,而"little endian"(低位优先)将最重要的字节存放在地址最高的存储器单元,ByteBuffer以高位优先的方式存储数据。ps:据Jargon .原创 2020-07-30 21:57:20 · 98 阅读 · 0 评论 -
第17章 容器深入研究
迭代器的指针指向元素位置之前: public static void test01() { List<String> list = new ArrayList<>(); list.add("1"); list.add("2"); list.add("3"); // 初始化指针指向第0个元素(元素从0开始计数)之前(默认): // ListIterator<String&.原创 2020-07-29 23:26:57 · 186 阅读 · 0 评论 -
第16章 数组
java支持创建持有泛型的数组对象: public static void test04() { class Peel<T> { } class Banana { } class Apple { } // 创建泛型数组: Peel<Banana>[] peels = new Peel[10]; // 可以放Peel&l.原创 2020-07-28 20:58:18 · 198 阅读 · 0 评论 -
第15章 泛型
具有private构造器的类在该类外部不能new对象,也不能在外部被继承。内部类中使用"外部类类名.this"表示外部类的this。对于一个static方法而言,无法访问泛型类的类型参数:class GenericSetter<T> { // 编译错误,static方法无法访问泛型类的类型参数: static void set(T arg) { System.out.println("GenericSetter"); }}如果static方.原创 2020-07-28 12:17:15 · 172 阅读 · 0 评论 -
第14章 类型信息
使用类名.class获取类的Class引用时,不会触发类的加载。类的加载只发生在访问其静态方法(构造器隐式地的是静态的)或者访问非常量静态域时,其中常量静态域指的是编译期常量,它用static final修饰并且显式给定了初始值。import java.util.Random;public class Test18 { public static void main(String[] args) throws ClassNotFoundException { test01(.原创 2020-07-26 20:06:51 · 104 阅读 · 0 评论 -
第13章 字符串
应当使用StringBuilder拼接字符串,而不是使用“+”号,虽然使用“+”时,编译器会自动调用StringBuilder处理,但是编译器的优化是有限的,如果你需要使用循环并用“+”拼接字符串,编译器会在每次循环都创建一个新的StringBuilder对象,效率较低;而若是自己先在循环体外新建了StringBuilder对象,然后在循环体内使用append方法拼接,就只会生成一个StringBuilder对象,而且显式地创建StringBuilder还可以预选为其指定大小,避免多次重新分配缓冲。所以如.原创 2020-07-26 11:04:18 · 82 阅读 · 0 评论 -
第12章 通过异常处理错误
在catch语句中抛出当前异常,在外层被捕捉后调用printStackTrace打印信息时,异常发生起始地不会改变,不会更新为异常的新发生地。要想更新信息,可以调用fillInStackTrace()方法。但是如果是抛出另一种异常时,有关原来的异常发生点信息会丢失,剩下的是新的抛出点有关的信息:import DataStructure.MyException;/*在catch语句中抛出当前异常,在外层被捕捉后调用printStackTrace打印信息时,异常发生起始地不会改变,不会更新为异常的.原创 2020-07-24 12:25:31 · 104 阅读 · 0 评论 -
第11章 持有对象
Arrays.asList( )方法接受一个数组或是一个用逗号分隔的元素列表(使用可变参数),并将其转换为一个List对象。但是该List对象的物理实现依然是数组,因此不能对其进行add( )或者delete( )操作,因为数组尺寸不可变。同样,所有对list对象的操作都是在原来数组上进行的。例如,使用Collections.sort( )方法对list对象进行排序,会对原来的数组造成影响:Integer[] array = {1, 3, 5, 2};List<Integer> list.原创 2020-07-24 08:07:45 · 68 阅读 · 0 评论 -
第9章 接口
抽象类可以包含抽象方法,也可以不包含。在父类构造器中调用方法,可能造成灾难。public class Test12 { public static void main(String[] args) { SubClass12 sub = new SubClass12(); // 子类print:0 sub.print(); // 子类print:9 }}abstract class SuperClass12 { public SuperCl.原创 2020-07-21 22:44:31 · 85 阅读 · 0 评论 -
第8章 多态
多态机制得以实现的前提是后期绑定,即在运行时根据对象的类型进行绑定,所以后期绑定也叫做动态绑定或运行时绑定。java中除了static方法和final方法(private方法属于final方法)之外,其他所有方法都是后期绑定。因为static方法由类名调用,final方法不能被覆盖,这两种方法都不需要在运行时判断究竟是谁在调用它们,它们的调用者是前期确定的。public class Test11 { public static void main(String[] args) { .原创 2020-07-21 11:18:49 · 76 阅读 · 0 评论 -
第7章 复用类
在调用子类的构造方法之前,若无super语句,java会自动调用父类的无参构造方法。final关键字修饰基本类型时,该基本类型只能被赋值一次;修饰对象引用时,一旦该引用初始化指向某个对象,就不能再指向第二个对象,即引用中保存的内存地址不能再变化,但是该引用所指向对象的内容是可以变化的。public class Test09 { final int[] array = {1, 2, 3}; public void doSome() { // array = new in.原创 2020-07-20 23:15:54 · 62 阅读 · 0 评论 -
第6章 访问权限控制
访问权限控制的等级,从最大权限到最小权限依次为:public、protected、包访问权限(没有关键字)和private。public:任何人都可以访问。protected:子类以及包内成员可以访问。包访问权限:包内成员可以访问。private:只有在本类中可以访问。.java文件可以有public类也可以没有,但只能存在一个public类。如果有public类,.java文件的文件名必须和类名相同,否则编译器报错。使用import static语句可以导入类中的静态方法(不能导入静态成员).原创 2020-07-20 10:09:43 · 321 阅读 · 0 评论 -
第5章 初始化和清理
1.方法重载:方法名相同,参数列表不同。参数顺序不同也可构成方法重载,但这样会使代码难以维护。此外,不能根据返回值来区分重载方法,不允许存在返回值不同而参数列表相同的重载方法。public void checkIn() { this.checkOut = false;}// 重载checkIn,参数列表不同,返回值不同。public int checkIn(int i) { this.checkOut = false; return i;}2.使用this( )可以调用原创 2020-07-19 12:25:54 · 107 阅读 · 0 评论 -
第4章 控制执行流程
1.逗号操作符(不是逗号分隔符),唯一使用到的地方是for循环的控制表达式。可初始化多个变量,但是它们必须有相同的类型。// 逗号操作符的使用:for (int i = 0, j = i; i < 25; i++, j+=i) { System.out.println("i = " + i + " j = " + j);}// 等同于:int j = 0;for (int i = 0; i < 25; i++) { j += i; System.out.pri原创 2020-07-19 07:52:39 · 82 阅读 · 0 评论 -
第3章 操作符
1.基本类型存储了实际的数值,而非引用,在为其赋值时,是直接将一个地方的内容复制到另外一个地方。int a = 2;// 将a的值复制一份给bint b = a;// 修改b不会对a造成任何影响b = 3;System.out.println(b); // 3System.out.println(a); // 22.整数除法会直接去掉结果的小数位,而不是四舍五入地圆整结果。3.通过java.util.Random类的对象,可以获取随机数。调用nextInt( )方法可获取随机整数,传入该原创 2020-07-18 13:08:39 · 78 阅读 · 0 评论