收藏 分销(赏)

java类的数据成员第3章.ppt

上传人:s4****5z 文档编号:13965291 上传时间:2026-05-18 格式:PPT 页数:194 大小:2.90MB 下载积分:10 金币
下载 相关 举报
java类的数据成员第3章.ppt_第1页
第1页 / 共194页
java类的数据成员第3章.ppt_第2页
第2页 / 共194页


点击查看更多>>
资源描述
第,3,章类的数据成员,第,3,章类的数据成员,3.1,类的数据成员概述,3.2,简单数据类型的使用方法,3.3,简单数据类型的包装类,3.4,字符串数据类型的使用方法,3.5,数组数据类型的使用方法,3.6 J2SDK,帮助文档的使用,3.7 Java,标识符命名规范,第,3,章 类的数据成员,学习目标,掌握标识符与关键字的概念;,掌握简单数据类型,byte,、,short,、,int,、,long,、,float,、,double,、,char,和,boolean,等的使用方法;,掌握简单数据类型对应的包装类的使用方法;,掌握,String,类型及其常用的操作方法;,掌握数组的声明与实例化,理解数组的一些高级操作;,学会,J2SDK,帮助文档的使用方法;,理解软件开发中,Java,语言各种标识符的命名规则。,类是一种由用户定义的新型数据类型,与整型或实型数据相比,类是一种复杂的数据类型,所以也称为构造类型。,一个类由表示对象状态的属性和对属性数据进行操作的方法组成,即类是数据成员与方法成员的封装体。本章介绍类的数据成员。,3.1,类的数据成员概述,数据成员是一个类的核心内容。设计类的主要内容是设计数据成员,,同类的对象之所以互不相同,是由于它们有不同的属性值,(,即数据,),。,3.1.1,数据成员的定义格式,类的数据成员也叫属性成员,或叫字段,(field),。在设计类时,定义数据成员的简单格式为,数据成员类型 数据成员名;,例如,int,sum;,int,math,english,;/,注意在程序设计实践中,一般在一行只定义一个属性,数据成员还可在定义时进行赋值初始化,例如:,int,sum=0;,注意:如果一个数据成员在定义时进行了赋值初始化,在执行构造函数时对该数据成员也进行了初始化,则,该数据成员的值为执行构造函数时所赋的值。,3.1.2,数据成员的修饰符,数据成员的类型前面还可以加修饰符,,数据成员的修饰符可分为存取性修饰符和存在性修饰符两类。,1),存取性修饰符:有,publicprivateprotectedpackage,2),存在性修饰符:有,staticfinal,final,有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。,final,成员变量表示常量,只能被赋值一次,赋值后值不再改变。,final,不能用于修饰构造方法。,注意:,被,final,修饰的数据成员在定义时,一定要同时赋初值,不能在程序的其他地方进行修改。否则会出现编译错误。如已有这样的声明“,final float PI,;”,然后在程序的其他地方有赋值语句,PI=3.12,,这是不允许的。,final float PI=3.14f;,(但可以初始化对象的时候再赋初值),public class Test3,final float PI;/PI,空白,/PI=3.14f;,Test3()PI=3.14f;,public static void,main(String,args,),Test3 t=new Test3();,System.out.println(t.PI,);,final,修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。,一旦给,final,变量赋初值,值就不能再改变。,final,变量定义的时候,可以先声明,而不给初值,这种变量也称为,final,空白,但是无论什么情况,编译器都确保空白,final,在使用之前必须被初始化。但是,,final,空白在,final,关键字,final,的使用上提供了更大的灵活性,为此,一个类中的,final,数据成员就可以实现依对象而有所不同,却有保持其恒定不变的特征。,class Test,private final String S=final,实例变量,S;,private final,int,A=100;,public final,int,B=90;,public,static final,int,C=80;/,可理解为“全局常量”,一旦给值就不可修改,并且通过类名可以访问。,private,static final,int,D=70;,public final,int,E;/final,空白,必须在初始化对象的时候赋初值,public,Test(int,x),E=x;,public static void,main(String,args,),Test t=new Test(2);,/,t.B,=91;/,出错,final,变量的值一旦给定就无法改变,/,t.C,=81;/,出错,final,变量的值一旦给定就无法改变,System.out.println(t.S,);,System.out.println(t.A,);,System.out.println(t.B,);,System.out.println(Test3.C);,System.out.println(Test3.D);,/System.out.println(Test3.E);/,出错,因为,E,为,final,空白,依据不同对象值有所不同,.,且,E,不是静态的,不能用类名直接访问。,System.out.println(t.E,);,Test t1=new Test(3);,System.out.println(t1.E);/final,空白变量,E,依据对象的不同而不同,t1.test1();,public void test1(),final,int,a;/final,空白,在需要的时候才赋值,final,int,b=4;/,局部常量,-final,用于局部变量的情形,a=3;,System.out.println(a,);,System.out.println(b,);,3.2,简单数据类型的使用方法,数据是一个类的核心,类中定义的数据要有确定的数据类型。数据类型可以是简单类型,(,如整型、实型等,),,也可以是复杂类型,(,如类类型、字符串、数组等,),。本节介绍简单数据类型。,3.2.1,简单数据类型,简单数据类型在,Java,语言中也叫原始数据类型或基本数据类型。,Java,语言中定义了四类,(,八种,),基本数据类型:,整型:,byte,、,short,、,int,和,long,浮点型:,double,和,float,字符型:,char,逻辑型:,boolean,每一种数据类型有该类型的常量与该类型的变量。每种数据类型只能进行一些确定的运算,如逻辑型只进行逻辑运算。,注意:所有,Java,编程语言中的整数类型都是带符号的数。,1.,整型,整型数据类型分为四种:,byte,、,short,、,int,和,long,。这些不同整型数据类型的意义在于它们所占用的内存空间大小不同,这也表明它们所能表示的数值范围不同。每种整型数据类型的取值范围如表,3-1,所示。,表,3-1,整数类型数据,整数类型的数据可以使用十进制、八进制或十六进制表示,具体表示方法如下:,十进制:用非,0,开头的数值表示,如,100,和,-50,等;,八进制:用,0,开头的数值表示,如,017,等;,十六进制:用,0 x,或,0X,开头的数值表示,数字,10,15,分别用字母“,A,、,B,、,C,、,D,、,E,和,F,表示”,(,也可以使用小写字母,a f),,如,0 x41,、,0Xabc,等。,问题:,017 =(),10,0123=,(,),10,0 x41=(),10,0Xff =(),10,注意,1,:,Java,缺省的整数常量类型为,int,类型。如果要表示,long,类型整数常量,则需要给整数加后缀,L,或,l,,表示为长整数。例如,123456L,,如果直接写为,123456,,则系统会认为是,int,类型数据。,注意,2,:,与其他语言,(,如,C,语言,),不同,,Java,语言每种整数类型的长度,(,即占用的字节数,),在任何系统中都是一样的。这也是为了保证,Java,语言的跨平台性。,2.,实型,实数数据类型是带小数部分的数据类型,也叫浮点型。,Java,语言中包括两种浮点型数据:,float,:单精度实数,长度为,4,字节,(,即,32,位,),;,double,:双精度实数,长度为,8,字节,(,即,64,位,),。,实型数据还可以用科学计数法表示,如,123e3,或,123E3,,,其中,e,或,E,之前必须有数字,且,e,或,E,后面的指数必须为整数。,如,12.3e3,123E2,1.23e4,e-5,1.2E-3.5,注意,1,:,Java,缺省的浮点型常数为,double,型。如果要表示,float,型常量,则要给数据加后缀,F,或,f,。例如,12.34f,,若直接写为,12.34,,则系统认为是双精度实数。在程序中,如,果写,float f=3.14;,将产生编译错误。,注意,2,:,如果要表示,double,型,则要给数据加后缀,D,或,d(,由于系统默认的浮点型常数为,double,型,因此也可以不加后缀,D,或,d),,如,-0.23453D,,,1.4E+30d,。,3.,逻辑型,逻辑值有两种状态,即人们常说的“开”和“关”、“成立”和“不成立”、“是”和“否”等。在,Java,语言中,这样的值用,boolean,(,布尔,),类型来表示。其有两个值,即,true,和,false,,分别表示“真”和“假”。,布尔型变量在程序中的使用方法举例说明如下:,boolean,aBooleanVar,;/,说明,aBooleanVar,为,boolean,型变量,boolean,isStudent,=false;/,说明变量,isStudent,是,boolean,型,并赋以初值,false,注意:,Java,语言中不可将布尔类型看成整型值,(,这与,C,和,C+,语言不同,),。,4.,字符型,字符型是用单引号括起来的一个字符,程序中使用,char,类型表示。占两个字节。正因为如此,字符型的数据在书写时,可用以,u,开头的,4,位十六进制数表示,范围从,u0000,到,uFFFF,。,具体一个字符型的量,在程序中可以用下面几种方式表示:,(1),用,Unicode,码表示。如字符型变量,letter,的值为,A,,则可以写为,char letter=u0041;,(2),用,ASCII,码表示。对于字符型的量,由于大多数计算机系统使用,ASCII,码表示,而,Unicode,码中包含了,ASCII,码,因此在,Java,程序中,为了简便,大多数程序员仍使用,ASCII,字符的书写习惯,如字符型变量,letter,的值为,A,,则可以写为,char letter=A;,它与上面用,Unicode,码书写的语句是等价的。,(3),用整数表示字符。因为字符型的量在计算机内本质上保存的是一个两个字节的整数,所以字符型变量的取值也可以使用整型常数,(,注意不能使用整型的变量,),,如字符型变量,letter,的值为,A,,则可以写为,char,ch,=65;,但要注意,下面的程序片段是错误的:,int,a=65;,char,ch,=a;,如要正确编译,只有使用强制类型转换:,int,a=65;,char,ch,=(,char)a,;,注意:在将一个整数赋给一个字符变量时,整数的取值范围要在,065535,之间,(,即两个字节可以表示的无符号数据范围,),。如果超出这个范围,将产生编译错误。,(4),用转义字符。,Java,语言也允许用转义字符表示一些特殊的字符。之所以叫转义字符,是因为以反斜杠,(),开头,将其后的字符转变为另外的含义。如用字符变量,Tab,表示制表符,则可以写为,char tab=t;/,而不是字符,t,表,3-2,是几个常用的转义字符。,表,3-2,常用的转义字符,5.,数据类型转换,在同一表达式中,有不同的数据类型要参与运算时,要进行数据类型转换。,(1),自动类型转换。整型、实型、字符型数据可以混合运算,例如,:,float a=65+a+23.23f;,运算过程中,不同类型的数据会自动转换为同一种数据类型,(,如上面语句中的数都将转换为,float,类型,),,然后进行运算。自动转换的数据类型要兼容,并且转换后的数据类型比转换前的数据类型表示的数值范围大。,自动转换按低级类型数据,(,指数据范围小、精度低,),转换成高级类型数据,(,指数据范围大、精度高,),的规则进行。转换规则如表,3-3,所示。,表,3-3,转换规则,注意,1,:,boolean,类型量不能与其他类型量之间相互转换。,注意,2,:,byte,和,short,类型的数据计算结果为,int,型。,(2),强制类型转换。在两种情况下,需要使用强制类型转换:,高级别数据类型要转换成低级别数据类型。,为了提高运算结果的精度。如有程序段:,int,a=15;,int,b=7;,float c=a/b;/,运算结果为,c=2.0,float d=(float)a/b;/,运算结果为,c=2.142857,强制类型转换的一般格式为:,(,类型名,),表达式,如有程序段:,int,i=356;,byte b;,b=(,byte)i,;/,强制转换后丢失一部分数据,使得,b,的值为,100,注意:使用强制类型转换可能会导致数值溢出或数据精度的下降,应尽量避免使用。,3.2.2,数据的运算符,数据的运算符表示对数据要进行的运算方式。运算符按其要求的操作数个数分为:,一元运算符:参加运算的操作数有一个;,二元运算符:参加运算的操作数有两个;,三元运算符:参加运算的操作数有三个。,运算符按其功能分为七类:算术运算符、关系运算符、逻辑运算符、位运算符、条件运算符、赋值运算符以及一些其他的运算符。,1.,算术运算符,算术运算符用于对整型数和实型数进行运算,按其要求的操作数的个数分为一元运算符和二元运算符两类。,(1),一元运算符,(+,、,-),。一元运算符可以位于操作数的前面,如,+x,或,-x,,也可以位于操作数的后面,如,x+,、,x-,等。无论一元运算符位于操作数的前面或后面,操作数完成运算后,都把结果赋给操作数变量。,注意:,+x,或,x+,整体参加表达式运算时,表达式的值是不一样的,这与,C,语言类似。,(2),二元运算符。二元运算符有,+,、,-,、*、,/,和,%,,如两个操作数都是整型,则结果为整型,否则为实型。,注意,1,:,%,运算符表示求整除的余数,它要求两边的操作数均为整型,结果也为整型。,注意,2,:对于,/,运算,如果两个操作数是整数时,则结果也为整数,如,17/5=3,,,5/12=0,。如果操作数中有一个是实数,则运算结果为实数。,2.,关系运算符,Java,语言的关系运算符共有七种:,=,、,!=,、,、,、,=,和,instanceof,。关系运算符用于关系表达式中,一个关系表达式的结果类型为布尔型,即关系式成立为,true,,不成立为,false,。对象运算符,instanceof,用来判断一个对象是否属于某种类类型,如,Hello,instanceof,String,结果为,true,,表示,Hello,是一个字符串类型的量。,注意,1,:除了整型数和实型数可以混合出现在关系运算符两边外,在一个关系运算符两边的数据类型应保持一致。,注意,2,:因为一个实数在内存中只能用近似值来存储,所以应该避免将两个实数进行“,=”,比较。如下面的判断语句:,if(23.12121f=23.121211f),System.out.print(23.12121=23.121211);,读者可上机测试一下是否会输出“,23.12121=23.121211”,。,3.,逻辑运算符,逻辑运算符有六个,它们是:,!(,非,),、,&(,与,),、,|(,或,),、,(,异或,即运算符两边的值相异时为,true,,相同时为,false),、,&(,短路与,),和,|(,短路或,),。,&,又称为无条件与运算符,,|,又称为无条件或运算符。使用,&,和,|,运算符可以保证不管左边的操作数是,true,还是,false,,总要计算右边操作数的值。例如:计算,false&(1223),运算式的结果时,尽管从第,1,个操作数的值,false,就可以得出该表达式的结果为,false,,但系统还是要进行,(1223),的运算。,运算符,&,和,|,可以提高逻辑运算的速度。例如,在计算,(1234)&(ab),时,因为,1234,为,false,,所以可以直接得出表达式的结果为,false,,不再需要计算运算符,&,右边的,ab,。在计算,124)|(3423),时,因为,124,为,true,,所以可以直接得出表达式的结果为,true,,不再需要计算运算符,|,右边的,3423,。因此在逻辑表达式中,应尽量使用,&,和,|,运算符,以提高运算速度。,注意:逻辑运算符要求操作数和结果值都是布尔型量。,4.,赋值运算符,赋值运算符用来把“,=”,右边表达式的值赋给左边的变量,即将右边表达式的值存放在变量名所表示的存储单元中,这样的语句又叫赋值语句。它的语法格式如下:,变量名,=,表达式;,复合赋值运算符有,+=(,加等于,),、,-=(,减等于,),、*,=(,乘等于,),、,/=(,除等于,),、,%=(,余数等于,),等。,注意:赋值号两边的数据类型不同时,如果将数据类型长度较短的量赋给数据类型长度较长的变量,则可以进行自动类型转换,否则要进行强制类型转换。例如:,byte,MyByte,=10;,int,MyInteger,=-1;,MyInterger,=,MyByte,;,MyByte,=(,byte)MyInteger,;,5.,条件运算符,条件运算符是“?:”,它要求有三个操作数,其格式如下:,?:,第一个操作数必须是布尔表达式,其他两个操作数可以是数值型或布尔型表达式。条件运算符的含义是:当,的值为真时,结果为,的值,否则为,的值。例如:,int,a=12;,int,b=34;,int,max=(a b)?a:b;,则程序运行后,,max,变量中存放,a,和,b,中较大的一个数。,6.,位运算符,位运算是对操作数以二进制位为单位进行的运算,位运算的操作数和结果都是整型量。位运算有七个,它们是:,、,&,、,、,(,右移,),、,(,不带符号的右移,),。例如:,int,a=12;,int,b=7;,int,c=a /1100&0111=0100 c=4,int,c=a|b;/1100|0111=1111 c=15,int,c=a b;/1100|0111=1011 c=11,int,c=a 2;/1100 0011 c=3,7.,其他运算符,(),和,运算符:括号运算符,(),的优先级是所有运算符中最高的,它可以改变表达式运算的先后顺序。在有些情况下,它可以表示方法或函数的调用。括号运算符,是数组运算符,(,见,3.5,节,),。,运算符:用于访问对象的成员属性或成员方法。,new,运算符:用于创建一个新的对象。,8.,运算符的优先级,运算符的优先级由高到低的规律是:,.(),单目运算算术运算关系运算逻辑运算,?,:,=,详细情况见表,3-4,。,表,3-4,运算符的优先级别,3.2.3 【,案例,3-1】,解方程,1.,案例描述,设计表示一元一次方程,(ax+b=0),的类,并能根据,a,的系数情况求解方程。,2.,案例效果,案例程序的执行效果如图,3-1,所示。图中从第,2,行开始,输出了,4,个不同方程及其解的情况。,图,3-1,案例,3-1,的显示效果,3.,技术分析,为了求解一元一次方程,ax+b=0,,要定义一个表示一元一次方程的类,其数据是,a,和,b,,可以进行的操作是判断方程是否有解,如果有解,则求方程的解,并输出方程式和解的情况。,根据以上分析,设计的表示一元一次方程的类应该有两个私有数据成员,a,和,b(,对于私有数据,一般应有设置器,setXXX,和读取器,getXXX,),,有判断方程是否有解、求解和输出方程与解的方法成员。因此,该类的设计要点是:,class,方程,私有数据,a;,私有数据,b;,构造方法,a,的设置器,a,的读取器,b,的设置器,b,的读取器,判断方程是否有解的方法,求方程解的方法,输出方程与解的方法,4.,程序解析,下面是根据上面的分析设计的一元一次方程类,Equation,,程序中定义的,TestEquation,类对,Equation,类进行了测试。程序如下:,01/*,02/,案例,:3.1,程序名:,TestEquation.java,03/,功能,:,表示一元一次方程,ax+b=0,类,04/*,05,06/,一元一次方程类,07 class Equation,08/,方程的两个系数定义为私有成员,09 private float a;,10 private float b;,11,12/,无参数的构造方法,13 public Equation(),14,15/,有参数的构造方法,16 public,Equation(float,a,float b),17,this.a,=a;,18,this.b,=b;,19,20,21/,系数,a,的设置器,22 public void,setA(float,a),23,this.a,=a;,24,25,26/,系数,a,的获取器,27 public float,getA,(),28 return a;,29,30,31/,系数,b,的设置器,32 public void,setB(float,b),33,this.b,=b;,34,35,36/,系数,b,的获取器,37 public float,getB,(),38 return b;,39,40,41/,判断方程是否有根的私有方法,42 private,boolean,hasRoot,(),43 return a!=0;,44,45,46/,求方程根的私有方法,47 private float root(),48 return(-b)/a;,49,50,51/,输出方程式和根的公有方法,52 public void,showEquation,(),53,if(hasRoot,(),54,if(b,0),55,System.out.println(n,方程式是:,+a+x+b+“,=0,t,其解为,x=+root();,56 else,if(b,0),57,System.out.println(n,方程式是:,+a+x-+,Math.abs(b,)+=0,t,其解为,x=+root();,58 else,59,System.out.println(“n,方程式是:,”,+a+“x =0,tt,其,解为,x=+0);,60,61 else,62,System.out.println(“n,因为系数,a=0,tt,方程式无,效,!);,63,64,65,66,class,TestEquation,67 public static void,main(String,args,),68/,建立一个方程对象,e1,,其方程式为,1.4x+2.8=0,69 Equation e1=new Equation(1.4f,2.8f);,70/,调用,showEquation,方法,输出,e1,对象表示,的一元一次方程式和根,71 e1.showEquation();,72,73/,建立一个方程对象,e2,,其方程的系数,a,和,b,的初始,值都为,0,74 Equation e2=new Equation();,75/,将系数,b,设置为,4,,即对象,e2,表示的方程式为,0 x-4,=0,,是一个无效的方程,76 e2.setB(-4);,77/,调用,showEquation,方法,输出,e2,对象表示的一元一,次方程式和根,78 e2.showEquation();,79,80/,改变,e2,对象的系数,a,将其设置为,e1,对象的系数,b,,即对,象,e2,表示的方程式变为,2.8x-4=0,81 e2.setA(e1.getB();,82 e2.showEquation();,83,84/,改变,e2,对象的系数,b,将其设置为,0,,即对象,e2,表示的方,程式变为,2.8x=0,85 e2.setB(0);,86 e2.showEquation();,87,88,该程序有着比较详细的注释,读者参考注释,应该很容易读懂程序。程序中使用了实型数据和布尔型数据,有简单的关系运算与算术运算。关于,this,关键词的含义在下面有详细的说明。,在程序的,55,行、,57,行、,59,行和,62,行等多处使用了转义符,n,和,t,,转义符,n,在程序中起到换行的作用,转义符,t,在程序中起到输出制表符的作用,(,类似于按,Tab,键的功能,),。因此,程序在输出一个方程后即换到下一行,并能将方程的解对齐输出,如图,3-1,所示。,第,57,行使用了一个对数据求绝对值的数学函数,Math.abs,。类,Math,中定义的方法都是静态的。,最后要说明的是,在面向对象程序设计中,如果属性和方法是在类的内部使用,则应该说明为,private,的,以防止外部访问,避免因对程序的非法操作而使程序出错。如,42,行判断方程是否有根的方法,private,boolean,hasRoot,(),和,47,行求方程根的方法,private float root(),,都因只在类,Equation,的内部使用,所以定义为私有方法。而类的构造方法、设置器、获取器和输出方程与解的方法,由于在类的外部要使用,因而被定义为公共的,(public),。在面向对象程序设计中,对外的接口全部应用,public,修饰,即定义为公共的。,3.2.4 【,相关知识,】this,关键字的功能,在案例,3-1,的程序中的多个方法中使用了关键词,this,,如,16,19,行的代码中,给方程的系数,a,和,b,提供初值的构造方法:,16 public,Equation(float,a,float b),17,this.a,=a;,18,this.b,=b;,19,这里的参数,float a,和,float b,是构造方法,Equation(float,a,float b),的局部变量,其有效范围,(,也叫作用域,),是方法,Equation(float,a,float b),的内部,因此,在,Equation,类中定义的方程系数,a,和,b(,在案例,3-1,的第,09,行和第,10,行,),在方法,Equation(float,a,float b),中被隐藏了。也就是说,在该方法中直接用,a,和,b,,则表示使用的是方法参数中定义的局部变量,a,和,b,。当一个对象在调用,Equation(float,a,float b),方法时,如果要使用属于该对象的属性,a,和,b(,也就是在类中定义的,a,和,b),,则要在属性,a,和,b,前面加一个表示对象中,a,和,b,的标记,这个标记就是,this,关键字。,在,Java,语言中,,this,代表当前对象,主要用来以“,this.,成员”的方式引用当前对象的成员。如在案例程序,3-1,的,85,行,有一个方法调用“,e2.setB(0);”,,因为是通过,e2,对象去调用方法,setB,(),,所以表明当前对象是,e2,,即这里的,this,代表,e2,对象。被调用的方法,setB,(),的程序段如下:,32 public void,setB(float,b),33,this.b,=b;,34,则,33,行的,this,就代表了对象,e2,,因此“,this.b,=b,;”就表示将给,e2,对象的系数,b,赋一个值,这个值就是由实参提供的局部变量,b,的值。其实,在类中定义的方法,如果使用了属性字段,则在属性字段的前面都有一个默认的,this,,如程序的第,28,行有一条“,return a;”,语句,本质为“,return,this.a,;”,,表示返回当前对象的,a,值,只是由于在,27,行定义的方法“,public float,getA,()”,中,没有使用局部变量,a,,直接写,a,不会造成混乱,所以省略了,a,前面的,this,。,当然,也可以在程序中避免使用,this,,如该类的构造方法也可以写成如下的形式:,16 public,Equation(float,p,float q),17 a=p;,18 b=q;,19,这种形式很好理解,但它不符合面向对象的编程特点。所以,建议还是使用案例,3-1,中定义的方式。,this,还有一种用法,就是调用该类的其他构造方法,其格式是:,this(,参数,),;,如果没有参数,则调用无参的构造方法。看下面的示例程序:,01 class Point,02,int,x;,03,int,y;,04,05,Point(int,x),06,this.x,=x;,07,08,09,Point(int,x,int,y),10,this(x,);,11,this.y,=y;,12,13,程序的第,10,行使用,this,调用了该类的带一个参数的构造方法“,Point(int,x)”,。,注意,1,:如果在一个类的构造方法中,使用,this,调用了该类的其他构造方法,则,this,调用只能放在程序的第一行。如果将上述示例程序的第,10,行和第,11,行进行交换,则程序将发生编译错误。,注意,2,:一个类的静态方法体中不能使用,this,关键词。,3.3,简单数据类型的包装类,在面向对象程序设计中“一切皆对象”,而前一节介绍的简单数据类型就不是以对象的形式出现的,这从本质上来说不符合面向对象程序设计的思想。但是,简单数据类型易于理解,可以简化程序的书写,所以简单数据类型在,Java,语言中有其存在的合理性。尽管如此,有时在程序中还是要使用以对象形式表示的简单数据类型,(,如一个方法只能接收以对象为参数的调用,),,,Java,语言已经考虑到了这个问题,对每一种简单数据类型都提供了一个与之对应的类,这就是所谓简单数据类型的包装类,本节将介绍这些包装类的知识。,3.3.1,包装类的使用,在,Java,语言类库中,为每一种简单数据类型提供了一个与之对应的类。从本质上来说,这些类就是包装了一个简单类型的数据,并提供了一些对数据进行操作,(,主要是类型转换,),的方法。,1.,简单数值类型的包装类,简单数值类型有,double,、,float,、,byte,、,int,、,long,和,short,共,6,种,它们对应的包装类如表,3-5,所示。,表,3-5,简单数值类型的包装类,基本数据类型的包装类还提供了很多非常有用的方法:,(1),将一个包装类对象转换为任意一种简单数据。,Byte,、,Double,、,Float,、,Integer,、,Long,和,Short,类都能使用表,3-6,所示的方法,将其包装的数值转化为,byte,、,double,、,float,、,int,、,long,和,short,等简单数据类型中的任何一种。,表,3-6,包装类转换为简单数据的方法,如将整数,2,包装为一个整型类对象:,Integer I=new Integer(2);,使用下面的语句可将其赋给一个实型变量:,float f=,I.floatValue,();/f=2.0,(2),使用,toString,(),方法可以将一个包装类中的数据转化为字符串。,如将实数,232.34,包装为一个实型类对象:,Float F=new Float(232.34f);,使用下面的语句可将其赋给一个字符串变量:,String,str,=,F.toString,();,(3),可以将一个由数字组成的字符串转化为简单类型数据。,如将字符串,232,转化为一个整数:,int,i=Integer.parseInt(232);,由于这些转换方法都是静态方法,(,即类方法,以,static,修饰,),,因此在程序中可以通过类名直接使用,例如:,float f=Float.parseFloat(232.12);,double d=Double.parseDouble(267832.1772);,short s=Short.parseShort(232);,long l=Long.parseLong(24532);,byte b=Byte.parseByte(24);,(4),将一个十进制整数转化为其他数制表示的字符串。,Integer,类中定义了将一个十进制整数转化为其他数制表示的字符串的方法:,toBinaryString(int,i),:以二进制无符号整数形式返回一个整数参数的字符串表示形式;,toHexString(int,i),:以十六进制无符号整数形式返回一个整数参数的字符串表示形式;,toOctalString(int,i),:以八进制无符号整数形式返回一个整数参数的字符串表示形式。,此外,,Byte,、,Double,、,Float,、,Integer,、,Long,和,Short,类都提供了其所对应的简单数据类型所能表示的最大值和最小值的字段,(,即类的数据成员,),,字段名分别为,MAX_VALUE,和,MIN_VALUE,,这些字段均为静态的,(,以,static,修饰,),。如下面的语句可分别输出,float,型数据和,short,型数据的最大值和最小值:,System.out.println(Float.MAX_VALUE,);,System.out.println(Float.MIN_VALUE,);,System.out.println(Short.MAX_VALUE,);,System.out.println(Short.MIN_VALUE,);,2.,布尔类型的包装类,Boolean,Boolean,类将基本类型为,boolean,的值包装在一个对象中。一个,Boolean,类型的对象只包含一个类型为,boolean,的字段。此外,此类还为,boolean,和,String,的相互转换提供了许多方法,如:,parseBoolean(String,s),:将字符串参数分析为,boolean,值;,toString,(),:返回表示该布尔值的,String,对象。,3.,字符类型的包装类,Character,Character,类在对象中包装了一个基本类型为,char,的值。此外,该类提供了一些方法,以确定字符的类别,(,小写字母、数字等,),,并提供了将字母由大写转换成小写或由小写转换成大写的方法。常用的方法有:,charValue,(),:返回此,Character,对象包装的字符值;,isLowerCase(char,ch,),:确定指定字符是否为小写字母,;,isUpperCase(char,ch,),:确定指定字符是否为大写字母,;,isDigit(char,ch,),:指定字符是否为数字;,isLetter(char,ch,),:指定字符是否为字母。,举例如下:,System.out.println(Character.isLowerCase(A,);/,输出,false,System.out.println(Character.isUpperCase(A,);/,输出,true,System.out.println(Character.isDigit(A,);/,输出,false,System.out.println(Character.isLetter(A,);/,输出,true,3.3.2,创建包装类对象,创建包装类对象非常简单,归纳起来有如下几种方法:,(1),使用每个包装类的构造方法直接创建。例如:,Boolean b3=new,Boolean(true,);,Character c3=new,Character(a,);,Integer i3=new Integer(2);,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服