绿林网

Java核心技术・卷 I(原书第10版)经典读后感有感

Java核心技术・卷 I(原书第10版)经典读后感有感

《Java核心技术・卷 I(原书第10版)》是一本由[美] 凯.S.霍斯特曼(Cay S. Horstmann)著作,机械工业出版社出版的平装图书,本书定价:CNY 119.00,页数:711,特精心收集的读后感,希望对大家能有帮助。

《Java核心技术・卷 I(原书第10版)》读后感(一):读到十二章,一些感想

翻译根本就不懂啥时候该英文,啥时候该中文。对我来说,看原版或许比较好。

另外,java库向后兼容做得不错,导致库很多设计很恶心,比如collection和collections,我也不是很理解为什么WindowAdaptor不叫AbstractWindow,标准库还残留vector等垃圾。

我没有大规模项目经验,所以我觉得c++的模板确实比java泛型更简单,毛病更少,更好。正所谓,keep it simple, stupid。

《Java核心技术・卷 I(原书第10版)》读后感(二):强烈不推荐

首先,很不喜欢这本书的排版方式。

1. 在介绍具体的关键字之前,却总是提前使用一些新的关键字。

2. 重复的代码,明明可以直接使用大块的代码,直接引用解释,非得把代码拆块,最后总结,而且拆开的代码还总是加上各种省略号。让人不知所云。

3. 还有讲解的时候缺少逻辑,给人一种堆代码的感觉。没有实际的需求和发展线路,只是简单的介绍一下各种类的各种方法。

4. 最后还有超前使用后面代码的内容,比如swing编程放在了多线程前面这种。

其次,多线程那一章,也就是最后一章,感觉写出来就是给人骂的。混乱的逻辑,看似讲了很多,实则有用的很少。

最后,在联系实际情况的时候,跳跃性太大,给人感觉不是给新手入门的用的。是给有了多年开发经验人看的。然而看这本书的前几张,可以看到,这本书就是向让入门的人可以看懂的。这种情况在泛型拿一章尤为明显。

《Java核心技术・卷 I(原书第10版)》读后感(三):Java核心技术・卷 I(原书第10版)

收到这书还是比较激动的,不知不觉这书都已经更新到第十版了,未来还会有更多 的版本,华章计算机一直致力于把最新技术引进中国。

本书是最新的javase8的全面更新,这本书尽管卷一讲解了基础知识,但是如果本身没有任何语言基础,学习本书还是有一定的难度的。本人基本上是零基础学的,发现有难度,华章计算机出版的另外一本《java语言程序设计基础篇第十版》这本书可以说非常适合零基础的人看。当然如果你有一些C语言或者c++基础,看起来会非常轻松。可以发现本书一大特色是在讲解java的过程中作者举出了c++和c语言进行了对比讲解。我们都知道java和c++是在c语言的基础上发展的,这就是为什么java也叫c--了。我们知道通过对比来分析看书是非常高效的。eg:

c和c++区分变量的声明与定义。

int i=10;是一个定义,而

extern int i;

是一个声明。在java中,不区分变量的声明与定义。

此外,书中列举了API文档,学习java必须会看API文档。书中除了大量代码供练习外,还说明了编程规范风格。在变量初始化那里,作者说:“变量的声明尽可能地靠近变量第一次使用的地方,这是一种良好的程序编写风格。”代码当然是越简洁明了的最好。网上也有不少人说此书的不好,比如说有的地方太简单了,翻译不好,排版不好等等。但是此书是对所有人的,关于翻译既然是翻译就没有十全十美,有能力可以去看原版啦。排版嘛!作者肯定有他的道理。当然,我也只是大致看了一下没有完全看完

《Java核心技术・卷 I(原书第10版)》读后感(四):好书写的不错,我简要总结了75个知识点

这本书自从我看完之后,很多地方给我留下了印象。作为一个学习过c++、php、golang的人。

1)java是区分大小写的

2)java的类名必须和文件名一致。

3)一个文件只能有一个public类。

4)类型长度是固定的。才能实现跨平台。

5)类型是自动转换的,不用像go那样去强转。比如基础类型转化为类,装箱和拆箱,不过这个的比较也会导致问题,推荐equal方法。

6)java支持短路计算。

>>>用0填充高位,而双是符号填充高位。没有<<<。

int<<需要模32,long<<需要模64。所以35实际上是3。67实际上是3。模得过大没有意义。

7)本书基于java8,本书强调和cpp的差异对比。

8)拼接可以自动转换类型。也可以join。

9)字符串不可修改,但是可以赋新值。不可变的好处是可以共享。

10)字符串的==比较是指针行为。所以字符串比较要用equal方法,本质上对象比较都应该用equal方法。

11)如果在一个null值上调用方法,会出现错误。所以要判空,但是用optional也不一定方便。

12)java有个手册可以翻阅。

stringbiulder和stringbuffer(线程安全,多线程编辑)。

13)在Java应用程序的main方法中,程序名并没有存储在args数组中。这个是区分其他语言的地方。

14)声明对象其实没有实例化,近似于一个空指针,一定要new才行。

15)构造器,都是在堆上分配的。但实际上没有想象的那么难管理。

16)访问器,纯取不改。getter。可以用@Data注解来实现。

17)final构造器之后不能再修改。类内部常量都应该标注final。

18)每个类都可以包含自己的main方法来进行单元测试,build之后运行就是执行它的main方法。可以作为一种方式吧。golang里面直接是test文件放一起就行。个人觉得这一点不如go。

19)java的基础类型是值传递传参方式。类参数是引用传递。

20)import *不会意外增加包大小,实际大小。

21)让类不可变,这样就能线程安全。

22)this()初始化自己,super()初始化父类。

23)继承层次,继承链。只能单集成,但是可以多implement。

24)可以用object接收对象,并通过强转回原对象。所有数组都扩展了object对象。还可以用instancef来判断实际类型。

25)写一个安全的equals方法,override。

26)hashcode的结果是,字符串相等的,对象是地址。

27)相等的两个对象需要相同的hashcode。

28)相加需要实现tostring方法。

29)装箱操作和拆箱操作,是利用多态做的折衷。直接判断有严重的bug。

30)java是值传递的。对象是引用复制。

31)想要实现排序服务,必须实现compareTo

32)类优先,当接口和父类有函数冲突时,类优先,如果接口多函数冲突,则必须覆盖实现。如果一个接口中是默认方法,另一个不是默认,也需要覆盖实现。

33)只有5%的标准类有clone,很笨重。

34)lambda表达式就是闭包。不能修改,会有线程安全问题。

内部和外部都不能改。

35)避免多类型装箱??

用美元符号分隔内部和外部类,模拟器不知道。

36)只有内部类可以static。

37)runtimeexception 越界,空指针,类型错误。程序员的错。非受查类型。一定要throws提示受查异常,否则进程就异常退出了。子类不能首先抛出受查异常,所以要捕获掉。不声明throws就不能抛出任何受查异常。

其它异常。网络或者环境的错误。

可以抛出的都是throwable的子类。

38)getCause,用来包装多层嵌套的代码异常。

早抛出,晚捕获。

39)断言是在测试期间运行,在发布时不运行。

40)每个类中放个main,快速启动单元测试。

41)全局默认静态捕获。静态变量是进程级的存储。

42)使用变量E表示集合的元素类型,K和V分别表示表的关键字与值的类型。T(需要时还可以用临近的字母U和S)表示“任意类型”。

43)T extends a & b

44)标签接口,没有方法的接口。

45)虚拟机中没有泛型,只有普通的类和方法。

·所有的类型参数都用它们的限定类型替换。

·桥方法被合成来保持多态。

·为保持类型安全性,必要时插入强制类型转换。

46)不能用类型参数代替基本类型,得是大写的类。

Pair 只是一个pair类型。跟string无关。instanceof .class getClass 。

47)增加注解@SuppressWarnings(“unchecked”)。可以忽略问题。

48)禁止使用带有类型变禁止使用带有类型变量的静态域和方法。

Pair是一对值,Map是集合。

List>和Map<>类似。

@SuppressWamings("unchecked"); 可以用来屏蔽警告;

禁止使用带有类型变量的静态域和方法;

49)T extends Throwable, 可以抛出异常的类型;

throw (T) e; 抛出T类型的异常;

Block.throwAs(t);

50)泛型擦除,就读不到泛型的信息了。??那是什么效果呢?

51)通配符?不能用来声明变量;

队列可以用循环数组或者链表来实现。

2021-10-05 22:36:44

52)LinkedList对象不做任何缓存,所以get(0)这种动作,其实是复杂度很高的方法;最好是走hash;★ 因为每次都是全表扫描。

所以走迭代器来遍历,效率高;

53)随机访问最好用数组;

List是数组,所以迭代器或者随机访问都没问题;随机访问有并发限制;迭代器没有并发问题,但是不能在遍历时remove;各有优劣;遍历LinkedList时,使用removeFist()或removeLast()效率最高。但用它们遍历时,会删除原始数据;若单纯只读取,而不删除,LinkedList遍历时建议使用For-each或者迭代器的方式。千万不要通过随机访问去遍历LinkedList!《参考》

LinkedList不要用随机访问,因为性能很差;

54)在不需要同步时,使用ArrayList;线程不安全,但是比较快;

55)如果需要同步,则使用Vector,线程安全;但是耗费时间;

56)JAVA中,hash表用链表实现;当链表条数(桶数)满了,冲突就会很大,一般75%-150%比较合适;

57)慢了就要按装填因子重新rehashed;

hashset就是用散列表来做的;

58)treeset是一个有序集合,使用红黑树实现;

59)优先级队列采用堆排序;

60)SortedMap,错过的东西,我不在乎;

61)枚举方式来遍历:

for(Map.Entry entry:staff.entrySet()) {

String k = entry.getKey();

Employee v = entry.getValue();

entry.setValue(one); // 更新为新值;

}

62)弱散列映射,因为桶是活动的,所以用不到的对象不会回收;需要自己删除;

weakhashmap可以周期性的检查队列,删除对应条目;

63)视图:利用原映射做操作,返回了一个collection和map接口的对象;

例如Arrays.asList方法,

而staff.subList(10,20);是前闭后开。

64)视图,就是在原生结构的基础上,返回一个支持某些特性的新代理对象,用来完成特定的操作

比如原来是集合,返回一个list视图,就可以支持list操作;

还有很多不可修改一的视图;

视图有很多限制,比如有些不能修改,不能改变大小,不支持插入(只能删除);

staff.sort(Comparator.reverseOrder())

staff.sort(Comparator.comparingDouble(Employee::getSalary).reversed())

Collections.shuffle(cardArray); // 打乱;

Collections.replaceAll("c++","Java");

65)属性映射;那就是key和vale都是字符串类型,可以保存到文件和加载出来;默认的辅助表;

peek是返回栈顶元素,但不弹出;kafka支持吗?

2021-10-06 21:21:51

66)部署;

jar文件是压缩的,使用的是zip压缩格式;★

jar cvf 00.jar *.class icon.gif

MANIFEST.MF,清单文件;META-INF目录中;

jar cvfm 00.jar resource/ResourceTest.mf resource/*.class resource/*.gif resource/*.txt

java -jar ResourceTest.jar

67)对包进行密封;所有的类要放到一个jar文件中;

System.getProperties(); // user.home;

2021-10-07 09:49:37

68)不要直接调用线程的run方法,而应该是start;

可以用interrupt来请求终止线程,线程内部定时检查isInterrupted(),如果阻塞了就不能及时检查;

69)抛出InterruptedException异常,需要捕获;

new thread,线程成为new状态;

start之后,是runnable状态;

等待调度器,是等待状态;

等待锁,是阻塞状态;

70)可运行而不是运行,因为cpu时间片被切走了,所以实际没有在运行;等回来继续;

线程退出的原因:run结束了;异常未捕获;stop调用杀死(抛出异常),过时了;

71)最好不要用线程优先级;

守护线程不要去访问资源,其他线程退出,才退出;在其他线程启动之前启动;

72)不要字节集管理线程组,有更好的工具;

Runable r = () -> { System.out.print(1); };

Thread t = new Thread(r);

t.start();

73)直接在一个新的线程中执行代码片段;

公平锁偏爱等待时间最长的线程;降低了性能;比常规锁慢;

74)volatile,可能存在并发更新。

final对象需要在构造完成之后才对外可见。

75)java死锁只能重启。

本文由作者上传并发布(或网友转载),绿林网仅提供信息发布平台。文章仅代表作者个人观点,未经作者许可,不可转载。
点击查看全文
相关推荐
热门推荐