当前位置:首页 > Java >
《Java面向对象编程(第2版)》电子书封面

Java面向对象编程(第2版)

  • 发布时间:2019年04月12日 15:43:41
  • 作者:孙卫琴
  • 大小:136 MB
  • 类别:Java电子书
  • 格式:PDF
  • 版本:超清版
  • 评分:8.9

    Java面向对象编程(第2版) PDF 超清版

      给大家带来的一篇关于Java相关的电子书资源,介绍了关于Java、面向对象、Java编程方面的内容,本书是由电子工业出版社出版,格式为PDF,资源大小136 MB,孙卫琴编写,目前豆瓣、亚马逊、当当、京东等电子书综合评分为:8.6分

      Tags:java Java编程 面向对象 

      内容介绍

      经典的教材型书籍,很实用,入门和提高均有很大作用

      本书是知名IT技术女作家孙卫琴老师倾注六年心血打造的业界经典10年畅销图书《Java面向对象编程》的升级版。以行云流水般的语言诠释Java编程艺术。基于*Java技术,理论紧密结合实际。

      这本是给老弟买的,他要我推荐学java的书,我考虑到他才初二,就选了这本入门级的,很好理解。因为我曾经在大一的时候看过孙卫琴老师的本书第一版,觉得讲解非常细致,行文的逻辑性和描述方式都很符合我的习惯,不像其他教材式的书,那个暑假在学校图书馆就一直看,算是启蒙之书吧。孙老师最近在个人网站做了本书配套的教学视频,我第一时间发链接给我弟了,希望他坚持学下去。

      内容显得过于繁杂,感觉有拼书的痕迹,书的字很小,不便于读者阅读。讲到第12章才开始讲重要的接口概念,总之,感觉不是很好!一入Java深似海,从android入门到后台中间件,,但相对来讲比起脚本语言,java还是相当友好的。属于江湖少林派系。c,c++,java,java除了有时啰嗦点,还是相当不错的,没啥大问题,要不怎么霸占n年武林武器排行榜第一名呢。

      内容介绍

      本书采用由浅入深、与实际应用紧密结合的方式,利用大量经典实用的实例,详细讲解Java面向对象的编程思想、编程语法和设计模式,介绍常见Java类库的用法,总结优化Java编程的各种宝贵经验,深入阐述Java虚拟机执行Java程序的原理。本书的实例都基于*的JDK8版本。本书的*特色是以6条主线贯穿书:面向对象编程思想、Java语言的语法、Java虚拟机执行Java程序的原理、在实际项目中的运用、设计模式和性能优化技巧。另外,本书还贯穿了Oracle公司的OCJP(Oracle Certified Java Programmer)认证的考试要点。

      内容节选

      Java语言面向对象编程思想之类与对象实例详解

      在初学者学Java的时候,面向对象很难让人搞懂,那么今天小编就来为大家把这个思想来为大家用极为简单的方法理解吧。
      首先我们来简单的阐述面向对象的思想。

      面向对象:

      官方的语言很抽象,我们把官方的解释和定义抛开。想想,自己有什么,对!!我们自己有手脚眼口鼻等一系列的器官。来把自己所具有的器官就可以看作我们的属性,自己是不是可以喜怒哀乐和嬉笑怒骂,这些是不是我们的行为,那么自己的具有的属性加自己有的行为就称为一个对象。

      注意!!我们自己,一个个体是一个对象,因为,你是你,我是我,我们虽然有相同的,但是我们不一样,比如你比我高,我比你头发长。

      接下来在进一步。我和你都是人,因为我和你有相似的东西,所以我和你都属于人类。人类,就是人的总称,也是相似对象的一种抽象。

      从上面看:我和你只是人类的两个特列,但是外星人也可以用人类来称呼我们,看的出来:类的具体表现或者实例就是对象,而对象的抽象或者总概括就是类。

      小编说的这么简单,没有用例子说话怎么行,下面我们进入用Java代码来反应情况。

      下面我们来写出一个人的类,注意:对象是由类而来,类先有,对象后有,是类实例化才有。

      原文代码不太合适,小编修改后如下:

      public class Person { 
      String name; 
      int age; 
      String gender; 
      public Person() { 
      } 
      Person(String name,int age,String gender){ 
      this.name = name; 
      this.age = age; 
      this.gender = gender; 
      System.out.println(this.name+"对象被创建了"+",有"+this.age+"岁"+",是"+this.gender+"的"); 
      } 
      public static void main(String[] args) { 
        Person p1 = new Person("张三", 18, "男"); 
        Person p2 = new Person("李四", 19, "女"); 
      } 
      }

      运行结果:

      张三对象被创建了,有18岁,是男的
      李四对象被创建了,有19岁,是女的
      

      以上就是对面向对象的理解。

      类:

      上面小编已经说到类是属性加行为,上面的代码就已经说明了属性了

      为了更好的说明行为,我们就加入Java中类的行为————方法

      package objectandclass; 
       
      import java.awt.SecondaryLoop; 
       
      public class Person { 
        String name; 
        int age; 
        String gender; 
        public Person() { 
           
        } 
        Person(String name,int age,String gender){ 
          this.name = name; 
          this.age = age; 
          this.gender = gender; 
          System.out.println(this.name+"对象被创建了"+",有"+this.age+"岁"+",是"+this.gender+"的"); 
        } 
         
        public void say(){ 
          System.out.println("我说我叫"+this.name+",别以为我不会说话,我会说很多话。"); 
        } 
         
      }

      类有了方法之后,对象也能调用这个方法,我们称,此时对象具有了类的一些行为体现。

      public static void main(String[] args) { 
          Person p1 = new Person("张三", 18, "男"); 
          p1.say(); 
          Person p2 = new Person("李四", 19, "女"); 
          p2.say(); 
        } 

       

      显而易见:运行的结果肯定为:

      张三对象被创建了,有18岁,是男的
      我说我叫张三,别以为我不会说话,我会说很多话。
      李四对象被创建了,有19岁,是女的
      我说我叫李四,别以为我不会说话,我会说很多话。
      

      下面我们说一说关于类的一些特征 :

      类,他有自己的东西,也有给对象的东西。类的东西就是类的成员

      类的成员一般有初始化块,构造器,属性,方法,内部类,枚举类。

      如果是属于类的东西(直接可以用类名.成员调用。)则用static调用。

      其实类的东西对象都能用,无论是不是静态的,但是不用static修饰 的,就是对象的东西,只能由实例化的对象来调用。

      关于对象就不用说了,大家记两点就行,要创建对象,必须调用构造器。

      初始化块可以看作是特殊的构造器,无参数传入,创建对象时,反正会被调用。

      目录

      • 第1章面向对象开发方法概述 1
      • 1.1 结构化的软件开发方法简介 3
      • 1.2 面向对象的软件开发方法简介 6
      • 1.2.1 对象模型 6
      • 1.2.2 UML:可视化建模语言 7
      • 1.2.3 Rational Rose:可视化建模
      • 工具 7
      • 1.3 面向对象开发中的核心思想
      • 和概念 8
      • 1.3.1 问题领域、对象、属性、状态、行为、方法、实现 8
      • 1.3.2 类、类型 10
      • 1.3.3 消息、服务 12
      • 1.3.4 接口 13
      • 1.3.5 封装、透明 14
      • 1.3.6 抽象 18
      • 1.3.7 继承、扩展、覆盖 20
      • 1.3.8 组合 21
      • 1.3.9 多态、动态绑定 24
      • 1.4 UML语言简介 26
      • 1.4.1 用例图 27
      • 1.4.2 类框图 28
      • 1.4.3 时序图 29
      • 1.4.4 协作图 30
      • 1.4.5 状态转换图 30
      • 1.4.6 组件图 31
      • 1.4.7 部署图 32
      • 1.5 类之间的关系 32
      • 1.5.1 关联(Association) 33
      • 1.5.2 依赖(Dependency) 34
      • 1.5.3 聚集(Aggregation) 35
      • 1.5.4 泛化(Generalization) 36
      • 1.5.5 实现(Realization) 36
      • 1.5.6 区分依赖、关联和聚集关系 36
      • 1.6 实现Panel系统 39
      • 1.6.1 扩展Panel系统 42
      • 1.6.2 用配置文件进一步提高Panel
      • 系统的可维护性 43
      • 1.6.3 运行Panel系统 45
      • 1.7 小结 45
      • 1.8 思考题 46
      • 第2章第一个Java应用 47
      • 2.1 创建Java源文件 47
      • 2.1.1 Java源文件结构 49
      • 2.1.2 包声明语句 49
      • 2.1.3 包引入语句 51
      • 2.1.4 方法的声明 53
      • 2.1.5 程序入口main()方法的声明 54
      • 2.1.6 给main()方法传递参数 55
      • 2.1.7 注释语句 55
      • 2.1.8 关键字 56
      • 2.1.9 标识符 56
      • 2.1.10 编程规范 57
      • 2.2 用JDK管理Java应用 57
      • 2.2.1 JDK简介以及安装方法 58
      • 2.2.2 编译Java源文件 60
      • 2.2.3 运行Java程序 62
      • 2.2.4 给Java应用打包 65
      • 2.3 使用和创建JavaDoc文档 66
      • 2.3.1 JavaDoc标记 68
      • 2.3.2 javadoc命令的用法 73
      • 2.4 Java虚拟机运行Java程序的
      • 基本原理 75
      • 2.5 小结 77
      • 2.6 思考题 78
      • 第3章数据类型和变量 81
      • 3.1 基本数据类型 82
      • 3.1.1 boolean类型 82
      • 3.1.2 byte、short、int和long
      • 类型 83
      • 3.1.3 char类型与字符编码 85
      • 3.1.4 float和double类型 87
      • 3.2 引用类型 91
      • 3.2.1 基本类型与引用类型的区别 92
      • 3.2.2 用new关键字创建对象 94
      • 3.3 变量的作用域 95
      • 3.3.1 实例变量和静态变量的
      • 生命周期 97
      • 3.3.2 局部变量的生命周期 100
      • 3.3.3 成员变量和局部变量同名 101
      • 3.3.4 将局部变量的作用域
      • 最小化 102
      • 3.4 对象的默认引用:this 103
      • 3.5 参数传递 105
      • 3.6 变量的初始化以及默认值 107
      • 3.6.1 成员变量的初始化 107
      • 3.6.2 局部变量的初始化 108
      • 3.7 直接数 109
      • 3.7.1 直接数的类型 110
      • 3.7.2 直接数的赋值 111
      • 3.8 小结 112
      • 3.9 思考题 113
      • 第4章操作符 115
      • 4.1 操作符简介 115
      • 4.2 整型操作符 116
      • 4.2.1 一元整型操作符 117
      • 4.2.2 二元整型操作符 118
      • 4.3 浮点型操作符 123
      • 4.4 比较操作符和逻辑操作符 124
      • 4.5 特殊操作符“?:” 127
      • 4.6 字符串连接操作符“ ” 127
      • 4.7 操作符“==”与对象的
      • equals()方法 129
      • 4.7.1 操作符“==” 129
      • 4.7.2 对象的equals()方法 130
      • 4.8 instanceof操作符 133
      • 4.9 变量的赋值和类型转换 135
      • 4.9.1 基本数据类型转换 136
      • 4.9.2 引用类型的类型转换 139
      • 4.10 小结 139
      • 4.11 思考题 142
      • 第5章流程控制 145
      • 5.1 分支语句 146
      • 5.1.1 if else语句 146
      • 5.1.2 switch语句 150
      • 5.2 循环语句 154
      • 5.2.1 while语句 154
      • 5.2.2 do while语句 156
      • 5.2.3 for语句 158
      • 5.2.4 foreach语句 161
      • 5.2.5 多重循环 162
      • 5.3 流程跳转语句 162
      • 5.4 综合例子:八皇后问题 165
      • 5.5 小结 168
      • 5.6 思考题 169
      • 第6章继承 173
      • 6.1 继承的基本语法 173
      • 6.2 方法重载(Overload) 175
      • 6.3 方法覆盖(Override) 177
      • 6.4 方法覆盖与方法重载的
      • 异同 183
      • 6.5 super关键字 183
      • 6.6 多态 185
      • 6.7 继承的利弊和使用原则 189
      • 6.7.1 继承树的层次不可太多 190
      • 6.7.2 继承树的上层为抽象层 190
      • 6.7.3 继承关系最大的弱点:
      • 打破封装 191
      • 6.7.4 精心设计专门用于被继承
      • 的类 193
      • 6.7.5 区分对象的属性与继承 195
      • 6.8 比较组合与继承 197
      • 6.8.1 组合关系的分解过程对应
      • 继承关系的抽象过程 197
      • 6.8.2 组合关系的组合过程对应
      • 继承关系的扩展过程 200
      • 6.9 小结 203
      • 6.10 思考题 204
      • 第7章 Java语言中的修饰符 209
      • 7.1 访问控制修饰符 210
      • 7.2 abstract修饰符 212
      • 7.3 final修饰符 214
      • 7.3.1 final类 215
      • 7.3.2 final方法 215
      • 7.3.3 final变量 216
      • 7.4 static修饰符 220
      • 7.4.1 static变量 220
      • 7.4.2 static方法 223
      • 7.4.3 static代码块 226
      • 7.4.4 用static进行静态导入 228
      • 7.5 小结 228
      • 7.6 思考题 230
      • 第8章接口 233
      • 8.1 接口的概念和基本特征 234
      • 8.2 比较抽象类与接口 237
      • 8.3 与接口相关的设计模式 241
      • 8.3.1 定制服务模式 241
      • 8.3.2 适配器模式 245
      • 8.3.3 默认适配器模式 250
      • 8.3.4 代理模式 251
      • 8.3.5 标识类型模式 256
      • 8.3.6 常量接口模式 257
      • 8.4 小结 258
      • 8.5 思考题 259
      • 第9章异常处理 261
      • 9.1 Java异常处理机制概述 262
      • 9.1.1 Java异常处理机制的优点 262
      • 9.1.2 Java虚拟机的方法调用栈 264
      • 9.1.3 异常处理对性能的影响 267
      • 9.2 运用Java异常处理机制 267
      • 9.2.1 try-catch语句:捕获异常 267
      • 9.2.2 finally语句:任何情况下
      • 必须执行的代码 268
      • 9.2.3 throws子句:声明可能会
      • 出现的异常 270
      • 9.2.4 throw语句:抛出异常 271
      • 9.2.5 异常处理语句的语法规则 271
      • 9.2.6 异常流程的运行过程 274
      • 9.2.7 跟踪丢失的异常 278
      • 9.3 Java异常类 280
      • 9.3.1 运行时异常 282
      • 9.3.2 受检查异常
      • (Checked Exception) 282
      • 9.3.3 区分运行时异常和受
      • 检查异常 283
      • 9.4 用户定义异常 285
      • 9.4.1 异常转译和异常链 285
      • 9.4.2 处理多样化异常 288
      • 9.5 异常处理原则 289
      • 9.5.1 异常只能用于非正常情况 290
      • 9.5.2 为异常提供说明文档 290
      • 9.5.3 尽可能地避免异常 291
      • 9.5.4 保持异常的原子性 292
      • 9.5.5 避免过于庞大的try代码块 294
      • 9.5.6 在catch子句中指定具体的
      • 异常类型 294
      • 9.5.7 不要在catch代码块中忽略
      • 被捕获的异常 294
      • 9.6 记录日志 295
      • 9.6.1 创建Logger对象及设置
      • 日志级别 296
      • 9.6.2 生成日志 297
      • 9.6.3 把日志输出到文件 297
      • 9.6.4 设置日志的输出格式 298
      • 9.7 使用断言 299
      • 9.8 小结 300
      • 9.9 思考题 301
      • 第10章类的生命周期 305
      • 10.1 Java虚拟机及程序的
      • 生命周期 305
      • 10.2 类的加载、连接和初始化 305
      • 10.2.1 类的加载 306
      • 10.2.2 类的验证 307
      • 10.2.3 类的准备 307
      • 10.2.4 类的解析 308
      • 10.2.5 类的初始化 308
      • 10.2.6 类的初始化的时机 310
      • 10.3 类加载器 313
      • 10.3.1 类加载的父亲委托机制 315
      • 10.3.2 创建用户自定义的类
      • 加载器 317
      • 10.3.3 URLClassLoader类 323
      • 10.4 类的卸载 324
      • 10.5 小结 325
      • 10.6 思考题 326
      • 第11章对象的生命周期 327
      • 11.1 创建对象的方式 327
      • 11.2 构造方法 330
      • 11.2.1 重载构造方法 331
      • 11.2.2 默认构造方法 332
      • 11.2.3 子类调用父类的构造方法 333
      • 11.2.4 构造方法的作用域 337
      • 11.2.5 构造方法的访问级别 337
      • 11.3 静态工厂方法 338
      • 11.3.1 单例类 340
      • 11.3.2 枚举类 342
      • 11.3.3 不可变(immutable)类与
      • 可变类 344
      • 11.3.4 具有实例缓存的
      • 不可变类 348
      • 11.3.5 松耦合的系统接口 350
      • 11.4 垃圾回收 351
      • 11.4.1 对象的可触及性 352
      • 11.4.2 垃圾回收的时间 354
      • 11.4.3 对象的finalize()方法简介 354
      • 11.4.4 对象的finalize()方法的
      • 特点 355
      • 11.4.5 比较finalize()方法和finally
      • 代码块 357
      • 11.5 清除过期的对象引用 358
      • 11.6 对象的强、软、弱和
      • 虚引用 360
      • 11.7 小结 366
      • 11.8 思考题 367
      • 第12章内部类 371
      • 12.1 内部类的基本语法 371
      • 12.1.1 实例内部类 373
      • 12.1.2 静态内部类 376
      • 12.1.3 局部内部类 377
      • 12.2 内部类的继承 379
      • 12.3 子类与父类中的内部类
      • 同名 380
      • 12.4 匿名类 381
      • 12.5 内部接口以及接口中的
      • 内部类 384
      • 12.6 内部类的用途 385
      • 12.6.1 封装类型 385
      • 12.6.2 直接访问外部类的成员 385
      • 12.6.3 回调 386
      • 12.7 内部类的类文件 388
      • 12.8 小结 389
      • 12.9 思考题 389
      • 第13章多线程 393
      • 13.1 Java线程的运行机制 393
      • 13.2 线程的创建和启动 395
      • 13.2.1 扩展java.lang.Thread类 395
      • 13.2.2 实现Runnable接口 400
      • 13.3 线程的状态转换 402
      • 13.3.1 新建状态 402
      • 13.3.2 就绪状态 402
      • 13.3.3 运行状态 402
      • 13.3.4 阻塞状态 403
      • 13.3.5 死亡状态 404
      • 13.4 线程调度 405
      • 13.4.1 调整各个线程的优先级 406
      • 13.4.2 线程睡眠:Thread.sleep()
      • 方法 408
      • 13.4.3 线程让步:
      • Thead.yield()方法 409
      • 13.4.4 等待其他线程结束:join() 410
      • 13.5 获得当前线程对象的引用 411
      • 13.6 后台线程 412
      • 13.7 定时器 413
      • 13.8 线程的同步 415
      • 13.8.1 同步代码块 418
      • 13.8.2 线1

      读书笔记

      Java操作word文档替换文字并指定位置插入图片方法

      Java 替换word文档文字并指定位置插入图片

      先说下 需要的依赖包

      <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-excelant</artifactId>
            <version>3.12</version>
          </dependency>
          <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-scratchpad</artifactId>
            <version>3.12</version>
          </dependency>
          <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.8</version>
          </dependency>
          <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
            <version>3.8</version>
          </dependency>
      <!-- 生成图片-->
       <dependency>
          <groupId>org.jfree</groupId>
          <artifactId>jfreechart</artifactId>
          <version>1.0.19</version>
        </dependency>
        <dependency>
      <!--支持插入图片-->
          <groupId>org.docx4j</groupId>
          <artifactId>docx4j</artifactId>
          <version>3.3.1</version>
        </dependency>

      示例,下图

      如上图,需要替换的字符串地方“$1”为“1231”,在指定位置插入书签,并命名“test”    ,插入的图片如下

      本人也没太过多去研究,亲测通过有效,在这分享下

      1.demo

      import java.awt.Font;
      import java.io.File;
      import java.io.FileInputStream;
      import java.io.FileOutputStream;
      import java.io.IOException;
      import java.io.InputStream;
      import java.math.BigInteger;
      import java.text.DecimalFormat;
      import java.text.NumberFormat;
      import java.util.Iterator;
      import java.util.List;
      import java.util.Map;
      import java.util.Set;
      import org.apache.poi.POIXMLDocument;
      import org.apache.poi.openxml4j.opc.OPCPackage;
      import org.apache.poi.util.IOUtils;
      import org.apache.poi.xwpf.usermodel.XWPFDocument;
      import org.apache.poi.xwpf.usermodel.XWPFParagraph;
      import org.apache.poi.xwpf.usermodel.XWPFRun;
      import org.docx4j.TraversalUtil;
      import org.docx4j.dml.wordprocessingDrawing.Inline;
      import org.docx4j.finders.RangeFinder;
      import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
      import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage;
      import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
      import org.docx4j.wml.Body;
      import org.docx4j.wml.BooleanDefaultTrue;
      import org.docx4j.wml.CTBookmark;
      import org.docx4j.wml.Color;
      import org.docx4j.wml.Document;
      import org.docx4j.wml.Drawing;
      import org.docx4j.wml.HpsMeasure;
      import org.docx4j.wml.ObjectFactory;
      import org.docx4j.wml.P;
      import org.docx4j.wml.R;
      import org.docx4j.wml.RPr;
      import org.jfree.chart.ChartFactory;
      import org.jfree.chart.ChartUtilities;
      import org.jfree.chart.JFreeChart;
      import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
      import org.jfree.chart.plot.PiePlot;
      import org.jfree.chart.title.TextTitle;
      import org.jfree.data.general.DefaultPieDataset;import com.aisino.qysds.common.constant.ERRORConstants;
      import com.aisino.qysds.common.exception.SysException;
      import com.aisino.qysds.service.IExportBgService;
      import com.google.common.collect.Maps;
      public class ExportBgServiceImpl {
      public static void main(String[] args) throws Exception {
          Map<String, String> map = Maps.newHashMap();
          map.put("$1", "1231");
          XWPFDocument document = new XWPFDocument(POIXMLDocument.openPackage("D:\\tp\\test.docx"));
          Iterator<XWPFParagraph> itPara = document.getParagraphsIterator();
          while (itPara.hasNext()) {
            XWPFParagraph paragraph = (XWPFParagraph) itPara.next();
            List<XWPFRun> runs = paragraph.getRuns();
            for (int i = 0; i < runs.size(); i++) {
              String oneparaString = runs.get(i).getText(runs.get(i).getTextPosition());
              for (Map.Entry<String, String> entry : map.entrySet()) {
                if (oneparaString.equals(entry.getKey())) {
                  oneparaString = oneparaString.replace(entry.getKey(), entry.getValue());
                }
              }
              runs.get(i).setText(oneparaString, 0);
            }
          }
          FileOutputStream outStream = null;
          outStream = new FileOutputStream("D:\\tp\\test1.docx");
          document.write(outStream);
          outStream.close();
      //-----------------------------------这块为生成图片 和 插入图片
          DefaultPieDataset dataset = new DefaultPieDataset();
          dataset.setValue("修改类", 1);
          dataset.setValue("提示类", 1);
          dataset.setValue("校验不通过", 3);
          dataset.setValue("正常类", 3);
          JFreeChart chart = ChartFactory.createPieChart3D(null, dataset, true, false, false);
          chart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 15)); // 设置图例类别字体
          // TextTitle title = new TextTitle(titleString);
          // title.setFont(new Font("黑体", Font.ITALIC, 20));//设置标题字体
          // chart.setTitle(title);
          PiePlot piePlot = (PiePlot) chart.getPlot();
          DecimalFormat df = new DecimalFormat("0.00%");
          NumberFormat nf = NumberFormat.getInstance();
          StandardPieSectionLabelGenerator generator = new StandardPieSectionLabelGenerator("{0} {2}", nf, df);// 获得StandardPieSectionLabelGenerator对象,生成的格式,
          // {0}表示section名,{1}表示section的值,{2}表示百分比。可以自定义
          piePlot.setLabelGenerator(generator);// 设置百分比
          piePlot.setLabelFont(new Font("黑体", Font.ITALIC, 15));// 设置饼图中类别字体
          piePlot.setNoDataMessage("此时并没有任何数据可用");
          piePlot.setCircular(false);
          piePlot.setLabelGap(0.02D);
          piePlot.setIgnoreNullValues(true);// 设置不显示空位
          piePlot.setIgnoreZeroValues(true);// 设置不显示负值或零值
          String fName = "pie.png";
          File file = new File("D:\\tp", fName);
          if (file.exists()) {
            file.delete();
          }
          try {
            ChartUtilities.saveChartAsPNG(file, chart, 800, 500);
            File file2 = new File("D:\\tp\\test1.docx");
            WordprocessingMLPackage wPackage = WordprocessingMLPackage.load(new FileInputStream(file2));
            MainDocumentPart mainDocumentPart = wPackage.getMainDocumentPart();
            Document wmlDoc = (Document) mainDocumentPart.getJaxbElement();
            Body body = wmlDoc.getBody();
            // 提取正文中所有段落
            List<Object> paragraphs = body.getContent();
            // 提取书签并创建书签的游标
            RangeFinder rt = new RangeFinder("CTBookmark", "CTMarkupRange");
            new TraversalUtil(paragraphs, rt);
            for (CTBookmark bm : rt.getStarts()) {
              if (bm.getName().equals("test")) {// 这里的test为 word文档中预设的 书签名
                InputStream inputStream = new FileInputStream(file);
                byte[] bytes = IOUtils.toByteArray(inputStream);
                BinaryPartAbstractImage imagePart = BinaryPartAbstractImage.createImagePart(wPackage, bytes);
                Inline inline = imagePart.createImageInline(null, null, 0, 1, false, 10000);//这里的100000不是正常屏幕大小,用于设置插入图片的大小
                P p = (P) (bm.getParent());
                ObjectFactory factory = new ObjectFactory();
                // R对象是匿名的复杂类型,然而我并不知道具体啥意思,估计这个要好好去看看ooxml才知道
                R run = factory.createR();
                // drawing理解为画布?
                Drawing drawing = factory.createDrawing();
                drawing.getAnchorOrInline().add(inline);
                run.getContent().add(drawing);
                p.getContent().add(run);
              }
            }
            wPackage.save(new FileOutputStream(new File("D:\\tp\\test1.docx")));
          } catch (IOException e) {
          }
        }
      }

      最后效果图如下:

      java简单操作word实例

      本文为大家分享了java简单操作word例子,供大家参考,具体内容如下

      package apache.poi;
      
      import java.io.ByteArrayInputStream;
      import java.io.ByteArrayOutputStream;
      import java.io.File;
      import java.io.FileInputStream;
      import java.io.FileOutputStream;
      import java.io.IOException;
      import java.io.OutputStream;
      import java.util.HashMap;
      import java.util.Map;
      
      import org.apache.poi.hwpf.HWPFDocument;
      import org.apache.poi.hwpf.usermodel.Range;
      import org.apache.poi.poifs.filesystem.DirectoryEntry;
      import org.apache.poi.poifs.filesystem.POIFSFileSystem;
      
      
      public class ExportDocTest {
        
        public static void main(String[] args) {
          String destFile="D:\\11.doc";
          //#####################根据自定义内容导出Word文档#################################################
          StringBuffer fileCon=new StringBuffer();
          fileCon.append("        张大炮      男       317258963215223\n" +
              "2011   09    2013   07    3\n" +
              "  二炮研究       成人\n" +
              "2013000001               2013   07   08");
          fileCon.append("\n\r\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
          
          new ExportDocTest().exportDoc(destFile, fileCon.toString());
          
          //##################根据Word模板导出单个Word文档###################################################
          Map<String, String> map=new HashMap<String, String>();
          
          map.put("name", "Zues");
          map.put("sex", "男");
          map.put("idCard", "200010");
          map.put("year1", "2000");
          map.put("month1", "07");
          map.put("year2", "2008");
          map.put("month2", "07");
          map.put("gap", "2");
          map.put("zhuanye", "计算机科学与技术");
          map.put("type", "研究生");
          map.put("bianhao", "2011020301");
          map.put("nowy", "2011");
          map.put("nowm", "01");
          map.put("nowd", "20220301");
          //注意biyezheng_moban.doc文档位置,此例中为应用根目录
          HWPFDocument document=new ExportDocTest().replaceDoc("biyezheng_moban.doc", map);
          ByteArrayOutputStream ostream = new ByteArrayOutputStream();
          try {
            document.write(ostream);
            //输出word文件
            OutputStream outs=new FileOutputStream(destFile);
            outs.write(ostream.toByteArray());
            outs.close();
          } catch (IOException e) {
            e.printStackTrace();
          }
          
        }
        
        
        /**
         * 
         * @param destFile
         * @param fileCon
         */
        public void exportDoc(String destFile,String fileCon){
          try {
            //doc content
            ByteArrayInputStream bais = new ByteArrayInputStream(fileCon.getBytes());
            POIFSFileSystem fs = new POIFSFileSystem();
            DirectoryEntry directory = fs.getRoot(); 
            directory.createDocument("WordDocument", bais);
            FileOutputStream ostream = new FileOutputStream(destFile);
            fs.writeFilesystem(ostream);
            bais.close();
            ostream.close();
            
          } catch (IOException e) {
            e.printStackTrace();
          }
        }
        
        
        /**
         * 读取word模板并替换变量
         * @param srcPath
         * @param map
         * @return
         */
        public HWPFDocument replaceDoc(String srcPath, Map<String, String> map) {
          try {
            // 读取word模板
            FileInputStream fis = new FileInputStream(new File(srcPath));
            HWPFDocument doc = new HWPFDocument(fis);
            // 读取word文本内容
            Range bodyRange = doc.getRange();
            // 替换文本内容
            for (Map.Entry<String, String> entry : map.entrySet()) {
              bodyRange.replaceText("${" + entry.getKey() + "}", entry
                  .getValue());
            }
            return doc;
          } catch (Exception e) {
            e.printStackTrace();
            return null;
          }
        }
      
      }
      

      以上就是本文的全部内容,希望对大家的学习有所帮助。

      以上就是本次介绍的Java电子书的全部相关内容,希望我们整理的资源能够帮助到大家,感谢大家对码农之家的支持。

      上一篇:PHP与MySQL高性能应用开发

      下一篇:疯狂Java讲义精粹(第2版)

      展开 +

      收起 -

      下载地址:百度网盘下载
      Java 相关电子书
      JavaScript编程全解
      JavaScript编程全解 PDF 高清版

      JavaScript编程全解 全方位地介绍了JavaScript开发中的各个主题,无论是前端还是后端的JavaScript开发者都可以在本书中找到自己需要的内容。本书对HTML5、Web API、Node.js及WebSocket等最新的热门技术也

      立即下载
      Web编程基础:CSS、JavaScript、jQuery
      Web编程基础:CSS、JavaScript、jQuery PDF 高清版

      《 Web编程基础:CSS、JavaScript、jQuery 》紧密围绕网页设计师在进行Web前台开发中实际需要掌握的技术,全面介绍了使用DIV+CSS、JavaScript、jQuery进行Web页面设计和制作技巧。《Web编程基础:CSS、

      立即下载
      华为Java语言编程规范 安全篇 v2.0
      华为Java语言编程规范 安全篇 v2.0 DOC 中文版

      Java语言编程规范_下卷_安全篇 是针对Java语言编程中的输入校验、异常行为、IO操作、序列化和反序列化、平台安全与运行安全等方面,描述可能导致安全漏洞或风险的常见编码错误。 该规范基于业界最佳实践,参考业界安全编码规范相关著作,例如The Cert Secure Coding Standard for Java、Sun Secure Coding Guidelines for the Java Programming Language、CWE/SANS TOP 25和OWASP Guide Proj

      立即下载
      神经网络编程实战:Java语言实现
      神经网络编程实战:Java语言实现 PDF 第2版 立即下载
      Java编程的逻辑
      Java编程的逻辑 PDF 原书扫描版

      《Java编程的逻辑》作者马俊昌,从基本概念到高层框架,剖析实现原理与JDK源代码,融合专业理论与应用实践,透彻理解Java编程的思维逻辑。

      立即下载
      JavaScript ES6函数式编程入门经典
      JavaScript ES6函数式编程入门经典 PDF 原书扫描版

      本书使用JavaScript ES6带你学习函数式编程。你将学习柯里化、偏函数、高阶函数以及Monad等概念。具有一定的参考价值,感兴趣的小伙伴们可以参考一下

      立即下载
      Scala与Clojure函数式编程模式:Java虚拟机高效编程
      Scala与Clojure函数式编程模式:Java虚拟机高效编程 PDF 完整原版

      本书向读者展示了如何采用函数式方案来替代或简化面向对象编程中使用的诸多通用模式,同时还介绍了一些在函数式世界中广泛使用的模式

      立即下载
      读者心得
      103小时54分钟前回答

      JavaScript面向对象程序设计创建对象的方法分析

      本文实例讲述了JavaScript面向对象程序设计创建对象的方法。分享给大家供大家参考,具体如下: 面向对象的语言具有一个共同的标志,那就是具有“类”的概念,但是在javascript中没有类的概念,在js中将对象定义为“无序属性的集合,其属性可以包含基本值,对象或者函数”,即其将对象看作是一组名值对的散列表。这样问题就来了,如何创建对象呢? 在最开始时使用object构造函数和对象字面量来创建单个对象,下面简要介绍这两种方法。 object构造函数 :创建自定义对象的最简单方式就是创建一个object的实例,然后为这个实例添加属性和方法: var person=new object();person.name="haha";person.age=20;person.job=……

      147小时48分钟前回答

      老生常谈javascript的面向对象思想

      面向对象的三大基本特性 封装(把相关的信息(无论数据或方法)存储在对象中的能力) 继承(由另一个类(或多个类)得来类的属性和方法的能力) 多态(一个对象在不同情况下的多种形态) 定义类或对象 第一种:基于Object对象 var person = new Object();person.name = "Rose";person.age = 18;person.getName = function () { return this.name;};console.log(person.name);//Roseconsole.log(person.getName);//function () {return this.name;}console.log(person.getName());//Rose 缺点:不能创建多个对象。 第二种:基于字面量方式 var person = { name : "Rose", age : 18 , getName : function () { return this.name; }};console.log(person.name);//Roseconsole.log(person.getName);//function () {return this.name;}console.log(……

      制作的码农
      制作的码农

      在书店里看过1小时的Java面向对象编程纸质书,感觉还不错,在这下了电子版省不少钱,本身对java熟悉,学习这本书主要是用来提高的,总体感觉还不错哦。

      回复:

      看来是java编程的高手了,很高兴我们整理的内容能够帮助到你。

      2018-10-23
      码农之家

      阎仙媛 提供上传

      资源
      18
      粉丝
      25
      喜欢
      142
      评论
      13

      Copyright 2018-2021 www.xz577.com 码农之家

      版权投诉 / 书籍推广:520161757@qq.com