Java软件设计基础 2. Java语言基础.

Slides:



Advertisements
Similar presentations
网络应用程序设计 2014 JavaBean. JavaBean 及其属性 JavaBean 就是一种 Java 的组件技术 JavaBean 是 Java 类 JavaBean 通过约定的方法名实现属性功能 简单属性 void setXxx(Type value) Type getXxx() boolean.
Advertisements

第二章 Java基本语法.
Oracle数据库 Oracle 子程序.
第二章 JAVA语言基础.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
第10讲 Java面向对象编程基础(4) 教学目标 主要内容.
第九章 字符串.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
EBNF 请用扩展的 BNF 描述 C语言里语句的结构; 请用扩展的 BNF 描述 C++语言里类声明的结构;
2.5 字符串.
抽象类 File类 String类 StringBuffer类
管理信息结构SMI.
走进编程 程序的顺序结构(二).
辅导课程六.
第2章 数据类型与数据运算.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
C语言程序设计基础 刘新国.
第二章 Java语言基础.
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
第2章 Java语言基础 2.1 标识符 2.2 变量和常量 2.3 基本数据类型 2.4 赋值语句 2.5 运算符和表达式
第二章 数据类型、运算符与表达式.
第一章 函数与极限.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
1.3 C语言的语句和关键字 一、C语言的语句 与其它高级语言一样,C语言也是利用函数体中的可执行 语句,向计算机系统发出操作命令。按照语句功能或构成的不 同,可将C语言的语句分为五类。 goto, return.
C语言程序设计 主讲教师:陆幼利.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
学习目标 1、什么是字符集 2、字符集四个级别 3、如何选择字符集.
$9 泛型基础.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
程序设计基础A(C语言) 主讲教师: 许 康 教师主页:
Visual C# 2005程序设计 第1章 Visual C#概述 第2章 C#语法基础 第3章 顺序结构程序设计
第二章 Java基本语法 讲师:复凡.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
C语言程序设计 第一章 数据类型, 运算符与表达式 第二章 顺序程序设计 第三章 选择结构程序设计 第四章 循环控制 第五章 数组.
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
第4章 Excel电子表格制作软件 4.4 函数(一).
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
第九节 赋值运算符和赋值表达式.
3.16 枚举算法及其程序实现 ——数组的作用.
本节内容 结构体 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第4课时 绝对值.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
ASP.NET实用教程 清华大学出版社 第4章 C#编程语言 教学目标 教学重点 教学过程 2019年5月5日.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
学习目标 1、了解基本运算符 2、运算符优先级.
2.6 字符型数据 一、 字符常量 1、字符常量的定义 用一对单引号括起来的单个字符,称为字符常量。 例如,‘A’、‘1’、‘+’等。
C程序设计 实验二 数据类型、运算符和表达式 第6讲
第4章 数组与字符串 学习目标 本章要点 上机练习 习 题.
第二章 Java基本语法 讲师:复凡.
程序设计基础A(C语言) 第一章 C语言概述 主讲教师: 许 康
Chap 6 数据类型和表达式 6.1 数据的存储和基本数据类型 6.2 常量和变量 6.3 数据的输入和输出 6.4 类型转换
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
基本知识 数据类型、变量、常量、运算符.
数据表示 第 2 讲.
Java程序设计 第3章 控制语句.
第二章 数据类型与表达式 丘志杰 电子科技大学 计算机学院 软件学院.
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
顺序结构程序设计 ——关于“字符串”和数值.
<编程达人入门课程> 本节内容 有符号数与无符号数 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第9章 位 运 算.
第2章 Java语言基础.
编译原理实践 6.程序设计语言PL/0.
§2 自由代数 定义19.7:设X是集合,G是一个T-代数,为X到G的函数,若对每个T-代数A和X到A的函数,都存在唯一的G到A的同态映射,使得=,则称G(更严格的说是(G,))是生成集X上的自由T-代数。X中的元素称为生成元。 A变, 变 变, 也变 对给定的 和A,是唯一的.
2 Java语言基础 (数据运算与流程控制).
第二章 简单数据类型 §2.1 数据类型概述 §2.2 变量和常量 §2.3 简单数据类型 §2.4 简单数据类型的相互转换
学习目标 1、什么是列类型 2、列类型之数值类型.
Presentation transcript:

Java软件设计基础 2. Java语言基础

2.1 符号 标识符 程序中要用到许多名字,诸如类、对象、变量、方法等。标识符就是用来标识它们的唯一性和存在性的名字。 Java采用Unicode字符集,由16位构成。 标识符分为两类: 保留字:是Java预定义的标识符,都具有特定的含义,保留字又称关键字。 保留字的含义见书上32页的表2-1

用户自定义标识符的定义规则: 用户定义标识符:是程序设计者根据自己的需要为定义的类、对象、变量、方法等的命名。 以字母、下划线或$符开头的字母、下划线、数字、 $符的序列。 一些由开发环境自动生成的名称中会带有$符或下划线,因此虽然规 则允许,但是自定义的变量名称中应尽量避免使用$符或下划线。 标识符区分大小写。 标识符不能与保留字同名。 标识符遵守先定义后使用的原则。 虽然true、false和null并不是关键字,但其代表的是值,也不可以用以上三个作为自定义标识符的名字。 标识符的长度是任意的。 虽然如此,但不宜过长,也不宜取难以理解的简写。最好有象征性含 义,起到见文生意的作用,提高程序的可读性。

分隔符 规定任意两个相邻标识符、数、保留字或两个语句之间必须至少有一个分隔符,以便编译程序能识别。 分隔符不能互相代用。 分隔符的分类 空白分隔符 空格、TAB制表符、换行符与回车符都是典型的空白分隔符。 为了程序的可读性和美观,语句的成分之间可以插入任意多个空白分 隔符,在编译时系统会自动忽略多余的空白分隔符。

注释语句 注释用来对程序中的代码做出解释。注释部分对程序的执行不产生任何影响,可增加程序的可读性,有利于程序的修改、调试、交流。 普通分隔符 { }用来定义复合语句、类体、方法体以及进行数组的初始化等。 ;表示一条语句的结束。 ,用来分隔变量的说明和方法的参数等。 :说明语句标号等。 注释语句 注释用来对程序中的代码做出解释。注释部分对程序的执行不产生任何影响,可增加程序的可读性,有利于程序的修改、调试、交流。 注释语句的格式

编码规范 规范原则 约定细则 第一种用于行注释;第二、三种用于多行注释。 尽量使用完整的英文描述符; 采用大小写混合使名字可读,采用适用于相关领域的术语; 尽量少用缩写,若已使用尽量明智,且在整个文件或工程中通用; 避免使用长的和类似的名字,或仅仅是大小写不同的名字; 除静态常量外,尽量少用下划线。 约定细则 源文件命名规则 源程序中包含有公共类的定义,源文件名必须与该公共类的名字一致。 在一个源程序中至多只能有一个公共类的定义; 规范原则、约定细则见书34页

包 类 接口 方法 变量 源程序中不包含公共类,则该文件名只要和某个类名字相同即可; 源程序中有多个类的定义,编译时将会为每个类生成一个class文件 。 包 包名是全小写的名词,中间可以由点分隔开,如java.awt.event。 类 类名首字母大写,若由多个单词合成一个类名,要求每个单词的字母 也要大写,如MyFirstJava。 接口 命名规则同类名,如Collection。 方法 由多个单词组成的方法名首字母小写,中间的每个单词首字母大写, 如isButtonPressed。 变量 一般全小写,如length。

常量 一般全大写,如果由多个单词组成则中间用下划线相连。如果是对象类 型的常量,则是大小写混合,由大写字母把单词隔开,如STR_LENGTH。 组件 使用完整的英文描述来说明组件的用途,尾部应该加上组件类型,如 okButton。

2.2 基本数据类型 概述 Java数据类型的分类 Java数据存储空间大小 字节型:byte 短整型:short 整型:int 长整型:long 概述 Java数据类型的分类 Java数据存储空间大小 整型 浮点型 数值型 字符型:char 布尔型:boolean 单精度:float 双精度:double 基本数据类型 Java数据类型 数组:array 接口:interface 类:class 复合数据类型

默认值 声明字段时不必为其赋值。被声明但是没有初始化的字段会被编译器设置为合理的默认值。 局部变量稍有不同,编译器永远都不会给未初始化的局部变量分配默认值。如果在声明局部变量时不能初始化它,就要确保使用之前为其赋值,否则将导致编译错误。 数据类型 默认值 byte short int long 0L float 0.0f double 0.0d char ‘\u0000’ String(或者任何对象) null boolean false

字面量(literal) 当初始化原始类型的变量时,没有使用到关键字new。 原始类型是语言内置的特殊数据类型,不是从类创建的对象。 字面量是固定值的源代码表现形式,直接出现在代码中,无需计算。 特殊的字面量null 可以用作任何引用类型的值,可以赋值给除了属于原始数据类型的变 量之外的任何变量。除了测试其存在之外,对null值没有什么可做的操 作,因此在程序中常使用null作为标识,表示某个对象不可用。

整数类型 整型是那些没有小数部分的数据类型。 分类 不同整数数据类型的意义在于它们所需的内存空间大小不同,这也决定了它们所能表达的数值范围的不同。 采用不同的整数类型表达同一数值,在存储单元中的存储情况是不同的。 分类 byte,short,int,long 在内存紧张的情况下,可将byte或short用于大型数组以便节省内存。 整型数20在内存中的存储形式

浮点型 表示形式 分类 int是整数值的默认选择类型,除非出于某种原因选择其他类型。 当将超过int数值范围的值付给long类型的时候,必须在值后加上L或者l。 表示形式 十进制整数,如33,58,-90。 八进制整数,以0开头,如010表示十进制的8。 十六进制整数,以0x开头,如0x10表示十进制的16。 浮点型 分类 float Java缺省的浮点类型是double,给float变量赋予带小数的初值时必 须在数值后加f或F。 double 给该类变量赋值时可以在后面加上d或D。

表示方法 十进制形式 科学计数法或指数形式 字母E表示以10为底的指数。采用科学表示法时,尾数必须有,但小数 部分可无,阶码必须有且是整数。 字符型 Java的字符使用16位的Unicode编码表示,它可以支持世界上的所有语言。 “\u0000”~“\u00FF”用来表示ASCII码集。 表示形式 包括在单引号之内的单个字符; 用单引号括起来的八进制Unicode字符,形式为’\ddd’,d的范围是0~7;

注意 char类型是一种特殊类型的整数类型,没有负数,其范围是0~65535,它们可以被转换为整数并可以进行整数运算。 用单引号括起来的十六进制Unicode字符,形式为’\uxxxx’,x的范围是0~F; 不能显示的控制字符,可以通过转义字符来表示; 注意 char类型是一种特殊类型的整数类型,没有负数,其范围是0~65535,它们可以被转换为整数并可以进行整数运算。 把字符串包含在双引号中,就会自动的创建新的String对象。String对象是不可变的,即创建后就不能改变他们的值。

布尔型 被用作真/假条件的简单标志,与C/C++不同的是,它的值不与任何整数值对应。

2.3 常量与变量 常量 变量 常量是指在程序运行过程中其值不变的量。常量在表达式中用文字串表示,它有整型常量、字符型常量等等不同的类型。 常量通过用关键字final来实现声明,通常写在最前面。 变量 变量用来存放指定类型的数据,其值在程序运行过程中是可变的。 变量的声明 使用一个变量之前必须先声明它。一方面给该变量分配内存空间,另一方面防止在以后使用此变量时因错误输入而对不存在的变量进行操作。 final 类型 常量名=常量值;

变量的使用 [修饰符] 类型名 变量名1[,变量名2][,…]; 以“变量名”为名建立一个某类型的变量; ;表示声明语句的结束; [ ]表示可选; 可在一条语句中定义多个同类型的变量,中间用逗号隔开; 在声明的同时可以赋值; 修饰符也称为作用域,指明作用域的类型; 数据类型决定了变量所包含的值的范围、可对变量进行哪些操作以及 如何定义这些操作; 变量的使用 变量的初始化是简单的赋值使用,当在语句中使用到该变量的名称时,编译器会自动将当时变量的值取来用。 局部变量在使用前必须初始化。 [修饰符] 类型名 变量名1[,变量名2][,…]; [修饰符] 类型名 变量名1[=初值1][,变量名2][=初值2][,…];

变量的类型 变量的作用域 基本数据类型(布尔型、字符型、整型、浮点型、数组、接口、类) Java中的变量有一定的生存期和有效范围,变量的作用域指明可访问该变量的一段代码。 按照作用域划分: 全局变量:可以在整个类中被访问; 局部变量:在方法或方法的一个代码块中声明,它的作用域为它所在 的代码块; 类变量:在类中声明,而不是类的某个方法中声明,作用域为整个类; 方法参数(变量):作用域为传递给的那个方法; 异常处理参数:传递给异常处理代码,作用域是异常处理部分。

将语句”int j=58;”放在语句”int i=15;”后面,则变量j的作用域变为整个main()方法,程序编译通过。

程序中用来处理数据、表示数据运算、赋值和比较的符号称为运算符,参与运算的数据称为操作数。 分类 2.4 运算符 程序中用来处理数据、表示数据运算、赋值和比较的符号称为运算符,参与运算的数据称为操作数。 分类 算术运算符 算术运算符用于对整型数和实型数的运算。按照其要求的操作数个数分为一元运算符和二元运算符两类。 +(正号)、-(负号)、++(自增)、--(自减); +(数值加、连接字符串)、-(减)、*(乘)、/(除)、%(取 模)。 ++x是在变量参与运算之前自增1,然后用新值参与运算;而x++是先用以前的值参与运算,再自增1;--x和x--同理。 除号“/”中,如果运算符两边的操作数都是整数,则计算结果只保留整数部分。 当+作为字符串连接操作符时,可以连接两个字符串、字符串与字符、字符串与数字。

比较运算符 又称关系运算符,有==(等于)、!=(不等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)、instanceof(是否为某类对象)几种; 在一个比较运算符两边的数据类型应该一致,比较逻辑成立为true,不成立为false; 如果操作数是对象变量,则对象变量引用同一个对象或都为null的时候为true,否则为false。 逻辑运算符 又称布尔运算符,用于对布尔型操作数进行计算。 !(非) &(与)、|(或)、^(异或)、&&(短路与)、||(短路或)。 &&和&的区别是,前者只要左边的操作数为false时,就不再计算,直接给出结果是false;||和|的区别同样。简化了计算过程。

位运算符 对整数数值二进制表示中的每位进行测试、置位、移位等处理。 ~(位反) &(位与)、|(位或)、^(位异或)、<<(位左移)、>>(位右 移)、>>>(不带符号的位右移) Java使用补码来表示二进制码,最高位为符号位,整数的符号位为0,负数的符号位为1。 正数:[x]原码= [x]反码=[x]补码 5的补码为00000101。 负数:[x]反码为[x]原码除了最高位以外按位求反, [x]补码为[x]反码+1。 -5的原码为10000101,反码为11111010,补码为11111011。 在移位时,位左移右边补0;位右移时,高位移入原来最高位的值;无符号右移时,低位被舍弃,高位补0。 在对byte和short类型的值进行位移运算时,Java将自动把这些类型扩大为整形。

条件运算符 赋值运算符 是一个三元运算符“ ? : ”,它是Java中唯一的三元运算符,形式如下: 其中表达式的值为一个布尔值,如果结果为true,则整个表达式的值为表达式1的值;否则为表达式2的值,表达式1和表达式2应返回相同的数据类型。 赋值运算符 简单赋值运算符“=”:把运算符右边的值赋给左边的常量或变量。在一个赋值表达式内也可以连续赋值。 扩展赋值运算符:在“=”前加上其他运算符。 +=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=、>>>= 布尔表达式?表达式1:表达式2 s op= i s=s op i

运算符的优先级 其他运算符 表达式的运算次序取决于表达式中各种运算符的优先级。优先级高的先运算,优先级低的后运算。 另外,还可以用“()”改变优先级次序。 运算符 功能 ( ) 表达式加括号优先执行 (参数表) 方法参数传递,多个参数时用逗号隔开 (类型) 强制类型转换 . 分量运算符,用于对象属性或方法的引用 [ ] 下标运算符,用于数组 new 对象实例化运算符,实例化一个对象,即为其分配内存

优先级 运算符 描述 结合性 1 . [ ] ( ) 域、数组、括号 左右 2 ++ -- + - ! ~ instanceof 一元操作符 右左 3 new (type) 新建对象、强制类型转换 4 * / % 乘、除、取余 5 + - 加、减 6 >> << >>> 位运算 7 > < >= <= 比较运算 8 == != 9 & 与 10 ^ 异或 11 | 或 12 && 逻辑运算 13 || 14 ?: 条件运算符 15 = += -= *= /= %= ^= 扩展赋值运算符 16 &= |= <<= >>= >>>=

例:按照上表的优先级规定,下面表达式有唯一的计算顺序: 注意 上述表达式的写法比较难以理解并容易产生错误。因此在写程序时尽量使用括号来使表达式的计算次序一目了然。维持这种编程习惯可以使代码更易于阅读和维护。 数学上的表达式如a<b<c在Java中必须写成(a<b)&&(b<c)这样的形式。

2.4 表达式、语句和块 表达式(Expression) 表达式是由操作数和运算符按照一定的语法形式组成的符号序列,计算出单一值,该值的类型取决于表达式中使用的元素。 表达式是语句的核心部分。 Java允许使用各种较小的表达式构成复合表达式,但表达式各个部分的数据类型要匹配。

语句(Statement) 语句是程序的基本组成单位,组成了一个完整的执行单元,大致相当于自然语言中的句子。下面的表达式类型以;结尾时可以组成一个语句: 赋值表达式; ++或--; 方法调用; 对象创建表达式。 上述语句被称为表达式语句。除了这些,还有另外两种语句: 声明语句 用来声明一个变量等。 控制流语句 控制语句的执行次序。

块(block) 是位于成对大括号之间的零个或多个语句的语句组,可以在允许使用单一语句的任何位置使用块。

2.5 类型转换 自动类型转换 整型、实型、字符型数据可以混合运算。运算过程中,不同类型的数据会自动转换为同一类型,然后进行运算。 自动转换按低级类型数据转换成高级类型数据的规则进行,最后生成的值也是高级类型数据。 数据类型约束 Java定义了若干适用于表达式的类型提升,所有的byte和short型的值都会被系统提升到int型。 如果一个操作数是long型,那么整个表达式会被提升到long型。 (1)(byte或short) op int  int (2)(byte或short或int) op longlong (3)(byte或short或int或long) op floatfloat (4)(byte或short或int或long或float) op doubledouble (5)char op intint

强制类型转换 不是所有的数据类型都允许隐含性的自动转换。当把占位较长的数据转化为占位较短的数据时,会出现信息丢失的情况,因为不能自动转换。高级数据类型要转换成低级数据类型,需要用到强制数据类型转换。其一般形式为: 经过强制类型转换将得到一个在( )中声明的类型的数据。 将占用位数较长的数据转化成占用位数较短的数据时,可能会造成数据超出较短数据类型的取值范围,造成溢出。 复合数据类型也可以进行转化。 一般使用强制类型转换可能会导致数值溢出或精度下降,应尽量避免。 (数据类型) 表达式 数据类型 (表达式)

short c=a+b; 因为Java的自动提升功能,导致结果是int类型,无法赋值给范围更小的short类型 int i1=dd+7; dd+7的值是double型,无法赋值给int类型,如果改为“int i1=(int)dd+7;”则编译通过 boolean bool=true&i; 布尔型与数字类型、字符型互相不兼容。

数组是相同类型的数据元素按顺序组成的一种复合数据类型。 特点 2.6 数组 数组是相同类型的数据元素按顺序组成的一种复合数据类型。 特点 数组也是一个对象; 一个数组中所有的元素应该是同一类型; 数组中的元素是有序的; 数组中的一个元素通过数组名和数组下标来确定。 分类 基本数据类型的数组与复合数据类型的数组 一维数组和多维数组 一维数组 声明格式:

分配数组空间 数组名的命名方法同简单变量,可以是任何合法的标识符; 类型标识符可以是基本数据类型或者是类、接口; 在声明数组时,不直接指出数组中的元素个数(即数组长度)。数组说明之后不能立即被访问,因为还没有为数组元素分配内存空间。因此需要使用new操作来构造数组,为其分配内存空间,格式如下: 类型 数组名[]; 类型[] 数组名; 数组名 = new 类型[元素个数];

声明数组的同时分配数组空间 元素个数即数组长度。数组分配空间是连续的,可以通过属性length获得该数组的元素个数,方法如下: 数组一旦创建之后,就不能再改变其长度! 数组名.length; 类型 数组名[] = new 类型[元素个数]; 类型[] 数组名 = new 类型[元素个数];

数组的初始化 用new分配空间后,系统将为每个数组元素都赋予一个初值,初值取决于数组的类型。 数值型数组:0 字符型数组:不可见ISO控制符(\u000) 布尔型数组:false 字符串数组以及其他对象数组:null 当不希望数组的初值为系统给定的默认值时,可以用赋值语句对数组进行初始化。 初始化可以在数组声明时进行,也可以声明以后,在构造数组的时候赋值。 其中初值表是用逗号隔开的一组值。 类型 数组名[] = {初值表}; 数组名[下标] = 初值;

数组元素的使用 当声明了一个数组并分配了内存空间后,就可以在程序中任何可以使用变量的地方使用数组元素,其格式为: 其中下标为非负的整型常数或表达式,其数据类型为int、short、byte,但不可以是long。 Java会对数组的下标进行越界检查以保证安全性。下标的范围是从0到数组的长度减一。 数组名[下标]

多维数组 严格的说Java并不支持多维数组,多维数组的声明是通过对一维数组的嵌套形式声明来实现的。这样的好处是允许行的长度可变。 二维数组的声明 分配二维数组空间 数组分配空间是连续的,构造方法如下: 直接为每一维分配空间 类型 数组名[][]; 类型[][] 数组名; 数组名 = new 类型[行数][列数];

在声明二维数组的同时分配数组空间 可以通过属性length获得该数组的元素个数,方法如下: 从最高维开始,分别为每一维分配空间 可以通过属性length获得该数组的元素个数,方法如下: 数组名.length求出多维数组中第一维的长度; 数组名[0].length求出多维数组中第二维的长度; 依此类推求出其余维的长度。 在使用new来分配内存时,对于多维数组至少要给出最高维的大小。 在声明二维数组的同时分配数组空间 类型 数组名[][] = new 类型[行数][列数]; 类型[][] 数组名 = new 类型[行数][列数];

二维数组初始化 赋初值与一维数组类似,可以直接对每个元素赋值,或者使用初值表赋值。 以下两种初始化方式是等价的: 类型 数组名[][] = {{初值表1},{初值表2},…,{初值表n}}; 数组名[行下标][列下标] = 初值;

多维数组的创建和使用 声明 创建 使用 类型 数组名[][]…[]; 类型[][]…[] 数组名; 类型 数组名[][]…[] = new 类型[长度1][长度2]…[长度n]; 类型[][]…[] 数组名 = new 类型[长度1][长度2]…[长度n]; 数组名[下标1][下标2]…[下标n]

复制数组 通过System类提供的arraycopy方法,格式如下 其中src和dest分别表示被复制的数组和目的数组。srcpos、destpos和length分别表示源数组中的开始位置、目的数组中的开始位置和要复制的数组元素的数量。 public static void arraycopy(Object src,int srcpos,Object dest,int destpos,int length)

字符串是字符组成的序列,Java语言将字符串作为对象来处理。 分类: 2.7 字符串 字符串是字符组成的序列,Java语言将字符串作为对象来处理。 分类: String类用于存储和处理那些值不会发生改变的字符串常量; StringBuffer类用于存储和操作那些可能发生变化的字符串变量。 字符串变量的声明 String字符串的创建 其中字符串内容即为赋给字符串变量的值。 String 字符串变量名 = new String(); String 字符串变量名 = new String(字符串内容);

String对象是不可变的,它的内容不能改变。 上述代码不能改变字符串的内容。 第一条语句创建了一个内容为“Java”的字符串对象,并将其引用赋 值给s; 第二条语句创建了一个内容为“HTML”的新String对象,并将其引用 赋给s。 赋值后第一个String对象仍然存在,但是不能再访问它,因为变量s 指向了新的对象。 String s=“Java”; s=“HTML”; s String对象: “Java” s String对象: “Java” String对象: “HTML”

字符串是不可变的,又被频繁的使用。当字符串字面量具有相同的字符序列时,通过使用唯一的实例,可提高JVM的效率并节约内存。 Java会确保一个字符串常量只有一个拷贝。 此时打印结果: true String s1="java"; String s2="java"; String s3="ja"+"va"; System.out.println(s1==s2); System.out.println(s1==s3); s1 被限定的String对象: “java” s2 s3

用new String()创建的字符串不是常量,因此并不放入常量池中,它们有着自己的地址空间; 打印结果为: false String s1=“java”; String s4=new String(“java”); System.out.println(s==s1); s1 常量池中的: “java” s4 String对象: “java”

在Java中,当一个String对象调用intern方法时,Java查找常量池中是否有相同Unicode的字符串常量,如有,则返回对它的引用;否则在常量池中增加一个该Unicode的字符串常量,并返回对它的引用。 打印结果为 false true String s1="java"; String s2=new String("java“); System.out.println(s1==s2); s2=s2.intern(); s1 常量池中的字符串常量 “java” s2 String对象: “java”

在上例中,运算符“==”只能检测字符串是否指向同一个对象,而不能判断是否具有相同的内容即字符序列。 字符串的比较可使用equals()方法对对象的内容进行相等比较,例如:在上例中,s.equals(s1)的值为true。 字符串也可以使用campareTo方法进行比较,当两个字符串相等时返回值为0,当不相等时,返回两个字符串第一个不相等字符间的差值。 此时a的值应为-4,因为s与s1第一个不相等的字符分别为c和g,c比g 小4,因此返回-4。 String s=“abc”; String s1=“abg”; int a=s.compareTo(s1);

如果一个字符串不需要改变,则使用String类而不要使用StringBuffer类。 StringBuffer类比String类更灵活,可以在字符串缓冲区中添加、插入或追加新的内容。 字符串的长度一定小于或等于字符串缓冲区的容量,如果有更多的字符加入字符串缓冲区,超出其容量,则缓冲区的容量会自动增加。 在计算机内部,字符串缓冲区是一个字符数组,如果超过缓冲区的容量,就用新的数组取代现有数组,新数组的长度为2*(原数组长度+1)。 如果一个字符串不需要改变,则使用String类而不要使用StringBuffer类。 StringBuffer 字符串变量名 = new StringBuffer(); StringBuffer 字符串变量名 = new StringBuffer(字符串内容);

字符串常量/变量赋值引用 字符串变量声明以后,就可以为其赋值引用。对于String对象,可以直接赋值;对于StringBuffer对象,则可以通过该类提供的append、insert等方法修改其值。

字符串连接操作 字符串的输出 字符串的简单连接利用“+”来完成。 其他类型的数据与字符串进行“+”运算时,将自动换成成字符串。 以下两段语句在效果上是等价的: 字符串的输出 System.out.print(字符串); System.out.println(字符串);

第一个例子将会产生15个String对象,依次为“String”、“String String”、“String StringString”…… 第二个例子则始终只在一个StringBuffer对象上修改。

字符串常用操作 String类提供的字符串操作方法: public String() 用于创建一个空的String字符串常量 public String(String value) 创建一个已经存在的内容为value的String字符串常量 public String(char value[]) 创建一个已经存在的内容为value[ ]数组的String字符串常量 public String(StringBuffer buffer) 用一个已经存在的StringBuffer对象来创建一个新的字符串常量 int length() 返回字符串的长度 char charAt(int index) 返回字符串位置index处的字符 int compareTo(String anotherStr) 当前字符串与anotherStr比较,相等为0,大于为正,小于为负 boolean equals(Object o) 比较两个字符串对象是否相等 boolean equalsIgnoreCase(String o) 忽略大小写的比较两个字符串对象是否相等 String substring(int beginIn,int endIn) 在当前字符串中求从起始位置到结束位置的子串 int indexOf(int ch) 从头向后查找字符ch首次出现的位置,未找到返回-1 int indexOf(String str) 在当前字符串中寻找str首次出现的位置,未找到返回-1

续 String toLowerCase() 将字符串换成小写 String toUpperCase() 将字符串换成大写 String trim() 去掉原字符串开头和结尾的空格,并返回新的字符串 String replace(char oldCh,char newCh) 用newCh替换字符串中所有的oldCh int parseInt(String str) 将数字格式字符串转换为int类型 int parselong(String str) 将数字格式字符串转换为long类型 String valueOf(int i) 将int数据类型转换为字符串 String concat(String str) 将str连接到原字符串后面 boolean startsWith(String Prefix) 从当前字符串的起始位置寻找字符串Prefix boolean endsWith(String suffix) 看当前字符串是否以字符串suffix为结尾

StringBuffer类提供的字符串操作方法 public StringBuffer() 创建可容纳16个字符的StringBuffer对象,大于16个字符自动增长 public StringBuffer(int size) 创建可容纳size个字符的StringBuffer对象,大于size个字符自动增长 public StringBuffer(String str) 按str创建一个动态可变的StringBuffer对象 StringBuffer append(Object o) 将obj转换为字符串并连接到在当前字符串末尾 StringBuffer insert(int offset,Object o) 将obj转换为字符串并插入到当前字符串offset位置 int capacity() 返回当前StringBuffer类对象分配的字符空间的数量 void setCharAt(int index,char ch) 将当前对象中的index位置的字符替换为ch delete(int beginIn,int endIn) 删除从beginIn开始到endIn结束之间的字符 String toString() 把StringBuffer字符串转换为String