《java基本数据类型和数组.ppt》由会员分享,可在线阅读,更多相关《java基本数据类型和数组.ppt(36页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第2 2章章 基本数据基本数据类型和数型和数组 1.标识符和关键字2.基本数据类型3.基本数据类型的转换4.数据的输入与输出5数组JAVA程序概览1.包 包是类和接口的集合,或者说包是接口和类的容器。Java中包的作用主要包括3个:1)使得功能相关的类易于查找和使用,同一个包下的类和接口通常是功能相关的。2)避免名字出现重复,不同的包下可以有现同名字的类。3)提供一种访问权限的控制机制。前面提到过访问控制通常是以包为分界的。包的定义格式如下:package pg;其中package是包的关键字。多级包层次结构的格式为:package pg1.pg2.pg3;包的创建就是将源文件总的接口和类纳
2、入指定的包。1.要使用某个包(不是当前类所在的包)中类的时候,用import关键字引入(有点类似C+的#include)2.想想如何避免包名冲突?3.想想如果没有IDE环境,我们怎样定义和生成包3.包有访问权限问题,这将在类权限部分详细介绍2.类类的格式如下:类的修饰符 class extends 父类名 implenents 接口名表 变量修饰符 类型 成员变量1;变量修饰符 类型 成员变量2;方法修饰符 返回类型 方法名1(参数表)方法体1 方法修饰符 返回类型 方法名2(参数表)方法体2 与C+类定义的区别1)形式上不同,C+使用“:”,JAVA使用“extends”2)C+使用多重继承
3、,JAVA使用“implenents”3)C+使用.h文件声明类、成员变量、成员函数,然后使用.cpp文件定义类、成员变量、成员函数的具体实现(给我们造成多大的麻烦),JAVA一个类的声明和实现在一起(至关重要的区别,目前的技术认为,.h和.cpp的划分愚蠢,也许几年以后你不会再见到.h文件了)4)C+使用“public:”这样的形式作为整体变量、方法修饰符;而JAVA必须对每个变量或者方法指定,如果不指定,系统会默认为private3.函数调用System.out.println(请输入若干个数,每输入一个数回车确认);System是类,定义在包java.lang中out是System类的静
4、态成员对象println是out对象的静态函数1.想想看为什么程序中没有import java.lang.*)2.为什么是类,应该是对象啊?如果想调用非静态函数,则需要先创建对象,在调用对象的成员函数。象这样(与C+一样):MyClass obj=new MyClass();obj.not_static_function();(怎样创建对象?这个下面再详细介绍。注意上面为什么不是obj-,因为JAVA没指针)(为什么JAVA没指针?这个以后再详细介绍)4.创建对象Scanner reader=new Scanner(System.in);What is it?跟C+很像,回忆下C+是怎样创建对
5、象的?1.JAVA没有指针,reader是个句柄,分配在堆中2.为什么没有指针,因为专家说不安全(去google查询下“缓冲区溢出”,你就知道指针有多糟糕了)3.new的对象没有delete,因为对象被分配在“可自动回收的堆中”4.怎样做到自动回收,JAVA虚拟机提供了“垃圾自动回收算法”(有兴趣的话去google上搜索下这几个字)5.为什么要“自动回收”,到google上查询下”内存泄露”或者干两年程序员你就明白4.因为没有指针(这是为什么JAVA=C+-的原因之一),所以调用对象的成员函数不是:obj-func();而是obj.func();5 基本数据基本数据类型初始化型初始化doubl
6、e sum=0;int m;这个和C+差不多,不用管它了表面查不多而已。1.C+的基本数据类型的长度和内存编码是随CPU和操作系统不同而不同的,而JAVA永远一致(所以JAVA可以跨平台,C+不能:write once,run anywhere)。2.C+定义变量而不初始化,其值是随机的,而JAVA会为它自动初使化,如果一个变量在使用前没有赋值,C+编译器会给予一个警告,而JAVA认为是个语义错误(又一个C+-)3.C+认为象int,double,char这些数据类型是一个程序设计语言所必须的,没有它们不行。而JAVA本身是一个纯面向对象语言(象Smalltalk),这些基本数据类型都不是必须
7、的,因为在JAVA中一切都是对象(事实上JAVA已经为每一个基本数据类型提供了一个“封装类”,只是为了老程序员的习惯考虑,才保留了这些基本类型)4.JAVA中的char与C+中的char完全不同,前者是unicode字符,占两个字节16位,后者是ascii字符,占1个字节8位。(又一个C+-)5.JAVA中Boolean类型与C+不同,前者不能与数字类型进行强制转换,后者可以2.1 2.1 标识符和关符和关键字字 1 1标识符符 1)Java语言规定标识符由字母、下划线、美元符号美元符号和数字组成,并且第一个字符不能是数字。2)标识符中的字母是区分大小写的,Beijing 和beijing是不
8、同的标识符。3)标识符用来类、变量、函数、数组等变量的名字。2 2 关关键字字 关键字就是Java语言中已经被赋予特定意义的一些单词,它们在程序上有着不同的用途,不可以把关键词作为名字来用。返回Choose the three valid identifiers from those listed below.A.IDoLikeTheLongNameClass B.$byte C.const D._ok E.3_case Java type systemprimitivereferencenullcharnumericbooleanclassinterfacearrayintegralfloa
9、ting-pointbyteshortintlongfloatdouble基本数据类型基本数据类型复合数据类型复合数据类型2.2 2.2 基本数据类型基本数据类型类类型2.2 2.2 基本数据基本数据类型型 基本数据类型也称作简单数据类型。Java语言有8种简单数据类型,分别是:boolean、byte、short、int、long、float、double、char。这8种数据类型习惯上可分为4大类型:u逻辑类型:booleanu字符类型:charu整数类型:byte、short、int、longu浮点类型:float、doubleIntegerCharacterByteShortLongF
10、loatDouble对应封装类对应封装类BigInteger BigDecimal2.2 2.2 基本数据基本数据类型型1逻辑类型(boolean)常量:true,false。练习:boolean a=true;boolean a=(1=1);但是不能:但是不能:boolean a=1;boolean a=1;boolean b1;boolean b2=true;b1=!b2;boolean b=(b1&b2)!=false;boolean c=(b1&b2)!=false;int a;boolean d=(a=0);boolean d=(a=0);int a=0;if(a=1)2.2 2.2
11、 基本数据基本数据类型型 2字符类型 注意:每个字符占两个字占两个字节,不再使用ASCII编码,而是使用Unicode 例如字母A的编码是0 x0041,而不是0 x41,而汉字真的编码是0 x771F Java也使用转意字符,如:n:换行 b:退格 t:水平制表 :单引号(这部分与C一样)u0030:Unicode编码 (C语言没有)变量的定义:char x=A,漂亮=A;char t=char t=真真;char k=漂亮;char k=“飘”;nchar c=0;nchar c=48;nchar c=0+9;nbyte k=9;char ch=0+k;/(这个跟C语言一样)/C语言不允许
12、/(JAVA,C都不允许)/(JAVA,C都不允许)/赋初值为字符0,实际存储的是0 x0030/用整数赋初值为0/赋值9,即0 x0039/错误,H+k是int型,需强制类型转换2.2 2.2 基本数据基本数据类型型下面的例子(Example3)中,分别用显示转换来显示一些字符在Unicode表中的位置,以及某些位置上的字符。3整数类型(byte short int long)常量:6000(十进制),077(八进制),0 x3ABC(十六进制)。12l,-343L,0 xfffffffffL 注意:若没有指定L,常量缺省是int类型的 练习:int a;int a=3;byte b=8;s
13、hort s=10;long y=123L;long z=123l;finalfinal int a=3;(在C语言中是const int a=3;)static int a=3;final static final static int a=3;(在C语言中是const int a=3;)注意:C语言中的unsigned int a=3;在JAVA中没有n练习练习nbyte b1;nbyte b2=127;nshort s1=(b1+b2);nshort s1=(short)(b1+b2);nshort s2=(short)(b1+123)nint s=b1+b2;nlong l1=2343
14、;nlong l2=4294967296;nlong l2=4294967296L;nlong l3=65536*63356;nlong l4=65536L*63356;nboolean b=(1L 32=1 高高byte,short,char int long float double操作数操作数1类型类型操作数操作数2类型类型转换后的类型转换后的类型byte、short、charintintbyte、short、char、intlonglongbyte、short、char、int、longfloatfloatbyte、short、char、int、long、floatdoubledoub
15、len注意:与注意:与C语言不同,自动类型转换不允许从高级到低级进行语言不同,自动类型转换不允许从高级到低级进行n 数据类型转换必须满足如下规则:n不能对boolean类型进行类型转换。n不能把对象类型转换成不相关类的对象。n 在把容量大的类型转换为容量小的类型时必须使用强制(显式)类型转换强制(显式)类型转换。n 转换过程中可能导致溢出或损失精度n int i=8;byte b=(byte)i;n(byte)255=-1(byte)0 x5634=0 x34n 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入n(int)23.7=23(int)-45.89f=-452.2 2.2 基本数
16、据基本数据类型型 4浮点类型(float,double)常量:453.5439f,21379.987F,2e40f 21.39d,21.987,123.0,6e-140(6乘10的-140次方)n练习 float在机器中占32位,double占64位,常量缺省是常量缺省是double型的型的 double d1=127.0;赋初值为127ndouble d2=127;赋初值为127nfloat f1=127.0f;必须在数字后加f或Fnfloat f2=4.0e38f;错误!32位浮点数不能超过 3.4028234663852886e38nfloat f3=(float)d1;必须强制类型转换
17、n在Java中,引用(reference)指向一个对象在内存中的位置,本质上它是一种带有很强的完整性和安全性限制的指针。n当你声明某个类、接口或数组类型的变量时,那个变量的值总是某个对象的引用或者是null。n指针就是简单的地址而已,引用除了表示地址而外,还象被引用的数据对指针就是简单的地址而已,引用除了表示地址而外,还象被引用的数据对象的缩影,还提供其他信息。象的缩影,还提供其他信息。n指针可以有指针可以有+、-运算,引用不可以运算。运算,引用不可以运算。n引用型变量只支持有限的逻辑判断:n相等判断(是否同一个对象的引用):=!=ntheObject=nullnotherObject!=th
18、eObjectn类型判断(是否是每个类的实例):instanceofntheObject instanceof Objectn“”instanceof StringJava数据类型数据类型复合(引用)数据类型复合(引用)数据类型2.4 2.4 数据的数据的输入与入与输出出 由于C语言出现的比较早,那个时候还没有图形用户界面的概念(Graphics User Interface),因此,C语言提供了许多用来输入、输出数据的函数,例如printf、scanf等。Java不象C,提供在命令行进行数据输入、输出的功能不多。关于输入、输出我们将在第九章详细介绍,现在只需知道它的作用是在命令行窗口(例如,
19、MS-DOS窗口)输出数据即可。Sun公司新推出的SDK1.5又新增了一些在命令行进行数据输入、输出的功能。2.4 2.4 数据的数据的输入与入与输出出1数据输出:的功能完全类似C语言中的printf函数。pringf的一般格式:printf(格式控制部分,表达式1,表达式2,表达式n);这里的用法与C语言相同,这里不再累述。下面我们看一个例子,来进一步了解 System.out.printf 数据输出:2.4 2.4 数据的数据的输入与入与输出出 2数据的输入:Scanner Scanner是SDK1.5新增的一个类,可以使用该类创建一个对象:Scanner reader=new Scann
20、er(System.in);然后reader对象调用下列方法(函数),读取用户在命令行输入的各种数据类型,nextByte(),nextDouble(),nextFloat(),nextInt(),nextLine(),nextLong(),nextShort()。2.4 2.4 数据的数据的输入与入与输出出 上述方法执行时都会堵塞,等待你在命令行输入数据回车确认。下面让我们来看一个例子,来更好的了解Scanner语句,在这个例子中,用户在键盘依次输入若干个数字,每输入一个数字都需要按回车键确认,最后在键盘输入一个非数字字符结束整个的输入操作过程。程序将计算出这些数的和及平均值。返回JAVA的
21、输入输出采用了设计模式,与C+在设计上有较大区别,我们后半段节绍2.5 2.5 数数组 数组是相同类型的数据按顺序组成的一种复合数据类型。通过数组名加数组下标来使用数组中的数据。下标从0开始。1声明数组 声明数组包括数组的名字、数组包含的元素的数据类型。声明一维数组有下列两种格式:数组元素类型 数组名字;数组元素类型 数组名字;首先记住!,数组是对象!(在JAVA中一切都是对象)2.5 2.5 数数组 声明二维数组有下列两种格式:数组元素类型 数组名字;数组元素类型 数组名字;2创建数组 声明数组仅仅是给出了数组名和元素的数据类型,要想使用数组还必须为它分配内存空间,即创建数组。在为数组分配内
22、存空间时必须指明数组的长度。格式如下:数组名字=new 数组元素的类型数组元素的个数;例如:float boy=new float4;2.5 2.5 数数组3数组元素的使用 一维数组通过下标符访问自己的元素,如boy0,boy1等。需要注意的是下标从0开始,因此,数组若是7个元素,下标到6为止,如果你将来使用下标超过6将会发生异常。二维数组也通过下标符访问自己的元素,如a01,a12等。下标也是从0开始。float k=1.1f,1.2f;float n=new float3;float k;float k3;float k=1.1f,1.2f;float k=1.1,1.2;double m
23、=1.1,1.3;double n=new double31.1,1.2,1.3;Example4 exp=new Example44;Example4 exp1=new Example4(),new Example4(),new Example4();System.out.println(exp10 is +exp10.toString();System.out.println(exp0 is +exp0.toString();intPublic int cPlusPlusCannotdoLikeThis(String arr);C+JAVAYES YESNO YESNO YESYES NO
24、NO NOYES(WARN)NOYES YESNO NOYES YESYES YESYES YESYES NO2.5 2.5 数数组 4数组的初始化 创建数组后,系统会给每个数组元素一个默认的值,如,float型是0.0。我们在声明数组时同时也还可以给数组的元素一个初始值,如:float boy=21.3f,23.89f,2.0f,23f,778.98f;返回二维数组的定义方式 type arrayName ;例如:int intArray ;也可以采用另一种定义方式:type arrayName;与一维数组一样,这时对数组元素也没有分配内存空间,同样要使用运算符new来分配内存,然后才可以访
25、问每个元素。二维数组:定义二维数组:定义二维数组的初始化也分为静态和动态两种。静态初始化:静态初始化:在定义数组的同时为数组分配空间。int intArray =1,2,2,3,3,4;不必指出数组每一维的大小,系统会根据初始化时给出的初始值的个数自动算出数组每一维的大小。1、数组、数组二维数组:初始化二维数组:初始化动态初始化:动态初始化:对高维数组来说,分配内存空间有下面两种方法:1.直接为每一维分配空间,如:type arrayName =new typearraylength1arraylength2例如:int a =new int23;1、数组、数组二维数组:初始化二维数组:初始化
26、2.从最高维开始(而且必须从最高维开始),分别为每一维分配空间,如:String s =new String2;s0=new String2;s1=new String3;s00=new String(“Good”);s01=new String(“Luck”);s10=new String(“to”);s11=new String(“you”);s12=new String(“!”);1、数组、数组二维数组:初始化二维数组:初始化作业1.编写一个控制台程序,完成1)首先提示用户选择输入数据类型 c表示字符,s表示字符串,i表示整数,r表示浮点数2)用户输入选择后,提示用户输入待排序数据,每次输入以回车结束,并提示用户再次输入3)最后一次用户直接回车表示用户输入结束4)对用户输入的数据从大到小排序,并友好的显示排序结果利用二维数组实现矩阵乘法