您好,欢迎来到聚文网。 登录 免费注册
JAVA程序设计开发

JAVA程序设计开发

  • 装帧: 简装
  • 出版社: 清华大学出版社
  • 作者: 孙洪迪、贾民政、方园、杨民峰
  • 出版日期: 2019-08-01
  • 商品条码: 9787302532118
  • 版次: 1
  • 开本: 其他
  • 页数: 0
  • 出版年份: 2019
定价:¥49 销售价:登录后查看价格  ¥{{selectedSku?.salePrice}} 
库存: {{selectedSku?.stock}} 库存充足
{{item.title}}:
{{its.name}}
精选
编辑推荐
本书以现代学徒制人才培养理论为指导,以培养学生的职业能力为核心,以工作实践为主线,面向企业技术工程师岗位能力模型设置教材内容,建立以实际工作过程为框架的职业教育课程结构。
内容简介
本书主要介绍Java开发和运行环境、Java基本语法、面向对象的程序设计、图形界面设计、文件输入/输出流操作、线程、网络和数据开发基础等知识,并通过加强实训,提高应用技能。本书既可作为应用型大学本科和高职高专院校计算机专业的教材,也可作为企事业信息化从业者的培训教材,并为广大社会居民和IT创业者提供有益的学习指导。
作者简介
孙洪迪,2011年毕业于北京邮电大学,获工程硕士学位。2004.07-至今北京工业职业技术学院,电气与信息工程学院计算机网络教研室,讲师 。编写的教材包括《企业组网实训教程》、《办公自动化技术与应用》、《计算机应用基础》和《网络操作系统案例教程》。讲授课程包括:高级语言程序设计、计算机组成原理、网络安全技术以及移动互联网应用开发等多门专业基础课与选修课。
目录
第1章Java概述 1.1Java语言简介 1.1.1Java的形成 1.1.2Java发展历史 1.1.3Java语言跨平台特性 1.2Java环境搭建 1.2.1安装JDK 1.2.2配置环境变量 1.2.3测试Java运行环境 1.3编写HelloWorld程序 1.4常用开发工具介绍 1.4.1文本编辑工具EditPlus 1.4.2集成开发环境Eclipse 习题 第2章Java基本语法 2.1Java语言基本元素 2.1.1标识符 2.1.2关键字 2.1.3分隔符 2.1.4注释 2.2常量和变量 2.2.1常量 2.2.2变量 2.3Java基本数据类型与封装类型 2.3.1基本数据类型 2.3.2引用类型 2.3.3封装类型 2.4运算符及表达式 2.4.1表达式 2.4.2运算符 2.4.3算术运算符 2.4.4关系运算符 2.4.5逻辑运算符 2.4.6位运算符 2.4.7赋值运算符 2.4.8条件运算符 2.4.9运算符的优先级 2.5数据类型转换 2.5.1自动类型转换 2.5.2强制类型转换 2.6Java控制语句 2.6.1顺序结构 2.6.2分支结构 2.6.3循环结构 2.6.4跳转控制语句 习题 第3章数组与字符串 3.1一维数组 3.1.1数组的说明与构造 3.1.2数组的初始化 3.1.3数组元素的使用 3.2多维数组 3.2.1二维数组的声明 3.2.2二维数组的初始化 3.2.3二维数组的使用 3.2.4数组复制 3.2.5数组应用实例 3.3字符串 3.3.1String类 3.3.2StringBuffer类和StringBuilder类 3.3.3String和StringBuffer互相转换 习题 第4章类与对象 4.1面向过程和面向对象 4.1.1面向过程 4.1.2面向对象 4.1.3面向过程和面向对象的比较 4.2类与对象 4.2.1定义类 4.2.2定义属性 4.2.3定义方法 4.2.4对象的创建及使用 4.3构造方法与对象的初始化 4.3.1类的构造方法 4.3.2对象的初始化过程 4.4包 4.4.1包的概念 4.4.2使用其他包中的类 4.4.3Java系统包 4.5类的封装 4.5.1类成员访问权限 4.5.2getter/setter访问器 习题 第5章类的继承 5.1继承 5.1.1继承的概念 5.1.2继承的作用 5.1.3继承的特性 5.1.4Object类 5.2super/this关键字 5.2.1super关键字 5.2.2this关键字 5.3方法的重载与重写 5.3.1方法重载 5.3.2方法重写 5.4多态 5.4.1多态的概念 5.4.2多态的形式 5.4.3多态的转型 5.5static关键字 5.6final关键字 习题 第6章抽象类接口 6.1抽象类 6.1.1抽象类的概念 6.1.2抽象方法和抽象类的声明及应用 6.2接口 6.2.1接口的概念 6.2.2Java的接口 6.2.3接口的使用 6.2.4接口的实际应用 6.2.5接口应用——简单工厂模式 6.3内部类 6.3.1内部类的概念 6.3.2成员内部类 6.3.3局部内部类 6.3.4匿名内部类 6.3.5静态内部类 习题 第7章异常 7.1异常概述 7.2Java异常的分类和类结构图 7.3异常处理机制 7.3.1使用try...catch...finally处理异常 7.3.2throws声明抛弃异常 7.3.3throw人工抛出异常 7.3.4创建用户自定义异常类 7.3.5获取异常信息 7.4异常处理规则 习题 第8章Java GUI编程 8.1GUI概述 8.1.1GUI程序设计原理 8.1.2Java平台上的GUI 8.2AWT和Swing 8.2.1AWT 8.2.2Swing 8.3GUI组件分类 8.3.1组件(Component) 8.3.2容器(Container)类 8.3.3非容器类组件 8.4布局管理 8.4.1流式布局管理器(FlowLayout) 8.4.2边界布局管理器(BorderLayout) 8.4.3网格布局管理器(GridLayout) 8.4.4卡片布局管理器(CardLayout) 8.4.5网格包布局管理器(GridBagLayout) 8.4.6通过嵌套设定复杂的布局 8.5Java事件处理 8.5.1事件及事件监听器 8.5.2GUI事件监听器的注册 8.5.3一个对象注册多个监听器 8.5.4多个组件注册到一个监听器 8.6常用Swing组件 8.6.1框架(JFrame) 8.6.2面板(JPanel) 8.6.3按钮(JButton) 8.6.4文本框(JTextField和JPasswordField) 8.6.5标签(JLabel) 8.6.6单选按钮(JRadioButton) 8.6.7复选框(JCheckBox) 8.6.8组合框(JComboBox) 8.6.9列表(JList) 8.6.10文本域(JTextArea) 8.6.11表格(JTable) 8.7菜单与工具条 8.7.1菜单的定义与使用 8.7.2工具栏的定义与使用 实训简易仿Windows计算器 实训要求 知识点 效果参考图 参考代码 习题 第9章线程 9.1进程与线程概念 9.1.1基本概念 9.1.2线程的生命周期 9.2线程的创建与启动 9.2.1继承Thread类创建和启动新的线程 9.2.2实现Runnable接口创建和启动新线程 9.2.3使用Callable和Future接口创建线程 9.2.4创建线程的三种方式对比 9.3线程的控制 9.3.1线程的优先级 9.3.2线程合并jion 9.3.3线程睡眠sleep 9.3.4线程让步yield 9.3.5后台线程 9.3.6结束线程 9.4线程同步 实训简易秒表 实训要求 知识点 参考代码 习题 第10章I/O操作 10.1流与文件概述 10.1.1输入/输出 10.1.2流 10.1.3文件 10.2文件类 10.2.1File类 10.2.2文件遍历 10.2.3文件的过滤器 10.3字节流和字符流 10.3.1字节输出流 10.3.2字节输入流 10.3.3字符输出流 10.3.4字符输入流 10.3.5字节流和字符流的区别 10.4字节流和字符流的转换 10.4.1InputSreamReader 10.4.2OutputStreamWriter 10.5随机文件访问类RandomAccessFile 10.6对象序列化与反序列化 实训仿Windows记事本 实训要求 知识点 实训效果参考图 参考代码 习题 第11章Java数据库编程 11.1MySQL数据库 11.1.1MySQL数据库概述 11.1.2MySQL数据库的安装 11.1.3Navicat的安装和使用 11.2JDBC的体系结构 11.2.1JDBC组成 11.2.2JDBC API简介 11.3JDBC应用程序开发 11.3.1JDBC使用基本流程 11.3.2数据库驱动程序的加载 11.3.3连接数据库 11.3.4对数据库表中的数据进行操作 11.3.5操作结果的处理与访问 11.3.6JDBC的关闭操作 实训学生信息管理系统 实训要求 知识点 效果参考图 参考代码 习题 第12章网络编程 12.1网络编程的基本概念 12.1.1网络基础 12.1.2TCP与UDP 12.1.3Java中所涉及的网络应用类 12.2InetAddress 12.2.1IP地址 12.2.2创建InetAddress对象 12.3URL 12.3.1URL简介 12.3.2URL类 12.3.3URLConnection类 12.4URLEncoder/URLDecoder类 12.4.1application/xwwwformurlencoded字符串 12.4.2对字符编码时的规则 12.4.3URL参数的转码与解码 12.5TCP编程 12.5.1套接字通信机制 12.5.2客户端套接字Socket类 12.5.3服务器端套接字ServerSocket类 12.5.4多线程服务器程序 实训简易多人聊天室 实训要求 知识点 效果参考 参考代码 习题 参考文献
摘要
    第3章
     数组与字符串
     Chapter 3
     实习学徒学习目标
     (1) 掌握数组在内存中的分配状态。
     (2) 掌握一维及二维数组的基本用法。
     (3) 熟练使用String类型的常用方法。
     数组是Java中一种重要的数据结构。数组是同类型数据的有序集合,同一数组里的每一个元素都具有一个相同的类型,先后顺序也是固定的。它的数据类型既可以是简单类型,也可以是类。对象数组和原始数据类型数组在使用方法上几乎接近一致。专享的差别在于对象数组存储的是引用,而原始数据类型数组存储的是具体的数值。
     声明一个数组是通过数组名进行的,而使用数组中存储的值时只能以数组元素为单位进行。一个数组中所拥有的元素数目称为该数组的长度。数组是一种高效的存储和随机访问对象引用序列的方式,使用数组可以快速访问数组中的元素。对于Java来说,为保存和访问一系列对象,有效的方式就是数组。数组实际代表一个简单的线性序列,它使得元素的访问速度非常快,但我们也要为这种速度付出存储空间的代价。创建一个数组对象时,它的大小是固定的,而且不能在那个数组对象的“存储时间”内发生改变。
     3.1一 维 数 组
     数组是一个独立的对象,数组在定义、分配内存和赋值后才可以使用。
     3.1.1数组的说明与构造
     同其他类型变量一样,在使用数组前,必须先声明它。数组声明的格式为
     类型 数组名[];
     其中类型指出了数组中各元素的数据类型,它可以是基本类型和构造类型(类); 数组名为Java标识符; []部分指明该变量是一个数组类型变量。
     例如:
     int arry[ ];
     说明是一个整数数组,数组中的每个元素为int整型数据。
     数组声明时,也可以将[ ]放在类型之后;
     例如:
     int[ ] arry;
     它的效果和上面的例子一样。
     在说明数组时,不直接指出数组中元素的个数(即数组长度)。数组说明之后不能立即被访问,因为还没有为数组元素分配内存空间。需要使用new操作来构造数组,即在数组说明之后为数组元素分配内存空间,同时对数组元素进行初始化。其格式如下:
     数组名=new类型[数组长度];
     例如:
     arry=new int[5]; 它为整型数组arry分配5个整数元素的内存空间,并使每个元素初值为0。为简化起见,还可以把数组的说明和构造合并在一起,其格式如下:
     类型 数组名[ ]=new 类型[数组长度];
     例如:
     int arry[ ]=new int[5];
     这个语句等同于下面两个语句
     int arry[ ];
     arry=new int[5];
     用new关键字为一个数组分配内存空间后,系统将为每个数组元素都赋予一个初值,这个初值取决于数组的类型。所有数值型数组元素的初值为0,字符型数组元素的初值为一个不可见的ISO时控制符,布尔型数组元素的初值为false,字符串数组和所有其他对象数组在构造该元素时的初始值为null。在实际应用中,用户应根据具体情况对数组元素重新进行赋值。数组一旦创建之后,就不能再改变其长度。
     3.1.2数组的初始化
     数组初始化就是为数组元素指定初始值。通常在构造数组时,Java会使每个数组元素初始化为一个默认值。但在许多情况下,并不希望数组的初始值为默认值,此时,就需要用赋值语句来对数组进行初始化。
     数组的初始化有两种方式: 一种方式是像初始化简单类型一样自动初始化数组,即在说明数组的同时进行初始化; 另一种方式是在声明之后再构造数组,然后为每个元素赋值。
     例如:
     int a[ ]={1,2,3,4,5};
     上述语句声明并创建了数组a,并且为数组的每个元素赋值,即初始化,使a[0]=1,a[1]=2,a[2]=3,a[3]=4,a[4]=5。
     由上可见,数组初始化可由花括号{ }括起来的一串由逗号分隔的表达式组成,逗号分隔数组元素中的值。在语句中不必明确指明数组的长度,因为已经体现在所给出的数组元素个数中了,系统会自动根据所给的元素个数为数组分配一定的内存空间,如上例中数组a的长度自动设置为5。
     3.1.3数组元素的使用
     声明了一个数组,并用new语句为它分配了内存空间后,就可以在程序中像使用任何变量一样来使用数组元素,即可以在任何允许使用变量的地方使用数组元素。数组元素的表示方式为
     数组名[下标]
     其中下标为非负的整数或表达式,其数据类型只能为byte、short和int,而不能为long。下标的取值范围从0开始,一直到数组的长度减1。
     Java在对数组元素操作时会对数组下标进行越界检查,以保证安全性。若在Java程序中超出了对数组下标的使用范围,程序会有出错提示。在Java中,数组也是一种对象。数组经初始化后就确定了它的长度,对于每一个已分配了存储空间的数组,常用属性和方法表现在以下几个方面。
     (1) 数组的复制: System.arraycopy( )。
     (2) 数组的排序: Arrays.sort( )。
     (3) 在已排序的数组中查找某个元素: Arrays.binarySearch( )。
     (4) 数组中特定元素的寻找: binarySearch( )。
     (5) 比较两个数组是否相等(在相同位置上的元素是否相等): equals( )。
     (6) 数组填充: fill( )。
     (7) 数组排序: sort( )。
     在Java中,所有的数组都有一个默认的属性length,用于获取数组中元素的个数。例如intArray.length指明intArray的长度。
     例3.1数组长度测定。
     public class ArrayDemo1
     {
     public static void main(String[] args)
     {
     // TODO Auto-generated method stub
     int i;
     double a1[];
     char [] a2;
     a1=new double[8];
     a2=new char[8];
     int a3[]=new int[8];
     byte[] a4=new byte[8];
     char a5[]={'A','B','C','D','E','F','H','I'};
     System.out.println("a1.length="+a1.length);
     System.out.println("a2.length="+a2.length);
     System.out.println("a3.length="+a3.length);
     System.out.println("a4.length="+a4.length);
     for(i=0;i<8;i++)
     {
     a1[i]=100.0+i;
     a2[i]=(char)(i+97);
     a3[i]=i;
     }
     System.out.println("a1\ta2\ta3\ta4\ta5");
     System.out.println("double\tchar\tint\tbtye\tchar");
     for(i=0;i<8;i++)
     System.out.println(a1[i]+"\t"+a2[i]+"\t"+a3[i]+"\t"+a4[i]+"\t"+a5[i]);
     }
     }
     程序执行结果如图3.1所示。
     图3.1例3.1的运行结果
     例3.2数组的循环遍历,求数组的优选值和最小值。
     public class ArrayForDemo
     {
     public static void main(String[] args)
     {
     // TODO Auto-generated method stub
     int [] score={88,78,87,96,60,93};
     int max;
     int sum;
     max=score[0];
     for(int i=1;i     {
     if(score[i]>max)
     {
     max=score[i];
     }
     }
     System.out.println("优选成绩是:"+max);
     sum=0;
     for(int i=0;i     {
     sum+=score[i];
     }
     System.out.println("平均成绩是:"+sum/score.length);
     }
     }
     程序执行的结果为
     优选成绩是:96
     平均成绩是:83
     3.2多 维 数 组
     Java语言提供了支持多维数组的语法,但Java中只有一维数组,没有“多维数组”的明确的结构。然而对于一个一维数组而言,其数组元素可以是数组,这就是概念上的多维数组,也就是说,在Java语言中,把二维数组实际上看成每个数组元素是一个一维数组。这样的根本原因是计算机存储器的编址是一维的,即存储单元的编号是从0开始一直连续编到最后一个编号。在Java中,多维数组实际是数组的数组。定义多维数组变量要将每个维数放在它们各自的方括号中。
     3.2.1二维数组的声明
     声明二维数组的方法有以下3种。这3种方法是等价的,一般使用第3种方法。
     数据类型 数组名[ ][ ]; 数据类型[ ] 数组名[ ];
     数据类型[ ][ ] 数组名;
     例如:
     int [ ][ ] arry;
     与一维数组一样,此时还没有为数组元素分配内存空间,还需要用new关键字来创建数组,然后才可以使用该数组的每个元素。
     对二维数组来说,分配内存空间有下面两种方式。
     (1) 直接为每一维数组分配空间,如:
     int arry [ ][ ]=new int[2][3];
     该语句创建了一个二维数组arry,其较高一维数组含有两个元素,每个元素都是由三个整型数构成的整型数组。如图3.2所示。
     arry[0][0]arry[0][1]arry[0][2]
     arry[1][0]arry[1][1]arry[1][2]
     图3.2二维数组arry
     (2) 从优选维开始,分别为每一维数组分配空间,如:
     int score[ ][ ]=new int[ ][ ]; //优选维数组含2个元素,每个元素为一个整型数组
     score[0]=new int[3]; //优选维数组第一个元素是一个长度为3的整型数组
     score[1]=new int[5]; //优选维数组第二个元素是一个长度为5的整型数组
     如图3.3所示。
     score[0][0]score[0][1]score[0][2]
     score[1][0]score[1][1]score[1][2]
     score[1][3]score[1][4]
     图3.3为数组分配空间
     注意: 在使用运算符new来分配内存时,对于多维数组至少要给出优选维数组的大小。如果程序中出现如下语句:
     int score[ ][ ]=new int [ ][ ];
     则编译出现问题。
     3.2.2二维数组的初始化
     二维数组元素的初始化有以下两种。
     (1) 直接对每个元素进行赋值。
     (2) 在说明数组的同时进行初始化。
     例如,如下语句:
     int arry[ ][ ]={{1,4},{2,3},{6,7}};
     声明了一个2×3的数组,并对每个元素赋值。即
     arry[0][0]=1
     arry[0][1]=4
     arry[1][0]=2
     arry[1][1]=3
     arry[2][0]=6
     arry[2][1]=7
     3.2.3二维数组的使用 对二维数组中的每个元素,其引用格式为
     数组名[下标1][下标2];
     其中,下标1、下标2分别是第一维数组和第二维数组的下标。
     例3.3使用二维数组,存放乘法表的结果。
     public class ArrayDemo2
     {
     public static void main(String[] args)
     {
     // TODO Auto-generated method stub
     int [][] triangleArray=new int[9][];
     for(int i=0;i     {
     triangleArray[i]=new int[i+1];
     }
     for(int i=0;i     {
     for(int j=0;j     {
     triangleArray[i][j]=(i+1)*(j+1);
     }
     }
     for(int i=0;i     {
     for(int j=0;j     {
     System.out.print("\t"+triangleArray[i][j]);
     }
     System.out.println();
     }
     }
     }
     程序执行结果如图3.4所示。
     图3.4例3.3的运行结果
     3.2.4数组复制
     在Java中,经常会用到数组的复制操作。一般来说,数组的复制是指将源数组的元素做副本,赋值到目标数组的对应位置。常用的数组复制方法有以下3种。
     ? 使用循环语句复制;
     ? 使用clone()方法;
     ? 使用 System.arraycopy()方法。
     1. 使用循环语句复制
     使用循环语句访问数组,对其中每个元素进行访问操作,这是最容易理解、也是最常用的数组复制方式。例3.4中使用for循环实现数组复制功能。
     例3.4使用for循环实现数组复制功能。 public class ArrayCopyFor
     {
     public static void main(String[] args)
     {
     // TODO Auto-generated method stub
     int [] array1={1,2,3,4,5};
     int [] array2=new int[array1.length];
     for(int i=0;i     {
     array2[i]=array1[i];
     }
     System.out.println("复制结果:");
     for(int i=0;i     {
     System.out.print(array2[i]+",");
     }
     }
     }
     执行结果为
     复制结果:
     1,2,3,4,5,
     2. 使用clone()方法
     在Java中,Object类是所有类的父类,其中clone()方法一般用于创建并返回此对象的一个副本,Java中认为一切都是对象,所以使用该方法也可以实现数组的复制。
     例3.5使用clone()方法实现数组复制。
     public class ArrayCopyClone
     {
     public static void main(String[] args)
     {
     // TODO Auto-generated method stub
     int [] array1={1,2,3,4,5};
     int [] array2=array1.clone();
     System.out.println("复制结果:");
     for(int i=0;i     {
     System.out.print(array2[i]+",");
     }
     }
     }
     执行结果为
     复制结果:
     1,2,3,4,5,
     3. 使用System.arraycopy()方法
     System.arraycopy()方法是System类的一个静态方法,可以方便地实现数组复制功能,System.arraycopy()方法的格式如下:
     System.arraycopy(from,fromIndex,to,toIndex,count) 该方法共有5个参数: from、fromIndex、to、toIndex、count,其含义是将数组from中的索引为fromIndex开始的元素,复制到数组to中索引为toIndex的位置,总共复制的元素个数为count个。
     例3.6使用System.arraycopy()方法实现数组复制。
     public class ArrayCopySystem
     {
     public static void main(String[] args)
     {
     int [] array1={1,2,3,4,5};
     int [] array2=new int[array1.length];
     System.arraycopy(array1, 0, array2, 0, array1.length);
     System.out.println("复制结果:");
     for(int i=0;i     {
     System.out.print(array2[i]+",");
     }
     }
     }
     执行结果为
     复制结果:
     1,2,3,4,5,
     3.2.5数组应用实例
     例3.7冒泡排序。
     排序是把一组数据按照值的递增(由小到大)或递减(由大到小)的次序重新排列的过程。冒泡排序的关键点是从后向前对相邻的两个数组元素进行比较,若后面元素的值小于前面元素的值,则将这两个元素交换位置; 否则不进行交换。依次进行下去,第一趟排序可将数组中值最小的元素移至下标为0的位置。对于有n个元素的数组,循环执行n-1趟扫描便可完成排序。也可从前向后对相邻的两个数组元素进行比较,但此时应注意将大数向后移,与小数前移的冒泡法相对应。
     import java.io.BufferedReader;
     import java.io.IOException;
     import java.io.InputStreamReader;
     class SortClass
     {
     void sort(int arr[])
     {
     int i,j,temp;
     int len=arr.length;
     for(i=0;i     for(j=len-1;j>i;j--)
     if(arr[j]     {
     temp=arr[j-1];
     arr[j-1]=arr[j]; arr[j]=temp;
     }
     }
     }
     public class Demo
     {
     public static void main(String[] args) throws IOException
     {
     // TODO Auto-generated method stub
     BufferedReader keyin=new BufferedReader(new InputStreamReader(System.in));
     int i,j,temp;
     String c1;
     int arr[]=new int[5];
     int len=arr.length;
     System.out.println("请从键盘输入5个数据");
     for(i=0;i     {
     c1=keyin.readLine();
     arr[i]=Integer.parseInt(c1);
     }
     System.out.print("原始数据为");
     for(i=0;i     System.out.print(" "+arr[i]);
     图3.5例3.7的运行结果
     System.out.println("\n");
     SortClass p1=new SortClass();
     p1.sort(arr);
     System.out.println("冒泡法排序的结果");
     for(i=0;i     System.out.print(" "+arr[i]);
     System.out.println("\n");
     }
     }
     程序执行的结果如图3.5所示。
     例3.8杨辉三角形。
     杨辉三角形是宋朝数学家杨辉在公元1261年所著《详解九章算法》里面的一张图。
     public class Demo
     {
     public static void main(String[] args)
     {
     int triangle[][]=new int[10][];
     for (int i = 0; i < triangle.length; i++)
     {
     triangle[i]=new int[i+1];
     for(int j=0;j<=i;j++)
     {
     if(i==0||j==0||j==i) {
     triangle[i][j]=1;
     }else
     {
     triangle[i][j]=triangle[i-1][j]+triangle[i-1][j-1];
     }
     System.out.print(triangle[i][j]+"\t");
     }
     System.out.println();
     }
     }
     }
     执行结果如图3.6所示。
     图3.6例3.8的运行结果

蜀ICP备2024047804号

Copyright 版权所有 © jvwen.com 聚文网