Thinking in JAVA
采自《编程思想》(第四版的一些)的小笔记
周末的丢
这个作者很懒,什么都没留下…
展开
-
持有对象2(thinking in Java)
ListList承诺可以将元素维护在特定的序列中。List接口在Collection的基础上添加了大量的方法,使得可以在List中间插入和移出元素。有两种类型的List:基本的ArrayList,它善于随机访问元素,但是在List的中间插入和移出元素时比较慢。LinkedList,它通过较低的代价在List中间进行插入和删除操作,提供了优化的顺序访问。LinkedList在随机访问方面比...原创 2019-10-25 15:48:30 · 114 阅读 · 1 评论 -
持有对象(thinking in Java)
Java中有多种方式保存对象(应该说是对对象的引用)。例如前面曾经学习过的数组,它是编译器支持的类型。数组是保存一组对象最有效的方式,如果你想保存一组基本类型数据,也推荐用这种方式。但是数组具有固定的尺寸,更一般的情况下,你在写程序时并不知道需要多少个对象,或者是否需要更复杂的方式来存储对象,因此数组尺寸固定这一限制显得过于受限了。Java实用类库还提供了一套相当完整的容器类来解决这个问题,其中...原创 2019-10-25 11:55:47 · 139 阅读 · 0 评论 -
Thinking in Java 访问权限控制(第六章)
构件类库的概念以及对于谁有权取用该构件类库的控制问题还不是完善的。对于这一点,Java用关键字pacage加以控制,而访问权限修饰词会因类是存在于一个相同的包,还是存在于一个单独的包而受到影响。如何将类库构件置于包中什么是包例如做一碗油泼面, 需要先和面, 擀面, 扯出面条, 再烧水, 下锅煮熟, 放调料, 泼油.但是其中的 “和面, 擀面, 扯出面条” 环节难度比较大, 不是所有人都能...原创 2019-09-19 01:20:46 · 164 阅读 · 0 评论 -
thinking in Java 练习(访问权限控制)
练习一:在某个包中创建一个类,在这个类所处的包的外部创建该类的一个实例。package access.mypackage;/** * Mypackage */public class Mypackage { public Mypackage(){ System.out.println("hello"); }}import access.mypack...原创 2019-09-19 23:53:54 · 320 阅读 · 0 评论 -
组合与继承语法(Thinking in Java 第七章)
7.1组合语法假如,假设你需要某个对象,它要具有多个String对象、几个基本类型数据,以及另一个类的对象。对于非基本类型的对象,必须将其引用置于新的类中,但可以直接定义基本类型数据:public class WaterSource { private String s; WaterSource(){ System.out.println("watersourc...原创 2019-09-25 10:55:49 · 228 阅读 · 0 评论 -
向上转型(thinking in Java 第七章)
组合和继承都允许在新的类中放置子对象,组合是显示地这样做,而继承则是隐式地做。组合技术通常用于想在新类中使用现有类的功能而非它的接口这种情形。即,在新类中嵌入某个对象,让其实线所需要的功能,但新类的用户看到的只是为新类所定义的接口,而非嵌入对象的接口。为取得此效果,需要在新类中嵌入一个现有类的private对象有时,允许类的用户直接访问新类中的组合成分是极具意义的;也就是说,将成员对象声明为p...原创 2019-09-26 02:29:15 · 118 阅读 · 0 评论 -
关于继承的练习(thinking in java),汽车
练习1:为C编写一个构造函数,并在C的构造函数中执行所有初始化。class A{ A(char c , int i){ System.out.println("A(char , int)"); }}class B extends A{ B(String s , float f){ super(' ',0); System...原创 2019-10-09 02:27:30 · 352 阅读 · 0 评论 -
多态1(thinking in Java 第八章)
在面向对象的程序设计语言中,多态是继数据抽象和继承之后的第三种基本形态。多态通过分离做什么和怎么做,从另一角度将接口和实现分离出来。多态不但能够改善代码的组织结构和可读性,还能够创建可扩展的程序——即无论在项目最初创建时还是在需要添加新功能时都可以“生长”的程序。“封装”通过合并特征和行为来创建新的数据类型。“实现隐藏”则通过将细节“私有化”把接口和实现分离开来。这种类型的组织机制对那些拥有过...原创 2019-10-11 10:37:18 · 188 阅读 · 1 评论 -
多态2(thinking in Java 第八章)
构造器和多态通常,构造器不同于其他种类的方法。涉及到多态时仍旧时如此。尽管构造器并不具有多态性(他们实际上是static方法,只不过该static声明是隐式的)。基类的构造器总是在导出类的构造过程中被调用,而且按照继承层次逐渐向上链接,确保每个基类的构造器都能得到调用。这样做是有意义的,因为构造器具有一项特殊任务:检查对象是否被正确地构造。导出类只能访问它自己的成员,不能访问基类中的成员。下...原创 2019-10-11 17:02:36 · 136 阅读 · 1 评论 -
接口 (thinking in Java)
Instrument 类可以很容易转换成abstract类。既然使某个类成为抽象类并不需要所有方法都是抽象的,所以仅需要将某些方法声明为抽象即可。下面是修改过的“管弦乐器”的例子,其中采用了抽象类和抽象方法:enum Node{ MIDDLE_C , C_SHARP , B_FLAT ;}//abstract关键字允许人们在类中创建一个或多个没有任何定义的方法a...原创 2019-10-11 19:21:40 · 169 阅读 · 0 评论 -
接口与工厂 (thinking in Java)
接口与工厂接口是实现多重继承的途径,而生成遵循某个接口的对象的典型方式就是工厂设计模式。这与直接调用构造器不同,我们在工厂对象上调用的是创建方法,而该工厂对象将生成接口的某个实现的对象。理论上,通过这种方式,我们的代码将完全与接口的实现分离。使我们可以透明地将某个实现替换为另一个实现。interface Service{ void method1(); void method2...原创 2019-10-11 20:10:18 · 257 阅读 · 0 评论 -
Thinking in Java 第五章习题(初始化)
练习1:创建一个类,它包含一个未初始化的String引用。验证该引用被Java初始化成了null。class Test{ String s;}public class Initialization { public static void main(String[] args) { Test t=new Test(); System.out.p...原创 2019-09-16 19:57:18 · 459 阅读 · 0 评论 -
Thinking in Java 第四章练习(吸血鬼数字)
练习一:产生25个int类型的随机数。对于每一个随机值,使用 if-else语句来将其分类为大于、小于或等于紧随它而随机生成的值。public class RandomInt { public static void main(String[] args) { Random random =new Random(); int[] arr=new int[...原创 2019-09-16 15:30:43 · 180 阅读 · 0 评论 -
创建一个类,它包含一个int域,一个char域,他们都没有初始化,验证Java执行了默认初始化
一开始我是这么写的public class SetaType { public static void main(String[] args) { System.out.println(int); System.out.println(char); }}结果在编译的时候就给我报错了这么写错误的原因:因为我们都知道main()方法时st...原创 2019-09-09 16:12:25 · 1037 阅读 · 0 评论 -
编写一个程序,定义storage()方法的代码段,并调用
方法一public class Storage { public static int storage(String s){ return s.length()*2; } public static void main(String[] args) { int a=storage("hello"); System.out....原创 2019-09-09 19:01:40 · 274 阅读 · 0 评论 -
Thinking in Java :操作符
对象赋值在为对象赋值的时候,情况却发生了变化。对一个对象进行操作时,我们真正操作的是对对象的引用。所以倘若“一个对象赋值给另一个对象”,实际是将“引用”从一个地方赋值到另一个地方。这就意味着假若对对象使用c=d,那么c和d都指向原本只有d指向的那个对象。下面这个例子向大家阐释这一点:class Tank{ int level;}public class AssignMent {...原创 2019-09-10 16:47:33 · 99 阅读 · 1 评论 -
TJ练习
1.创建一个包含一个float域的类,并用这个类来展示方法调用时的别名机制。class TestMethod{ float f;} /** * TJpritice */public class TJpritice { public static void changeValue(TestMethod tm){ tm.f=2.1f; } ...原创 2019-09-12 08:55:21 · 280 阅读 · 1 评论 -
Thinking in Java,Foreach语法,标签
for循环常用于执行“计数”任务public class TJpritice { public static void main(String[] args) { for(char c=0;c<128;c++){ if(Character.isLowerCase(c)){ System.out.println(...原创 2019-09-14 17:11:12 · 125 阅读 · 1 评论 -
Thinking in Java 构造器,初始化
用构造器确保初始化可以假想为编写的每个类都定义一个initialize()方法。该方法的名称提醒你在使用其对象之前,应首先调用initialize()。然而,这同时意味着用户必须得自己去调用此方法。在Java中,通过提供构造器,类的设计者可确保每个对象都得到初始化。创建对象时,如果其类具有构造器,Java就会在用户有能力操作对象之前自动调用相应的构造器,确保初始化关于命名,第一:所取的任何名字...原创 2019-09-14 19:35:35 · 102 阅读 · 1 评论 -
Thinking in Java 垃圾回收机制
终结条件通常,不能指望finalize(),必须创建其他的“清理”方法,并且明确地调用它们。看来,finalize()只能存在于很难用到的一些晦涩用法里。当对某个对象不再感兴趣——也就是它可以被清理的,这个对象应处于某种状态,使它占用的内存可以被安全的释放。例如,要是对象代表一个打开的文件,在对象回收前程序员应该关闭这个文件。只要对象中存在没有被适当清理的部分,程序就存在很隐晦的缺陷。fina...原创 2019-09-14 21:13:01 · 111 阅读 · 0 评论 -
Thinking in Java 初始化、数组、枚举、可变参数列表
静态数据初始化无论创建了多少个对象,静态数据都只占用一份存储区域。static关键字不能应用于局部变量,因此他只作用于域。如果一个域时基本的静态类型域,且也没有对他进行初始化,那么它就会获得基本类型的标准初值:如果它是一个对象引用,那么它的默认初始化值就是null。想要了解静态存储区域是何时初始化的,看下面这个例子:class Bowl{ Bowl(int marker){ ...原创 2019-09-15 12:43:43 · 124 阅读 · 0 评论 -
Thinking in java,必须由你创建所有对象!!
一旦创建了一个引用,就希望它能与一个新的对象相关联。通常用new操作符来实现,new关键字的意思是“给我一个新对象”String s=new String("asdf")它不仅表示“给我一个新的字符串”,而且通过提供一个初始字符串,给出了怎样产生这个String的信息。存储到什么地方程序运行时,对象时怎么放置安排的?特别时内存是怎样分配的?有五个不同的地方可以存储数据寄存器:这是最快...原创 2019-09-07 18:55:22 · 135 阅读 · 0 评论