slide1
Download
Skip this Video
Download Presentation
数据类型及其运算

Loading in 2 Seconds...

play fullscreen
1 / 69

数据类型及其运算 - PowerPoint PPT Presentation


  • 116 Views
  • Uploaded on

数据类型及其运算. 标识符. 标识符 : 为程序中的各个元素进行命名 . 一般地,在 Java 中标识符是以字母、下划线( _ )、美元符号( $ )等其它货币符号 ( 如 £ , ¥ ) 开始的一个字符序列,后面可以跟字母、下划线、美元符号、数字等字符。 Java 语言使用 Unicode 字符集 标识符是大小写敏感的,没有最大长度的限制,不能和关键字相同. 标识符. 总体来说定义标识符可以使用的字符包括: 大小写字母、数字; Unicode 字符集中编号大于 0xC0 的所有字符。

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' 数据类型及其运算 ' - laasya


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide2
标识符
  • 标识符 :为程序中的各个元素进行命名 .
  • 一般地,在Java 中标识符是以字母、下划线(_)、美元符号($)等其它货币符号(如£, ¥)开始的一个字符序列,后面可以跟字母、下划线、美元符号、数字等字符。
  • Java语言使用Unicode字符集
  • 标识符是大小写敏感的,没有最大长度的限制,不能和关键字相同
slide3
标识符
  • 总体来说定义标识符可以使用的字符包括:
    • 大小写字母、数字;
    • Unicode字符集中编号大于0xC0的所有字符。
    • 凡是用Character.isJavaIdentifierStart() 返回true,都可作为首字符,Character. isJavaIdentifierPart()返回true,都可作为标识符的一部分。
  • 合法的标识符:
    • Body,_test,$hello
  • 非法标识符:
    • 5Test,hello*,world#,class
  • 注意:在中文环境下,可以使用汉字作为标识符。例如,int 中文=5;
slide4
关键字
  • 所有的关键字都是小写的。如果被大写,就不是关键字了 。
  • 用于数据类型的关键字
    • byte short int long float double char boolean
  • 用于流程控制语句的关键字
    • if else switch case default do while for break continue
  • 方法、类型、变量的修饰关键字
    • private public protected final static abstract synchronized volatile
  • 异常处理关键字
    • try catch finally throw throws
slide5
关键字
  • 对象相关关键字
    • new extends implements class instanceof this super
  • 字面值常量关键字
    • false true null
  • 方法相关关键字
    • return void
  • 包相关关键字
    • package import
slide6
注释
  • 单行注释
    • 单行注释以“//”开头,至该行结尾,其格式如下:
  • 多行注释
    • /* 注释文本
    • ……
    • */
slide7
变量
  • [修饰符] <类型名> <变量名> [=<初值>][,<变量名>[=<初值>]….];
    • int i;
    • int j=5,k=4;
  • 作用域分,变量大致可分为:局部变量、类成员变量、方法参数、异常处理参数。
slide8
变量作用域
  • 局部变量是在方法内部或代码块中声明的变量,它的作用域为它所在的代码块,在程序设计中,以“{ …… }”为界。
  • 类成员变量,它的作用域是整个类。又可以细分为静态变量和实例变量
  • 方法参数的作用域,是它所在的方法
  • 异常处理参数的作用域,是它所在的异常处理部分
  • 变量隐藏 (按作用域的大小)
slide9
常量
  • 整形常量234,实型常量23.4,字符常量’a’,布尔常量true和false,以及字符串常量“hello world!”
  • final关键字(后面还会碰到)
  • final int MAX=100;
  • final int MAX_LOOP=5;
slide10

整数类型(byte,short,int,long)

数值类型

浮点类型(float,double)

基本类型

字符类型(char)

布尔类型(boolean)

数据类型

类(class)

引用类型

接口(interface)

数组

Java语言的数据类型

数据类型分类
slide11
数据类型决定了参与操作的变量、常量和表达式的取值类别、取值范围以及能够实施的操作行为。Java语言属于强类型语言,即对于程序中出现的所有变量和表达式,在编译的时候就要求有明确的数据类型,这样才可以由编译程序在编译期间对所有的操作进行数据类型相容性的检查。数据类型决定了参与操作的变量、常量和表达式的取值类别、取值范围以及能够实施的操作行为。Java语言属于强类型语言,即对于程序中出现的所有变量和表达式,在编译的时候就要求有明确的数据类型,这样才可以由编译程序在编译期间对所有的操作进行数据类型相容性的检查。
slide12
数据类型
  • Java的基本数据类型都有固定的数据位,不随运行平台的变化而变化。
  • 引用类型都是用类或对象实现的。
  • 布尔类型
    • boolean b=false;
boolean
boolean
  • 只有true和false两个取值,分别代表“真”和“假”。
  • 特点:不能够与任何其他类型进行相互的类型转换操作。
  • boolean x;
  • boolean x=true;
slide14
字符类型
  • 一个字符用一个16位的Unicode码表示
  • char c,c1=‘a’;
  • 中’的Unicode码是\u4e2d
  • 整数和字符型数据在一起运算时字符向整数转换
slide15
char
  • Java语言规定,字符采用Unicode编码,每个字符占用两个字节。
  • ASCII字符集是Unicode字符集的一个子集,并且在这两个字符集中,前128个编码所对应的字符完全相同,只是每个字符占用的二进制位数不同。
  • Unicode表中的字符就是一个字符常量,字符常量用单引号括起。有些字符(如回车)不能通过键盘输入到程序中,这时需要用转意字符常量,如’\n’。
  • 要得到字符在Unicode字符集中的顺序位置,必须用int类型转换。要得到一个0~65535之间的数所代表的Unicode表中对应的字符必须使用char类型转换。
slide16
public class Example2_1

{ public static void main (String args[ ])

{ char chinaWord=\'你\',japanWord=\'ぁ\';

int p1=36328,p2=38358;

System.out.println("汉字\\'你\\'在unicode表中的顺序位置:"+(int)chinaWord);

System.out.println("日语\\'ぁ\\'在unicode表中的顺序位置:"+(int)japanWord);

System.out.println("unicode表中第36328位置上的字符是:"+(char)p1);

System.out.println("unicode表中第38358位置上的字符是:"+(char)p2);

}

}

slide17
整数类型
  • Java中的整数有三种进制形式表示:
    • 十进制:用0~9的数值表示,首位不能为0,例如:124,-100;
    • 八进制:以0开头,后跟多个0~7之间的数字,如0134;
    • 十六进制:以0x或者0X开头,后跟多个0~9之间的数字、或A~F之间的的大写字、或者a~f之间的小写字母。a~f或者A-F分别表示10~15,例如,0x23FE,等于十进制数9214。
slide18
整数类型

在表示long型常量时,需要在数字后面加上后缀L或者l。例如3L表示一个long型的常量,而不是int型常量。

slide19
浮点类型

一个浮点数隐含为double型。在一个浮点数后加字母F或f,表示float型。常量值3.45的类型是double;3.45F的类型是float。

slide20
基本数据类型的转换
  • 当把一种基本数据类型变量的值赋给另一种基本类型变量时,会涉及类型转换问题。
  • 转换的原则(低)byte-〉short-〉int-〉long-〉float-〉double(高),当把级别低的变量赋值给级别高的变量时,自动完成转换。当把级别高的变量赋值给低的变量时,必须使用显示类型转换方式:(类型名)要转换的变量。
  • 当把一个整数赋值给byte、short、int、long型变量时,不可超出这些变量的取值范围。否则必须使用强制类型转换。
  • 上面的转换不包括逻辑类型和字符类型。
slide21
public class Example

{ public static void main (String args[ ])

{ int c=2200;

long d=8000;

float f;

double g=123456789.123456789;

c=(int)d;

f=(float)g; //导致精度的损失.

System.out.print("c= "+c);

System.out.println(" d= "+d);

System.out.println("f= "+f);

System.out.println("g= "+g);

}

}

slide22
各类型数据间的相互转换
  • 自动类型转换
    • 从低级到高级发生自动类型转换。从表达范围小的类型向表达范围大的类型发生自动类型转换。不同数据类型的转换如下所示:
    • 低----------------------------------------------- --->高
    • byte,short,char---> int--> long--> float--> double
  • 注意:byte,short和char在一起运算时,首先转换为int类型进行运算。
  • 【例】分析下面程序中的错误。
    • byte b1=5;
    • short s1=6;
    • short s2 ;
    • s2=b1+s1;
slide23
类型转换
  • 强制类型转换
    • 由高级向低级数据类型转换时,需要强制类型转换。例如:
    • int i=65;
    • char c;
    • c=(char)i; // 把int型变量转换成char型,需要强制类型转换。
slide25
算数运算符的特点
  • 对于二元运算符,运算结果的数据类型一般为两个操作数中表达范围较大的类型。例如,一个整数和浮点数运算的结果为浮点数。
  • 对于一元运算符,运算结果的类型与操作数的类型相同。
  • 自增、自减运算符有前缀和后缀两种形式,当是前缀形式(即++、--符号出现在变量的左侧)时,对变量实施的运算是“先运算后使用”; 当是后缀形式(即++、--符号出现在变量的右侧)时,对变量实施的运算是“先使用后运算”。
slide26
算数运算符的注意事项
  • 在Java中,"%"(求模运算符)的操作数可为浮点数,如52.3%10=2.3;
  • Java对"+"运算进行了扩展,可作字符串连接运算符,如"ab"+"efd"得"abefd";
  • 做"+"运算时,如果一个操作数是字符串,其它操作数自动转换成字符串.如: String s; s="s:"+4*5; //结果是s="s:20";
  • byte,short,char等类型进行混合运算时,会先自动转换为int类型再运算。
slide28
条件运算符
  • (boolean_expr)? true_statement:false_statement;
  • result=sum==0?100:2*num;
slide29
位运算符
  • Java 用补码表示二进制数
  • 1表示为二进制为
    • 00000000 00000000 00000000 00000001(4个字节)
  • -1表示为二进制为
    • 11111111 11111111 11111111 11111111 (4个字节)
slide31
注意事项
  • 除 ~ 为右结合外,其余为左结合。
  • 操作数的类型一般为整型或字符型。&,|,^三个运算符可以用于boolean。
  • ">>"右移是用符号位来填充右移后留下的空位,">>>"是用零来填充空位.
  • 若两个数据的长度不同,如a&b,a为byte型,b为int型,系统首先会将a的左侧24位填满,若a为正,则填满0,若a为负,填满1即进行“符号扩充”。
slide33
class Example

{ public static void main(String args[])

{ char a1=\'十\',a2=\'点\',a3=\'进\',a4=\'攻\';

char secret=\'8\';

a1=(char)(a1^secret);

a2=(char)(a2^secret);

a3=(char)(a3^secret);

a4=(char)(a4^secret);

System.out.println("密文:"+a1+a2+a3+a4);

a1=(char)(a1^secret);

a2=(char)(a2^secret);

a3=(char)(a3^secret);

a4=(char)(a4^secret);

System.out.println("原文:"+a1+a2+a3+a4);

}

}

slide34
举例
  • 5<<32 的结果
  • -1>>>1的 结果
slide35
逻辑运算符
  • 逻辑运算只能处理布尔类型的数据,所得结果也是布尔值
  • 逻辑运算符支持短路运算
slide36
class Example

{ public static void main(String args[])

{ int x,y=10;

if(((x=0)==0)||((y=20)==20))

{ System.out.println("现在y的值是:"+y);

}

int a,b=10;

if(((a=0)==0)|((b=20)==20))

{ System.out.println("现在b的值是:"+b);

}

}

}

slide37
表达式
  • 表达式是程序设计语言的基本组成部分,表示一种求值的规则,是由运算符和操作数组成的符号序列。
  • 表达式的运算结果的类型,就是表达式的类型
  • 在对表达式进行运算时,遵循一定的规则,要按运算符的优先级从高到低进行,同级的运算符则按从左到右的方向进行。
slide39
几个特点
  • 赋值运算符的优先级最低,因为赋值运算符要使用表达式的值;
  • 关系运算符的优先级比布尔逻辑运算符的优先级高;
  • .,[],()等运算符的优先级最高;
  • 一元运算符的优先级也比较高;
  • 算术元算符要比关系运算符和二元逻辑运算符的优先级要高。
slide40
数组的概念
  • 数组由同一类型的一连串对象或者基本数据组成,并封装在同一个标识符(数组名称)下。
  • 数组是对象
    • 动态初始化
    • 可以赋值给Object类型的变量
    • 在数组中可以调用类Object 的所有方法
slide41
数组的概念(续)
  • 数组元素
    • 数组中的变量被称作数组的元素
    • 元素没有名字,通过数组名字和非负整数下标值引用数组元素。
    • 每个数组都有一个由 public final 修饰的成员变量:length ,即数组含有元素的个数(length可以是正数或零)
slide42
数组的创建和引用
  • 数组的声明
  • 数组的创建
  • 数组元素的初始化
  • 数组的引用
  • 多维数组
slide43
数组的声明
  • 声明(Declaration)
    • 声明数组时无需指明数组元素的个数,也不为数组元素分配内存空间
    • 不能直接使用,必须经过初始化分配内存后才能使用
slide44
数组的声明(续)

Type[ ] arrayName;

例如:

int[] intArray;

String[] stringArray;

Type arrayName[ ];

例如:

int intArray[];

String stringArray[];

slide45
数组的创建
  • 用关键字new构成数组的创建表达式,可以指定数组的类型和数组元素的个数。元素个数可以是常量也可以是变量
  • 基本类型数组的每个元素都是一个基本类型的变量;引用类型数组的每个元素都是对象的的引用
slide46
数组的创建(续)

arryName=new Type[componets number];

  • 例如:

int[] ai; ai=new int[10];

String[] s; s=new String[3];

  • 或者可以将数组的声明和创建一并执行

int ai[]=new int[10];

  • 可以在一条声明语句中创建多个数组

String[] s1=new String[3], s2=new String[8];

slide47
数组元素的初始化
  • 声明数组名时,给出了数组的初始值,程序便会利用数组初始值创建数组并对它的各个元素进行初始化

int a[]={22, 33, 44, 55};

  • 创建数组的时,如果没有指定初始值,数组便被赋予默认值初始值。
    • 基本类型数值数据,默认的初始值为0;
    • boolean类型数据,默认值为false;
    • 引用类型元素的默认值为null。
  • 程序也可以在数组被构造之后改变数组元素值
slide48
数组的引用
  • 通过下面的表达式引用数组的一个元素:

arrayName[index]

  • 数组下标必须是 int , short, byte, 或者char.
  • 下标从零开始计数.
  • 元素的个数即为数组的长度,可以通过 arryName.length引用
  • 元素下标最大值为 length – 1,如果超过最大值,将会产生数组越界异常(ArrayIndexOutOfBoundsException)
slide49
数组的引用(续)

int[] data = new int[10];

  • data[ -1 ] 非法的
  • data[ 10 ] 非法的
  • data[ 1.5 ] 非法的
  • data[ 0 ] 合法的
  • data[ 9 ] 合法的
slide50
数组的引用(续)

int values[] = new int[7];

int index;

index = 0;

values[ index ] = 71;

index = 5;

values[ index ] = 23;

index = 3;

values[ 2+2 ] = values[ index-3 ];

slide51
数组的引用(续)

public class MyArray {

public static void main(String[] args){

int myArray[]; //声明数组

myArray=new int[10]; //创建数组

System.out.println("Index\t\tValue");

for(int i=0; i<myArray.length;i++)

System.out.println(i+"\t\t"+myArray[i]);

//证明数组元素默认初始化为0

//myArray[10]=100; //将产生数组越界异常

}

}

slide52
数组的引用(续)
  • 数组名是一个引用:

例子

public class Arrays

{ public static void main(String[] args)

{ int[] a1 = { 1, 2, 3, 4, 5 };

int[] a2;

a2 = a1;

for(int i = 0; i < a2.length; i++) a2[i]++;

for(int i = 0; i < a1.length; i++)

System.out.println( "a1[" + i + "] = " + a1[i]);

}

}

slide53
数组的引用(续)

运行结果:

a1[0] = 2

a1[1] = 3

a1[2] = 4

a1[3] = 5

a1[4] = 6

slide54
数组的引用(续)
  • 字符串引用构成的数组:

String[] strArray;

strArray = new String[8] ;

strArray[0]= "Hello" ;

slide55
数组的引用(续)
  • 例子

public class ArrayOfStringsDemo

{ public static void main(String[] args)

{ String[] anArray =

{ "String One", "String Two", "String Three"};

for (int i = 0; i < anArray.length; i++)

{ System.out.println(anArray[i].toLowerCase());

}

}

}

运行结果:

string one

string two

string three

slide56

source

数组的引用(续)
  • 数组的复制:

public static void arraycopy(Objectsource , intsrcIndex , Objectdest , intdestIndex , intlength )

slide57
数组的引用(续)

例子

public class ArrayCopyDemo

{ public static void main(String[] args)

{ char[] copyFrom = { \'d\', \'e\', \'c\', \'a\', \'f\', \'f\', \'e\',

\'i\', \'n\', \'a\', \'t\', \'e\', \'d\'};

char[] copyTo = new char[7];

System.arraycopy(copyFrom, 2, copyTo, 0, 7);

System.out.println(new String(copyTo));

}

}

slide58
多维数组

int[][] gradeTable;

……

gradeTable[ 0 ][ 1 ]为42

gradeTable[ 3 ][ 4 ]为93

gradeTable[ 6 ][ 2 ]为78

slide59
多维数组(续)
  • 二维数组的声明和构造
    • int[ ][ ] myArray ;
      • myArray 可以存储一个指向2维整数数组的引用。其初始值为null。
    • int[ ][ ] myArray = new int[3][5] ;
      • 建立一个数组对象,把引用存储到myArray。这个数组所有元素的初始值为零。
    • int[ ][ ] myArray = { {8,1,2,2,9}, {1,9,4,0,3}, {0,3,0,0,7} };
      • 建立一个数组并为每一个元素赋值。
slide60
多维数组(续)
  • 二维数组的长度

class UnevenExample2

{ public static void main( String[ ] arg )

{ int[ ][ ] uneven =

{ { 1, 9, 4 },

{ 0, 2},

{ 0, 1, 2, 3, 4 } };

System.out.println("Length is: " + uneven.length );

}

}

运行结果:

Length is: 3

slide61
多维数组(续)
  • 每行的长度:

class UnevenExample3

{

public static void main( String[] arg )

{

// 声明并构造一个2维数组

int[ ][ ] uneven =

{ { 1, 9, 4 },

{ 0, 2},

{ 0, 1, 2, 3, 4 } };

slide62
多维数组(续)

// 数组的长度 (行数)

System.out.println("Length of array is: " + uneven.length );

// 数组每一行的长度(列数)

System.out.println("Length of row[0] is: " + uneven[0].length );

System.out.println("Length of row[1] is: " + uneven[1].length );

System.out.println("Length of row[2] is: " + uneven[2].length );

}

}

运行结果:

Length of array is: 3

Length of row[0] is: 3

Length of row[1] is: 2

Length of row[2] is: 5

slide63
int[ ][ ] myArray;

myArray = new int[3][ ] ;

myArray[0] = new int[3];

int[ ] x = {0, 2};

int[ ] y = {0, 1, 2, 3, 4} ;

myArray[1] = x ;

myArray[2] = y ;

多维数组(续)
slide64
一维数组的定义
  • int a[ ]; 或者
  • int[ ] a;
  • 这里只有数组变量的定义,没有为数组元素分配空间,只为数组的引用分配了空间,a目前为一个空的引用。
  • 在声明数组时,可以为数组赋初值。例如:
    • int a[ ]={0,1,2,3,4};
slide65
使用new为数组分配空间
  • <数组名>= new <类型>[ <长度> ];
  • a=new int[5];
    • 创建了一个包含5个元素的数组a,每个元素被自动初始化为0
  • int a[ ] =new int[5]
  • 每个数组都有一个属性length,指明它的长度
slide67

0

a[0]

0

a[0]

1

a[1]

0

a[1]

a

null

a

0x0345o

a

0x4345o

2

a[2]

0

a[2]

3

a[3]

0

a[3]

4

a[4]

0

a[4]

(a)int a[ ]

(b) int a[ ]={0,1,2,3,4}

(c) int a[ ];

a=new int[5];

一维数组存储结构

一维数组的图形表示
slide68
二维数组
  • 最常用的二维数组是一个特殊的一维数组,它的每个元素都是一个一维数组。又叫做数组的数组
    • int two[][];
    • 或 int[][] two;
  • 这里只有变量的定义,没有分配内存空间。
  • 在定义二维数组时也可以赋初值,将数组元素的值用多层括号括起来,例如:
    • int two[][]={{0,1,2},{3,4,5}};
slide69
使用new为二维数组分配空间
  • int two[ ][ ]=new int[2][3];
    • 或者
  • int two[ ][ ];
  • two=new int[2 ][3 ];
  • 二维数组还有另外一种初始化方式,就是从最高维开始,分别为每一维分配空间。
  • int two[ ][ ];
    • two =new int[2][ ];
    • two[0]=new int[2];
    • two[1]=new int[3];
ad