编辑推荐
                                        一直在寻找一本能够快乐教大家学编程的书,今年碰到王洋老师,被他的“教育是用生命影响生命的过程”而打动!再仔细看他的书,一看不忍释卷,不是一般的有趣,简直是相当的有趣,真如王洋老师自己所说的,他学中文的妻子也跟着《Java就该这样学》学会了Java编程!
  让我们一起来随着《Java就该这样学》玩代码吧!
  
  
      商品《Java就该这样学》有两版印刷封面,随机发货!
  
  
  
  
  
      内容简介
     《Java就该这样学》基于建构主义教育思想,通过大量循序渐进的案例,让学生在体验中掌握Java语句,同时获得编程能力、排错能力和学习能力。《Java就该这样学》多次使用陷阱式教学法,帮助学生深刻理解所学知识,理解面向对象编程思想。《Java就该这样学》详细介绍了Java程序设计的开发环境、概念和方法。内容分为四个阶段:小案例阶段、小案例推动大项目阶段、重点建立复杂编程逻辑阶段和综合大项目阶段,用于巩固面向对象编程思想,并且弥补即时聊天项目在数据库应用上的不足。
  《Java就该这样学》内容和组织形式立足于高校教学教材的要求,适用于从职业院校到重点本科院校的课程和学生群体,可以作为Java语言入门教材,或者面向就业的实习实训教材,同时也可以作为计算机技术的培训教材,读者完全可以通过本书自学Java技术。
     作者简介
     王洋,国家软件出口中心首席IT教育专家,10年知名IT企业CTO从业经验,9年IT教学培训从业经验。曾在清华、北大、北理工、北航等近百所国内知名院校做技术演讲,近5年每年在全国各高校进行130多场技术讲座,反响热烈。
  “基于学生认知曲线的项目驱动教学法”创始人,通过该方法培养出来的教师多次获得学生综合测评满分的成绩,近万名学生接受过该方法的学习和指导,学生覆盖清华、北大的研究生,985、211知名院校的本科生、专科生。
     内页插图
          目录
   第1部分 认识Java程序 
1.1 写代码前的准备 
1.1.1 程序的入口 
1.1.2 初步理解类和对象 
1.2 画王八 
1.2.1 运行Java程序 
1.2.2 绘图 
1.3 满天星星 
1.4 飞行的小球 
1.4.1 使用线程 
1.4.2 线程的生命周期 
1.5 小球撞墙 
1.6 下大雪 
1.7 键盘控制小球 
1.8 打字母的游戏 
1.9 鼠标控制小球 
1.10 第一阶段总结  
第2部分 开始一个项目
2.1 聊天界面 
2.1.1 任务描述 
2.1.2 做按钮 
2.1.3 Java的布局思想 
2.1.4 登录界面 
2.1.5 主界面 
2.2 响应用户输入 
2.2.1 任务描述 
2.2.2 事件响应 
2.2.3 关于字符串内容的比较 
2.2.4 取得用户名和密码 
2.2.5 用面向对象的思想重写 
2.2.6 上溯和下溯的讨论 
2.3 IO流 
2.3.1 任务描述 
2.3.2 读一个字符 
2.3.3 读整个文件 
2.3.4 复制文件 
2.3.5 复制大文件 
2.3.6 文件的加密/解密 
2.3.7 异常的干扰 
2.3.8 字符流 
2.3.9 实现聊天记录 
2.4 建立网络通信 
2.4.1 什么是网络 
2.4.2 在网络上传消息 
2.4.3 到服务器验证用户名和密码 
2.4.4 将聊天信息发送到服务器 
2.5 数据库访问 
2.5.1 接触MySQL 
2.5.2 创建和删除数据库 
2.5.3 创建、修改和删除表 
2.5.4 关于数据库设计 
2.5.5 学习添加、删除和修改数据 
2.5.6 查询数据 
2.5.7 SQL复习 
2.5.8 用Java访问数据库 
2.5.9 用户身份验证 
2.5.10 将代码融入项目中 
2.5.11 讨论反射 
2.6 应对多用户访问  
第3部分 获得逻辑能力 
3.1 用数组实现的记事本 
3.2 使用链表的记事本 
3.3 让Java系统库帮助你 
3.4 思考面向对象和面向过程的不同 
3.5 深入学习ArrayList和LinkedList 
3.5.1 泛型 
3.6 Set集合 
3.7 试试二分查找法,理解二叉树 
3.8 复制一个目录的内容 
3.9 Map 
3.10 保存用户的Socket 
3.11 同步用户名 
3.12 多用户转发逻辑  
第4部分 理解面向对象 
4.1 用面向对象的思想重写聊天程序 
4.2 做一个数据库的管理工具 
4.3 驾驭JTable 
4.4 有更好的方法驾驭JTable 
4.5 用面向对象的方法驾驭JTable 
4.6 完成资源管理器 
4.7 有没有更好的参数传递方式 
附录A 准备编程环境      
前言/序言
     关于学习 
  一直以来人们都认为教师和书籍是知识的载体,教学过程就是将知识传递给学生,于是书上写满了正确的知识,学生看书就可以迅速掌握知识,理论上这是高效率的系统。事实上只有极少数人能够适应这样的系统,因为这些知识也是有人经过一个过程得到的,忽略了发现知识的过程,而直接将结果传递给学生,似乎高效率,但是学生却常常无所适从,因为学习是发现知识的过程,而不是记住知识的过程。 
  好在建构主义教育思想指明了更加适合学生的教学过程,在这一思想下,书和教师从正确知识的传递者,转变成探索知识的引领者,带领着学生去体验、去感觉、去发现属于学生自己的知识。正如这本书,读者会发现有60%的内容是不正确的,这些错误是学习过程避免不了的。优秀学生的不同之处就是,通过自己的努力在到达学习目标的道路上,不断地调整,将错误的理解剔除掉,问题是大多数学生无法完成这个过程,要么陷入错误的包围中,最终放弃了探索,要么通过死记硬背来达到学习目的,结果是学生能够通过考核,却没有运用知识的能力。学习离正确的轨道越来越远,甚至很多人迷失了学习的真正目标,将记住知识作为唯一的目标,很多教育者苦苦探索的正确的教育途径,在教育理论研究中早已经被发现,那就是建构主义教育。 
  建构主义教育思想从来不认为掌握知识是学习的最终目的,我认为学习的目标是认知、能力和精神。认知和知识是不同的,知识停留在人的头脑中,而认知是能够被熟练使用的知识;能力在不同的领域是不同的,在这本书的范畴内,一个优秀的Java程序员,需要有编程的能力、排除错误的能力、探索新技术的能力;如果学习的目的仅仅是为了掌握一项技术,那么人终将会被新的技术手段所替代,任何学习过程都需要是生命价值的提升,一个程序员需要有严谨的态度、专注的品质、探索的精神和创新的意识。这些学习目标不是一节课或一个章节的任务,而是需要通过整个教学过程来建构。 
  一直以来学生的学习动机都是教育理论界热衷讨论的话题,我认为学生学习的动机有三个方面:一是为了获得喜悦,二是为了消除恐惧,三是自我效能。好的成绩可以获得家长、老师的表扬,可以有更好的名次甚至奖学金;而差的成绩会被批评、留级,甚至拿不到毕业证。我们发现普遍的教学手段是为了推动学习动机的前两个方面,这造成了两个可能的结果:一是有些学生对于奖励或者惩罚麻木了,一旦丧失了学习动机,自然好的成绩就无从谈起;二是在另外一些学生身上,这些手段一直能够起作用,我们会得到所谓的好学生,问题是,这些动机是外界推动的,而非内生的,这些习惯于此的好学生或许一生都在意别人的评价。如果教学过程能够激发学生的自我效能,让学生的学习是基于自己强烈的爱好和成功的喜悦,我们就一定能够培养出优秀的学生,而他们也将一生受益。 
  问题是,为什么建构主义教育思想如此的好,却很少在教学实践中应用?这是因为建构主义和现有的教学形式相比仍有些弱点: 
  第一,建构主义教育的效率理论上比较低。现在我们能够在短时间内将大量的正确知识传递给学生,学生只需要理解记忆就好了,而建构主义教育要呈现知识探索的过程,这样会消耗更多的时间和精力。 
  第二,建构主义教育的效果不可控。学生是通过体验自己发现整合知识,那么不同的学生或许得到的结论不同、深度不同。 
  第三,考核困难。我们不能再用知识点来考核学生,因为教学过程中就没有传递经典的知识点。 
  第四,实施建构主义教育对于教师的要求比较高。教学过程的设计建立在对学生深入理解的基础上,教师不仅仅要准备知识。 
  为了实现上述效果,教师将扮演不同以往的角色,教师不再是知识的载体,教师将陪伴着学生一同探索,带领着学生犯错误,引领着学生思考整合。为了克服建构主义教育思想的弱点,在写这本书时,我基于对学生和技术的理解,剔除了大量知识点的讲解,在反复的教学实践中,已经能够获得和传统教学相同的教学效率。另外,我大量总结和研究了学生的学习过程,建立了学生在学习Java过程中的学习曲线,依照学习曲线来评估和考核学生的学习效果。 
  关于本书 
  本书总结了我多年来在这条道路上的探索,力求提供基于建构主义教育思想的Java教学材料,帮助学生轻松地掌握作为Java程序员所需要的知识和能力。书中的内容并不是简单的案例堆砌,每个部分的任务都包含了对相关知识的整合,都基于学生的学习曲线特点。 
  我在8年教学探索后才动手写这本书,是因为我一直相信“教育是用生命影响生命的过程”。我无法在一本书中实现和我亲自上课同样的影响过程,课堂上一遍遍地重复代码所传递的严谨态度,无法在书中呈现,加上我对技术、对学生的理解,以及对建构主义教育思想理解的局限,让我清楚地知道,我并没有完成一部让我心满意足的作品,书中不可避免地有很多不足,恳请读者批评指正。 
  这本书的内容是我数以万计的学生的成果,甚至有很多案例是我的学生在学习过程中发明的。从8年前开始的这段探索并不是一挥而就的,我诚挚地感谢我所教过的学生,是他们的忍受、包容和努力帮助我完成了这本书。我要感谢我的家人,我儿子的出生和成长,让我开始接触和研究教育理论,给我之前漫无目的的探索指明了方向。为了让这本书通俗易懂,我那学文科的爱人像一名真正的学生一样,通过这本书来学习Java技术,在她的努力下,这本书具备了更广的覆盖范围,确保读者即使没有任何专业基础,也能够通过这本书掌握Java技术。同时也要感谢电子工作业出版社的老师为本书的出版所付出的辛勤工作。 
  光盘使用 
  我一直希望这本书的定价尽可能低,希望有更多的人能够没有负担地学习Java技术,本意不想提供光盘,但是权衡再三,由于本书中的代码是伴随着讲解逐步展开的,很多代码没有整体呈现(否则会增加太多页数),所以不得不通过光盘提供书中的代码,这些代码被放在codes目录中,按照书中的章节组织。需要强调的是,请不要直接编译运行,或者复制我所提供的代码,光盘中的代码是我的,只有你亲手输入到电脑里的内容才属于你。 
  王洋于2012年1月14日    
				
 
				
				
					《深入理解Java核心技术:从JVM到并发精粹》  引言  在软件开发的世界里,Java以其跨平台、面向对象、健壮安全等特性,长期占据着举足轻重的地位。从大型企业级应用到移动端开发,再到大数据处理,Java的身影无处不在。然而,很多开发者在日常编程中,可能仅仅停留在API的调用和功能的实现层面,对Java的底层机制、运行原理以及高级特性了解甚少。这种“知其然,不知其所以然”的状态,不仅会限制个人技能的进一步提升,也可能在面对复杂问题时束手无策。  本书《深入理解Java核心技术:从JVM到并发精粹》正是为了填补这一认知鸿沟而生。它并非一本简单的Java语法教程,也不是对某个框架的堆砌。相反,本书旨在带领读者深入Java的“心脏”,去探索那些支撑起Java强大生命力的核心技术。我们将从Java虚拟机(JVM)的运作机制出发,层层剥离,直至理解Java并发编程的精髓,帮助开发者构建起坚实而深刻的Java知识体系。  第一部分:Java虚拟机(JVM)的奥秘  Java的“一次编写,到处运行”的承诺,很大程度上归功于Java虚拟机(JVM)。JVM是Java程序得以执行的基石,理解它的工作原理,对于优化程序性能、排查内存问题、甚至理解Java的垃圾回收机制都至关重要。  1.  JVM的结构与类加载机制:        JVM的内存区域划分: 我们将详细解析JVM运行时数据区,包括程序计数器、虚拟机栈、本地方法栈、方法区(元空间)以及堆。理解每个区域的职责、生命周期以及可能出现的内存溢出(OOM)类型,是解决内存相关问题的首要步骤。我们将深入探讨堆的年轻代、老年代、永久代(或元空间)的结构和GC(垃圾回收)在其中的运作。        类加载的过程: Java程序的运行始于类的加载。我们将剖析类加载的三个阶段:加载、连接(验证、准备、解析)和初始化。理解类加载器(Bootstrap ClassLoader, Extension ClassLoader, Application ClassLoader)的双亲委派模型,能够帮助我们理解不同类加载器之间的协作关系,以及如何自定义类加载器来解决类加载冲突或实现特殊需求(如模块化、热部署)。        运行时常量池与字符串常量池: 深入理解运行时常量池(包括静态字符串池和符号引用)以及字符串常量池的特殊之处。我们将通过实际代码示例,演示字符串拼接、`intern()`方法等操作如何影响字符串常量池,从而理解其对内存和性能的影响。  2.  JVM的执行引擎:        字节码的生成与解释: Java源代码首先被编译成平台无关的字节码(`.class`文件)。我们将探讨JVM如何解释执行这些字节码,以及解释执行器(Interpreter)的工作流程。        即时编译(JIT): 为了提高运行效率,JVM引入了即时编译技术。我们将深入解析JIT编译器(如C1和C2编译器)的工作原理,以及热点代码的探测机制。理解JIT如何将频繁执行的字节码编译成本地机器码,从而实现近乎C++的运行速度,是优化Java程序性能的关键。我们将探讨分层编译、激进优化等高级JIT特性。        垃圾回收(GC)机制: 垃圾回收是Java自动内存管理的核心。本书将详细讲解JVM的垃圾回收算法,包括:            判断对象是否存活的算法: 引用计数法与可达性分析算法。            主要的垃圾回收算法: 标记-清除(Mark-Sweep)、标记-整理(Mark-Compact)、复制(Copying)。            不同垃圾收集器(Garbage Collectors): Serial、Parallel、CMS(Concurrent Mark Sweep)、G1(Garbage-First)、Shenandoah、ZGC等。我们将分析它们的特点、适用场景、优缺点,以及新生代(Young Generation)和老年代(Old Generation)的垃圾回收策略。            GC调优: 基于对JVM内存模型和GC机制的理解,我们将提供一套系统性的GC调优方法论,帮助开发者解决因GC不当导致的性能瓶颈。  第二部分:Java并发编程的深度探索  在多核处理器日益普及的今天,并发编程已经成为Java应用开发中不可或缺的一部分。正确地编写并发程序,能够充分利用硬件资源,提高系统吞吐量和响应速度。然而,并发编程也充满了挑战,如竞态条件、死锁、活锁、线程安全等问题,稍有不慎就可能导致程序崩溃或产生难以发现的bug。  1.  Java内存模型(JMM):        JMM的引入与必要性: 我们将从CPU缓存、内存一致性问题等底层硬件机制出发,解释为什么需要Java内存模型。JMM定义了线程之间如何共享数据以及共享数据的可见性、原子性、有序性。        Happens-Before原则: 这是理解JMM的关键。我们将详细讲解Happens-Before原则的各种规则,包括程序顺序规则、监视器锁规则、volatile变量规则、传递性规则等,并通过大量实例演示其如何保证内存操作的可见性和有序性。        内存可见性与指令重排: 深入理解volatile关键字的作用,它不仅保证了内存可见性,还禁止了指令重排。我们将结合JMM,解释volatile如何解决多线程环境下变量不一致的问题。  2.  线程的生命周期与同步机制:        线程创建与管理: 了解Java中创建线程的两种方式(继承Thread类、实现Runnable接口),以及线程池(ExecutorService)的优势与使用。        线程的同步:            synchronized关键字: 深入解析`synchronized`关键字的锁机制,包括对象的锁(对象头)、类锁、以及它在方法和代码块中的作用。我们将探讨`synchronized`的锁升级过程(偏向锁、轻量级锁、重量级锁),以及它对性能的影响。            Lock接口与ReentrantLock: 介绍JUC(java.util.concurrent)包下的`Lock`接口及其实现类`ReentrantLock`。对比`synchronized`和`ReentrantLock`,理解`ReentrantLock`提供的更灵活的锁机制(如公平锁、非公平锁、尝试获取锁、中断获取锁等),以及它在Reentrant(可重入)特性上的表现。            条件变量(Condition): 学习如何使用`Condition`对象实现线程间的通信与协作,模拟生产者-消费者模型。        原子操作: 介绍`java.util.concurrent.atomic`包下的原子类(如AtomicInteger, AtomicLong, AtomicReference等)。理解CAS(Compare-And-Swap)算法的工作原理,以及它如何在无锁的情况下实现线程安全。  3.  Java并发工具与高级主题:        JUC并发工具类:            CountDownLatch: 用于一个或多个线程等待其他线程完成操作。            CyclicBarrier: 用于一组线程达到某个屏障时被阻塞,直到所有线程都达到屏障时,才被放行。            Semaphore: 用于控制同时访问某个资源的线程数量。            BlockingQueue: 阻塞队列,用于实现生产者-消费者模式,如ArrayBlockingQueue, LinkedBlockingQueue, SynchronousQueue等。            Future与Callable: 实现异步计算,获取结果。        线程池的深入: 详细讲解`ExecutorService`的各种实现(如ThreadPoolExecutor),理解线程池的核心参数(corePoolSize, maximumPoolSize, keepAliveTime, workQueue, rejectedExecutionHandler)的含义和作用,以及如何根据应用场景配置线程池来优化性能和资源利用率。        线程安全的设计模式: 介绍一些经典的线程安全设计模式,如不可变对象、线程本地存储(ThreadLocal)、享元模式、单例模式在并发环境下的实现与注意点。        并发的陷阱与避免: 深入剖析常见的并发问题,如死锁的产生条件、检测与避免方法,活锁、饥饿等。我们将提供一套实用的调试和问题定位技巧,帮助读者快速诊断和解决并发问题。  结语  《深入理解Java核心技术:从JVM到并发精粹》的目标是帮助每一位Java开发者,超越API的表面,抵达Java技术体系的深处。我们相信,通过对JVM运行机制的透彻理解,以及对Java内存模型和并发编程精髓的掌握,开发者将能够编写出更高性能、更健壮、更具可维护性的Java应用程序。这将不仅仅是技术能力的提升,更是对软件工程思想的深化,为应对未来更加复杂的技术挑战奠定坚实的基础。  本书的编写力求严谨、深入且贴近实战,通过大量代码示例、原理剖析和场景分析,力求将复杂的概念化繁为简,便于读者理解和吸收。希望本书能成为您在Java技术之路上的一盏明灯,助您在Java的广阔天地中,走得更远,学得更透。