Think in Java 读书笔记(一)(浓缩出精华_(:з)∠)_)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/breavo_raw/article/details/74894144

最近需要整理一堆资料,在即将回到学校的日子里略显迷茫,先从自己的读书笔记开始整理把~下面是Think in java 的读书笔记,希望這篇文章能够作为一个好的开端。(阅读这份笔记,你至少得有一本TIJ才行,对吧~)

一~三章

1、OOP

2、每个对象都提供服务(当正在开发或理解一个程序设计时,最好的方法就是将对象想象为服务提供者)

3、程序猿按照角色可分别为类创建者和客户端程序猿。

4、代码复用是面向对象程序设计语言所提供的最了不起的优点之一。

5、抽象程度:汇编 < C < Java

6、对象具有状态、行为、和标识。

7、开发,理解一个程序设计~
——————对于一个服务对象,有这些思考:
——————①他们看起来是什么样子?
——————②他们能提供哪些服务?
——————③他们需要哪些对象才能履行他们的义务?
——————continue…

8、把对象看作服务提供者有助于提高对象的内聚性。

9、访问控制存在的两个原因 p5

10、public,protect,private, defult的访问权限。

11、组合(聚合)“has-a”关系,e.g.汽车拥有引擎

12、组合 VS 继承

13、继承现有对象的新类复制了基类的接口

14、我们可以在一开始使用LinkedList构建程序,而在优化系统性能时改用ArrayList,接口List所带来的抽象,把在容器间进行转换时对代码产生的影响降低到最小程度。

15、尽管一切都看做对象,但操纵的标识符实际上是对象的一个“引用(reference)”(e.g.遥控器操纵电视机)

16、String s = “asdf” 等价于 String s = new string(“asdf”)

17、程序运行时,对象进行安排放置的5个地方
——1)寄存器
——2)堆栈
——3)堆
——4)常量
——5)非RAM储存

18、当创建一个数组对象时,实际上就是创建了一个“引用数组

19、java有个垃圾回收器,用来监视new创建的所有对象。

20、int x = a.f();
——这种调用方法的行为通常被称为发送消息给对象。
——上述例子中,消息是f( ),对象是a

21、Javadoc

22、标识符,操作符 p38

23、基本类型的赋值就是内容的复制。

24、要生成数字,程序会首先创建一个Random类的对象。如果在创建过程中没有传递任何参数,那么Java就会将当前时间作为随机生成器的种子。

25、前缀递增(++a),先执行运算,在生成值。
——后缀(a++)相反

26、==, != 和 equals

27、equals默认比较的是引用,所以除非在自己的新类中覆盖equals方法,否则不可能表现出我们希望的行为。

28、短路操作 P47

29、直接常量 P48, 指数计数法 P48

30、单个“比特”(bit),即二进制位。

31、左移运算符,按右侧指定的位数将操作符左边的操作数向左侧移动(低位补0)

32、三元操作符
boolean - exp ? value(true) 0 : value(false) 1

33、对结果进入舍入操作需要使用java.lang.round( )方法

34、Java中没有sizeof( )方法 p56
——Java不需要sizeof( )操作符来满足这方面的需要,因为所有的数据类型在所有机器中的大小都是相同的,我们不必考虑移植问题——他已经被设计在语言中了。

35、操作符小结 p57

36、两个足够大的int值执行乘法运算,结果就会溢出。

37、当类型转换成一种较小的类型时,必须留意“窄化转换”的结果,否则会在类型转化过程中不知不觉丢失了信息。

放点妹子图放松一下(侵删,下同):
这里写图片描述

第四章

38、Java 并不支持goto语句,在java中,仍然可以进行类似goto那样的跳转,但比起典型的goto,有了很多限制。

39、random( ),该方法的作用时产生 0 和 1 之间(包括 0,但不包括 1)的一个double值。

40、逗号操作符,Java里唯一用到逗号操作符的地方就是for循环的控制表达式~??

41、如果在void方法中没有return语句,那么该方法的结尾处会有一个隐式的return

42、无穷循环的第二种形式式for(;;)
——while(true)与for(;;)在编译器看来是同一回事

43、臭名昭著的goto P70
summary:”若条件成立,则跳到这里,否则跳到那里。”
goto是java的保留字,但在语言中并未使用它;java没有goto;P71

44、switch P41

45、enum(第五章末尾会出现)

第五章-以后每章标号从1开始

1、返回值区分重载方法的不可行性 p82

2、关于this的一些描述 p85

3、static方法就是没有this的方法。

4、辣鸡回收器只知道释放那些经由new分配的内存(惊人的事实),那些没有经过new的呢?(使用finalize( )) p87
——辣鸡回收只与内存有关

5、垃圾回收器对于提高对象的创建速度有明显的效果(为什么?翻到p90)

6、C++的堆可以想象成一个院子;p90
——而Java的堆更像一个传送带

7、辣鸡回收的几种技术:
——1)引用计数:简单,速度慢(jvm中不使用),存在循环引用的缺陷
——2)追溯“活”的对象在堆栈或静态存储区之中的引用。(stop and copy方法)
——3)没有新垃圾产生时,进行‘标记 - 清扫’模式(工作方式和 stop and copy 方法很像,但是不会发生复制行为)
——4)分代回收技术

8、自动初始化发生在构造器调用之前。

9、静态存储区是何时初始化的?p95

10、静态初始化只有在必要时才进行。p96

11、静态初始化只在class对象首次加载的时候进行一次。

12、数组的定义:(1)相同类型
——————— (2) 以一个标识符的名称封装到一起

(13被吃了…)

14、Array.toString( ) 一个有用的方法

15、初始化对象数组的两种方法
e.g.
(1):

Integer[] a = new Integer[20];
for(int i=0; i<a.length; i++)
    a[i] = rand.nextInt();

(2):

Integer[] a = new Integer[]{
    new Integer(1),
    new Integer(2),
    3;  // Autoboxing(自动包装)
}

16、默认打印行为会打印对象的名称和地址;

17、你应该总是在重载方法的一个版本上使用可变参数列表,或者压根不用它。p105

18、第五章总结。p107

有点累了呢_(:з)∠)_:
这里写图片描述

第六章

1、Java util(java标准工具库)

2、每个编译单元(即 .java文件)只能有一个public类,否则编译器不会接受。
额外的类不会被包之外的世界看见 p110

3、java解释器的运行过程 p112

4、 把数据和方法包装进类中,以及具体实现的隐藏,通常把这些共同称作为封装;p120

5、每个编译单元都有单一的公共接口,用public类实现,所以每个编译单元都只能有一个public类。 p121

6、类不可以是private或protect的(内部类除外),如果想阻止任何人对该类具有访问权限,可以将构造器设定为private的。(虽然这么做还是可以通过static内部成员访问)

7、一个简单的单例设计模式 p122

public class Singleton{
    private Singleton(){ }
    private static sp = new Singleton();
    public static Singleton access(){
        return sp;
    }
    public void f(){ }
}

外部调用:

public class test{
    void test1(){
        Singleton.access();  // 唯一获取实例对象的方法
    }
}

8、第六章总结 p123

第七章

1、复用代码是java众多引人注目的功能之一;

2、每一个非基本类型的对象都有一个tostring( )方法,而且当编译器需要一个string而你却只有一个对象(引用)时,该方法却会被调用。

3、即使一个程序中含有多个类,也只有命令行所调用的那个类的main方法会被调用。 p128

4、为了继承,一般是将所有数据成员指定成为private,将所有方法指定成为public。 p128

5、可以讲继承视作时对类的复用。

6、关键字super:e.g.表达式super.scrub()将调用基类版本的scrub( )方法。

7、继承不只是复制基类的接口;p129

8、Java会自动导出类的构造器,必须是显式的调用。(使用super + 参数) p130
(对于导出类来说,基类的初始化也十分重要)

9、多层继承的初始化是有内向外的

10、无法自动初始化带参构造器,必须是显式的调用(使用super + 参数) p130

11、代理模式(创建一个私有引用代理控制) p131

12、关键字try表示,对下面的块(保护区)进行特殊处理,
其中一项特殊处理是不论try是怎么退出的,finally子句中的代码总是要被执行的;(但在线程中就不一定了)

13、Java中不存在名称屏蔽(c++中存在)

14、继承技术并不像想象中那样常用(常见的是类的封装组合技术) p140

15、一个即是static又是final的域只占一段不能改变的存储空间;

16、final对基本型p140/引用p141/方法p143/类p144/参数p142 各有什么意义_(:з)∠)_

17、类中所有的private方法都是隐式地指定为final的

18、vector和hashtable的一些趣闻 p 145

19、每个类的编译代码都存在于他自己的独立文件中,该文件只有在需要使用程序代码时才会加载。
——构造器也是static方法,类是在任何static成员被访问时才会被加载。

20、导出类的初始化依赖于基类正确的初始化;

21、第7章总结 p147

第八章

1、在面向对象的程序设计语言中,多态是继数据抽象和继承之后的第三种基本特征;

2、多态通过分离做什么和怎么做,从另一个角度将接口和实现分离开来。

3、多态和向上转型具有一定的联系 p150

4、前期绑定,后期绑定 p150~p151
——发送消息给某个对象,让对象判定该做什么事;

5、向上转型(可参考“几何形状”的例子)

shape s = new Circle()

上面这条代码创建了一个Circle对象,并将引用赋值给基类shape(circle 中重写了draw( )犯法),假设调用s.draw( ),由于后期绑定,系统依旧判断处应调用Circle的draw( )方法。

6、一个简单的工厂模式 (和前面的工厂模式有区别)p153

7、多态是一项让程序猿“将改变的事物与未改变的事物”区分开来的技术。

8、如果某个方法是静态的,它的行为就不具有多态性。

9、实例对象是可以访问静态方法的~(会产生一个警告)

10、继承中类的清理与初始化的顺序相反 p161

11、编写构造器的一条准则:“用尽可能简单的方法使对象进入正常状态;”如果可以的话,避免调用其他方法。 p164

12、协变允许放回更具体的类型 p164

13、组合比继承更灵活(动态灵活性)p165

14、向下转型,java中所有转型都会得到检查(在运行时期进行检查)
——如果类型转换出现问题,则抛出ClassCastException异常 p167

15、第8章总结。

感觉差不多了呢O(∩_∩)O:
这里写图片描述

第九章

1、接口和内部类为我们提供了一种将接口与现实分离的更加结构化的方法。p169

2、抽象类使普通类与接口之间的中庸之道。

3、你不可能总是使用纯接口;p169

4、抽象方法的语法:abstract void f();

5、对于抽象类,系统会阻止我们创建该类的对象(报错)。

6、interface关键字使抽象的概念更近了一步。 p172
——interface 关键字只提供形式,而未提供任何具体实现。

7、接口使多重继承的一个变种;p172

8被吃了…

9、接口中的域隐式的使static和final的;p172

10、使用implement实现一个接口;p172

11、当实现一个接口时,在接口中被定义的方法必须是public的(系统默认处理)

12、创建一个能根据所传递的参数对象的不同而具有不同行为的方法,被称作策略设计模式。e.g. p175

13、split()方法 p175

14、适配器模式,适配器种的代码,将接受你所拥有的接口,并产生你所需要的接口。e.g. p 177

15、解耦 p174

16、使用接口的核心原因:①为了能够向上转型为多个类型(灵活性)
———————————② 防止客户端创建该类的对象。

17、继承 extends 关键字只适用于单一类,但可以引用多个(基类)接口。

18、嵌套接口 p185

19、实现一个private接口是一种方法,它可以强制该接口的方法定义不要添加任何类型信息(也就是说,不允许向上转型)。

20、生成遵循某个接口的对象典型方式就是工厂模式。(此处实现方式还不够优雅)p187
——工厂对象上调用的是创建方法,而该工厂将生成接口的某个实现的对象。
一个简单的工厂方法的结构:

interface service{
    void method1();
    void method2();
}

interface serviceFactory{
    service getService();
}

class implement1 implement service{
    void method1(){
        system.out.print("implement1 method1")
    }
    void method2(){
        system.out.print("implement1 method2")
    }
}
class implement1Factory implement serviceFactory{
    service getService(){
        return new implement1();
    }
}

class implement2 implement service{
    void method1(){
        system.out.print("implement2 method1")
    }
    void method2(){
        system.out.print("implement2 method2")
    }
}
class implement2Factory implement serviceFactory{
    service getService(){
        return new implement2();
    }
public class Factories{
    public static void serviceconsumer(serviceFactory fact){
        service s = fact.getservice();
        s.method1();
        s.method2();
    }
}
}

21、需要工厂模式的一个原因,创建框架。p187

22、第9章总结 p187

今天就到这儿吧~~

最后分享一首《四月是你的谎言》OP给大家听听吧:)

这里写图片描述

猜你喜欢

转载自blog.csdn.net/breavo_raw/article/details/74894144