《Thinking In Java》作者:不要使用并发!

深入理解Java:《Thinking in Java》中文版要点解析 本文还有配套的精品资源,点击获取 简介:《Thinking in Java》是Java编程领域的经典教材,涵盖Java语言核心概念至高级主题。此书不仅教授语法,更注重培养编程思维。新版包括基础语法、面向对象编程、集合框架、泛型、异常处理、多线程、I/O流、反射、注解、高级并发特性、内存管理以及设计模式等关键知识点。无论是初学者还是进阶开发者,都能通过实例学习提高Java技能... 阅读详情

前言

今天纯粹就是带你们来读读书的~

最近除了工作,特地买回了自己很喜欢的作者新发售的一本书《On Java》,作者是我的老朋友布鲁斯·埃克尔,在Java领域很有名,你可能没听过他的名字,但极有可能听过他的另一本书《Thinking In Java》,我想很多Java工程师都读过这本书,可以说是Java编程思想的良心之作。

虽然布鲁斯是我的老朋友,但我不得不吐槽一下,大概通读了一遍《On Java》之后,我心里大体认为是不如《Thinking In Java》的,可能和写小说一样,读者的要求高了,而作者的年纪大了。

我认识布鲁斯很多年了,他是个比较幽默风趣的人,经常在书中直言不讳某编程语言的垃圾之处,同时又对该语言的未来做一点展望,算是一个很中肯且典型的直男程序猿。

最后说一点,我认识他,他不认识我。

正文

我着重看了自己比较感兴趣的并发编程这一块,想知道这位大佬对于目前Java并发编程是否有新的看法和意见,不出我所料,他没讲什么重要的东西,但是好像又讲了,带着吐槽批判式的口吻,陈列了他喜欢和讨厌Java并发编程的地方。

所以我把一些我觉得有意思的地方画出来,分享给大家,看看一个资深Java大佬对并发编程的理解。

1、大佬的并发定律

其实看到作者研究出的这4条定律时,我还是挺意外的,第一句就点题了,不要使用并发。

仔细想想好像也对……再琢磨一下咦有感觉……最后回忆一下这些年参与的项目……哇擦好有道理!

接下来3条基本算是总纲了,后面的内容都是对这几条的说明。

2、你已埋下的隐患

这里就是对2、3条的具体说明了,有些话我觉得略显啰嗦,我把对于程序员来讲比较重要的一句话画出来了。

你很容易写出一个看起来运行正常但实际上有问题的并发程序。

看到这句话的时候是不是已经开始默默打开自己的IDEA了,然后审视了一遍自己提交的代码?

别看了,你埋的炸弹还少么,能看出花来吗。

看清楚作者后面那句:你这个问题只有满足最罕见的条件时,才会将自己暴露出来。

我可以这么说,在座绝大部分同行去了下一家公司干活,可能上一家公司的新同事才会在你毫不知情的时候默默踩到你埋的地雷然后被炸个粉碎,而你在新公司也正在踩别人的雷,出来混都是要还的。

3、别否认你就是这种人

看到这里的时候,我忍不住亲了布鲁斯一口,他痛快的描述出了我一直以来在工作中说不清道不明的烦躁,因为你总会遇到这样的人,同时很难发现自己到底是不是这样的人。

我在工作前3年其实如履薄冰,感觉自己什么都学了,但去了公司发现什么都不会,怀揣着自我否定一点点完成别人布置的任务,直到工作5年以后才有一种醍醐灌顶的感觉,理解了自己做的是什么,接下来要学习哪个方向,以前学到那么多东西究竟是怎么串联起来的,这是一种打通任督二脉的满足感。

等到工作8年之后,才真正开始回头看Java语言,对以前烦厌欲呕的Java基础提起莫名的兴趣,同时喜欢看书,写案例,尝试阅读别人的源码等等,此时我才真正有自己一只腿迈进Java领域的意识。

同时,在工作中会对许多能力一般但沟通较为偏执的同事产生抵触情绪,我有时会认为这是一种大人看小孩耍脾气的感觉,这个只有在工作多年之后才会产生,作者很准确的阐述出了我描绘不出的这种解释。

同样的,我认为在这个成长的过程中,我一定也成为过别人心中眼高手低的人。

我在这里能分享给大家的经验就是,在工作中多学习少争论,多和厉害的人走近一点,虚心把对方的东西都学过来,长此以往你会进步神速,这不是你在网上学习能得到的,一定是在工作中。

4、高级Javaer都有过的想法

[图片上传失败...(image-a2c30c-1665106091146)]

这里我为什么专门画出来,因为很多高级javaer一定有过类似的想法,就是发现了Java并不擅长做并发编程,是否可以用其他语言来完成,而Java只做他自己擅长的事。

至少我以前就想过,可现实层面我认为是异想天开的,尤其是工作中,基本都是团队开发,这种想法就已经几乎被pass掉了,同时为了某一个领域的实现专门引入一门编程语言甚至体系,得不偿失,毕竟Java不擅长但却成熟,光是网上卖课郎告诉你的就有N种诸如《Java千亿级高并发解决方案》、《Java万亿级电商实战》等等这样的受用终生的鬼东西。

而你辛辛苦苦跟着学完后,发现玛德用不上,就像你学了《九阴真经》后以为可以当武林盟主最终却进了铁匠铺,而铁匠铺老板还不想听你鬼扯只想让你每天加班多打几把武器。

图片中我还画了个圈,我想不少人应该知道这门语言,还蛮有名的,就是国内不太火,这有编程历史因素在里面,其实还有一门语言也蛮适合的,而且这几年也挺火,我想你也猜到了,我觉得5年+的Java工程师都应该关注甚至学习一下。

5、我和大佬不谋而合

这是接近尾声的部分了,也是这位作者熟悉的笔法,发泄完自己的情绪后又开始对Java的某新版本极尽赞美,典型的被PUA了。

但不得不说,Java8我也认为是革命性的版本,在这个版本发布以前,作为Java工程师你甚至不会想到它敢做到这个地步,就像布鲁斯书中讲的,这是史诗般的魔法。

你可以在Java8的版本里发现一些其他语言的影子,这没什么,天下语言一大抄,发展到一定程度,已经是避免不了的趋势了。

重要的是,这个版本给Java上油了,为后续的版本提供了活力,而Java17作为官方长久支持版本的其中一个非常重要的版本,你可以发现有其他框架给它背书,比如SpringBoot3只支持Java17,而Jenkins也宣布在新版本放弃Java8并且该团队更推荐Java17,IDEA后续新版本可能也会放弃Java8,这明显就是小圈子,有利益的勾连,但对Java本身发展不是坏事。

所以,Java8的核心技术点最应该学习,如果现在还一点不会,赶紧学吧,我认为这是后续版本的基础了,lambada表达式、stream流不必说了,是Java8版本的核心技术,CompletableFuture作为Java8并发编程中最大的改进要花时间好好学习,这也是本书作者所提到的,而且后面专门花了一个大章来讲CompletableFuture。

作者虽然一直强调不要使用并发,但却对Java8的并发编程工具花了较大篇幅,我个人认为他更多的是一种见猎心喜,可是我们面试经常会问到这个工具类相关的东西,看一下大佬对该工具的理解还是很有用的。

总结

《On Java》这本书说实话,我觉得没有作者的《Thinking In Java》写得好,可能有多种原因导致。

我说下我觉得不好的主要感受在哪里,一是有些地方翻译的不好,会给你带来困惑,二是作者给出的一些案例有自己的风格,而且例子我没觉得那么通俗易懂。

但总体上还是值得一看,尤其是他穿插了很多和其他如C/C++、GO等语言的比较,还包含了自己对Java的理解,尤其是一些编程思想很直接,最后给出了林林总总有接近70条的编程指南,我认为对于初学者树立未来工作中的编程思想是很有用的。

这位作者的文字中弥漫着一股浓烈的不推荐使用并发编程的味道,我觉得是他多年工作的心得,所以大家在往后的工作中不妨可以借鉴下大佬的思维。

好了,我今天也就是带你读了下书,读的还开

《Thinking in Java 3》:Java编程权威指南 本文还有配套的精品资源,点击获取 简介:《Thinking in Java》第三版是一本深入浅出地介绍Java语言核心概念和技术的权威指南,旨在帮助读者建立坚实的Java基础。书中详细讲解了Java的面向对象基础,类和对象的使用,接口的多重多态性,包的组织和管理,内存管理和垃圾回收,异常处理,集合框架,泛型以及多线程编程等内容。同时,它还包括了输入/输出流、网络编程、反射、... 阅读详情

相关推荐

STM32F411CEU6实战:用W25Q64存储多张图片,在240x240 LCD上轮播显示(附源码)

本文详细介绍了如何使用STM32F411CEU6通过SPI接口管理W25Q64 Flash中的多张图片,并在240x240 LCD上实现平滑轮播显示。内容涵盖硬件配置、图片存储方案设计、轮播系统实现及性能优化技巧,特别针对SPI传输优化和多图存储管理提供了实用解决方案。附源码,适合嵌入式开发者参考。

weixin_32025789的博客 308

我用了两年时间去读《Thinking in Java》

路漫漫其修远兮,吾将上下而求索。 ——题记 我用了两年时间去读《Think...

让学习编程变得生动有趣~ 2万+

Android 白名单保活实战:主流厂商适配指南

本文详细解析了Android应用白名单保活的实战策略,重点针对华为、小米、OPPO、vivo等主流厂商的系统特性,提供了精准的后台设置页面跳转适配方案。文章从基础的前台服务实现讲起,深入讲解了白名单的判断、申请与厂商适配的核心代码与避坑指南,旨在帮助开发者合规、稳定地提升应用后台存活率。

motor的博客 1861

《Thinking in java》笔记

《thinking in java》引发的思考 关于java面向对象的思考——抽象、并发 thinking in java中1.1抽象过程的描述 问题空间——>解空间的映射(所有问题最终都是列表,所有问题最终都是算法,面向对象) 对象是现实世界的抽象,到解空间中很好表述 难点:如何在问题空间的元素 到 解空间的对象之间创造一一对应的映射 java中的不足——interface、abst?、 (1.必须先定义最高层[或者使用适配器方式] 2.类似的类如何高效的相互复用[比如...

__一叶__的博客 1134

【STM32】STM32 CANFD外设的几种消息接收过滤模式

在控制器区域网络(CAN)系统中,正确配置消息过滤器对于有效管理网络通信至关重要。特别是在使用Flexible Data-rate Controller Area Network(FDCAN)时,选择合适的过滤器类型可以大大提高网络效率和消息处理速度。

林愿留的博客 6226

海德汉机床采集数据

海德汉数控系统我一般在高端机床上见得比较多。有好多五轴加工精度比较高的机床都用的是海德汉的系统。市面上常见的有530和640等型号。海德汉的采集还是有点难度的,需要对SDK有深度的了解。

若云流风的专栏 1529

Thinking in Java

Thinking in Java (Java编程思想) 学习总结心得(一) 前序: 学习java也已经有大约两年时间,但大多数断断续续,零散没有系统学习。这次经多方推荐购买了一本java学习必读书籍《Thinking in Java》学习之余将书中的心得和书中的重点内容总结写于此。 第一章 对象导论 我们之所以将自然界分解,组成各种概念,并按其含义分类,主要是因为我们是整个口语交流社...

周日王的博客 1306

《SOC架构-ARM架构-文档导读》-目录

小白请看“Armv8/Armv9架构从入门到精通”专栏。以翻译为主的,深度深度深度深度/深入深入深入 学习ARM架构的文章。

baron-周贺贺-代码改变世界ctw 2085

ThinkingInJava-java编程思想总结

java编程思想

nakey_xie的博客 1481

零基础快速学习 ABAP 读者意见反馈和下一步写作计划表

大家在学习教程过程中,如果有任何关于 SAP ABAP 开发方面想了解的内容,可以直接在教程各篇文章下评论留言,我会将大家的意见统一汇总到下面的表格,作为我更新教程的内容参考来源之一。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4273

2万字大厂面经:小米嵌入式面试题及参考答案(持续更新)

BIOS (Basic Input/Output System) 是一种存储在ROM中的固件程序,它为计算机提供了最基础的硬件初始化和服务。BIOS主要存在于传统的x86架构计算机中。嵌入式系统的启动流程取决于具体的硬件平台和所采用的操作系统。复位阶段:当系统通电或复位时,CPU进入复位状态。硬件初始化:CPU和必要的硬件设备(如内存控制器)被初始化。加载引导加载程序:引导加载程序(如U-Boot)被加载到内存中。执行引导加载程序:引导加载程序开始执行,初始化更多的硬件设备,并检测存储介质。

大模型大数据攻城狮的专栏 2529

《Thinking In Java》作者:不要使用并发

1、大佬的并发定律 2、你已埋下的隐患 3、别否认你就是这种人 4、高级Javaer都有过的想法 5、我和大佬不谋而合……

xiangyangsanren的专栏 371

Coverity本地增量C/C++代码检查(Linux)操作简介

Coverity 是一款精确的综合静态分析与应用安全测试 (SAST) 平台,它可以在编写代码时发现关键的缺陷和安全缺陷,防止它们变成安全漏洞、故障或维护缺陷。

1483

《Thinking In Java》 VS 《Effective Java》 VS 《深入理解Java虚拟机》

今天刚考完试,在5天以前的前4个月时间里,我很庆幸自己选了一个看书的学习途径。从上个学期的暑假到现学期的11周里面,读了《Thinking In Java》、《深入理解Java虚拟机》和《Effective Java》,感悟颇多。首先先说明一下,我以前是看视频学习的,就做过两三个学校的网站,都已经上线在使用。没做过什么特别高大上的东西,所以我是处在新手的角度去读书的,我也知道自己的理解很浅,不

小浩子的博客 2万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Thinking in java目录概述

文章目录目的整书概况总结 目的 为什么要选取《Thinking in java》这本书? 语言本身:Java程序语言在实际场景开发中有非常多的通途,许多互联网产品的basic依托于java语言来实现 书籍:我始终认为思想性的东西是最重要的,可以为自己的行为划定标准,知道什么样的思考方向是合理的,基本的思考框架应该是什么 阅读书籍首先应该对整本书有一个初略的了解和认识。 整书概况 通过阅读目录大...

在黑夜中前行 1349

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Thinking in Java:并发

PS:一个任务对象可以由多个线程执行 1.并发的意义:从性能角度看,如果没有任务会阻塞,那么单处理器机器上使用并发就没有任何意义 使用Executor 1.Java SE5de Executor将为你管理Thread对象,从而简化了并发变成。Executor允许你管理异步任务的执行,而无需显式地管理线程的生命周期,因此是启动任务的优选方法。通过Executors的静态方法创建

zhangqix的专栏 816

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Thinking in Java 源码的获取以及编译问题

《Java编程思想》的源代码的获取、编译过程,以及编译中碰到的错误。还有Ant程序的获取和配置。

pdcxs007的专栏 5272

《Thinking in Java》读后总结与感想

作为Java界的四大名著之一《Thinking in Java》一直备受推崇,我很早就知道了这本书,当时只是初涉Java,粗略的翻了翻之后觉得看起来这本书讲的比较深就没有再去碰它,后来Java基础学完之后又忙着学Android开发的知识,就一直没把这本书当一回事。重新将它拿起是去年的事,当时朱凯大神向我推荐了这本书,我当时决定把它找出来认真仔细的读一读。对,就是下面这本(用的是百度百科的图):

Preacher_Qiao的博客 8288

深入Java编程:《Thinking in Java》第四版代码库推荐

深入Java编程:《Thinking in Java》第四版代码库推荐 项目介绍 《Thinking in Java》第四版是由Bruce Eckel编写的经典Java编程书籍,涵盖了Java 5/6的核心概念和技术。本书不仅提供了丰富的理论知识,还附带了大量的代码示例,帮助读者深入理解Java编程的精髓。为了方便读者学习和实践,本书的代码库已经开源,并托管在GitHub上。通过下载和安装这些代码...

gitblog_00164的博客 865

运行Thinking in Java里的codes

Thinking in Java的配套代码实操

TVXQ_xy的博客 1271

跪了跪了!!继Thinking in java 4th 的后续其实是 On Java 8,而不是 Thinking in java 5

之前购入thinking in java 4th 英文版,部头太大,也是第一次接触oop,业余时间学习,直接上这部书就是坏主意。不过好歹挺过来了,扫了一遍,写了个小安卓APP。 但是很快发现,现在已经盛行java8了,java9页已经发布beta版了,还有kotlin。对于java5学到一半的人可谓尴尬,怎么进行过渡是个大问题。 很快只能继续找Bruce Eckel先生了,网上,尤其是中文网,基本都在找thinking in java 4th ,第五版的消息基本很少看到,看到也是噱头加广告。 于是只能Go

weixin_55932015的博客 442

Thinking in Java 附录之推荐书籍

陈昊鹏等翻译自Thinking in Java 第三版书籍Thinking in Java, 2nd Edition。本书所附光碟里就有此书,这是一个包含了完整索引并以颜色突出语法的HTML版本。你也可以从www.BruceEckel.com 免费下载。它还包含了一些没有收录到第三版的内容;详细情况请参考书中的目录。Thinking in Java, 1st Edition。本书所附光碟里就有

sunsnowad的专栏 2154

《Thinking in Java》和《Core Java》

     《Thinking in Java》和《Core Java》都是java中的经典书籍。也是很多刚接触Java看的最多的两本书。最近又把这两本书好好的翻了一遍。      core java非常适合第一次接触Java的人,我很庆幸当时看的就是这本书。分为上下两卷,我把上卷看完了,下卷用到的时候再查。我发现它里面java的语法介绍的非常细致,例子也举的恰到好处。让人一看就懂,并且每个例子

oracs的专栏 1万+

Thinking in java 习题答案

这个是我在学习thinking in java过程中所做的习题(不全),和大家分享,希望能共同进步以下是下载地址: http://211.155.234.58/coa/download.html     ----------------------------------------------------------------------------------

天堂来客 3057
上一篇: RestTemplate使用详解
下一篇: 2022年Java进阶架构师的必备思维导图,让你少走弯路!
Java技术那些事儿
博客等级 码龄5年 2306粉丝 2584原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值