Java程序设计基础教程378_第1页
Java程序设计基础教程378_第2页
Java程序设计基础教程378_第3页
Java程序设计基础教程378_第4页
Java程序设计基础教程378_第5页
已阅读5页,还剩373页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java语言概述学习内容Java语言概述0102JDK的下载与安装简介编写一个简单Java程序031.1.1Java语言概述

20世纪90年代,硬件领域出现了价格低廉的单片式计算机系统,Sun公司在1991年成立了一个项目小组负责研究开发新技术,专攻计算机在家电产品上的嵌入式应用。

该项目组的研究人员开始考虑采用C++来编写程序,但对于硬件资源极其匮乏的单片式系统来说,C++程序过于复杂和庞大。Sun公司研发人员对C++进行了改造,并结合嵌入式系统的实时性要求,开发了一种称为Oak的面向对象语言。Oak语言因为缺乏硬件的支持而无法进入市场,从而被搁置了下来。直到1995年,互联网的蓬勃发展,Sun公司率先推出了可以嵌入网页并且可以随同网页在网络上传输的小程序,并将Oak正式更名为Java。在申请注册商标时,使用了提议者在喝一杯Java咖啡时无意提到的“Java”这个词。Java是印度尼西亚爪哇岛的英文名称,因盛产咖啡而闻名。JAVA的标识正是一杯冒着热气的咖啡。Java语言的特点1)简单性2)面向对象3)分布性4)编译和解释性5)稳健性6)安全性7)可移植性8)高性能9)多线索性10)动态性1.1.2安装JDK JDK(JavaDevelopmentKit)是

Java

语言的软件开发工具包,主要用于移动设备、嵌入式设备上的Java应用程序开发。 JDK是整个Java开发的核心,它包含了JAVA的运行环境(JRE)和Java工具。什么是JRE JRE(JavaRuntimeEnvironment)是SUN公司的产品,指Java的运行环境。JRE包括运行JAVA程序所必须的环境的集合,包含JVM(JavaVirtualMachine/Java虚拟机)标准实现及Java核心类库。

JDK的下载和安装

下载JDK(JavaDevelopmentKit)Java开发工具包,通过网址:。安装步骤请参考教材第4-6页。1.1.3JDK安装目录介绍1.2.1配置环境变量

配置环境变量的目的是为了操作系统在任何文件路径下自动找到javac.exe和java.exe的位置。其中javac.exe可以将java源文件(.java文件)编译为class字节码文件(.class文件),java.exe可以运行class字节码文件得到程序运行结果。

配置环境变量步骤请参考教材第8-10页。1.2.2Java程序的基本构成publicstaticvoidmain(String[]args);是java程序的入口地址,java虚拟机运行程序的时候首先找的就是main方法。其中:l“public”表示程序的访问权限,表示的是任何的场合可以被引用。l“static”表示方法是静态的,不依赖类的对象的。l“void”表示无返回值的。lmain函数中参数String[]args是一个字符串数组,接收来自程序执行时传进来的参数。l定义一个类的最简单格式如下所示。class类名{类体}编写一个简单程序编写一个Java程序,使之在屏幕上打印出一句话“我会写Java程序了!”方法一:在配置好环境变量后,用记事本编写这个程序1)在D盘新建一个文件夹test,在test目录下用记事本编写如下代码,保存为test.java。

2)打开命令行窗口,输入“d:”,按〈Enter〉键进入D盘;输入“cdtest”,按〈Enter〉键进入“test”目录;输入“javactest.java”,按〈Enter〉键,这时在test目录下面会新生成一个class文件,再输入“javaDemo”按〈Enter〉键,这时命令行窗口中就能输出一句话:“我会写Java程序了!”。编写一个简单程序方法二:使用集成开发工具eclipse编写Java程序Eclipse是一个开放源代码的、基于Java的可扩展开发平台,下载网址为:/downloads/。安装了JDK之后,可以直接下载Eclipse打开使用,Eclipse无需安装。Eclipse使用步骤如下:1)打开Eclipse,单击“File”按钮,在弹出来的菜单中选择“New”→“JavaProject”,在打开的“NewJavaProject”对话框中输入Projectname为“hellojava”,单击“Finish”按钮。

2)右键单击新建的项目“hellojava”,在弹出的快捷菜单中选择“New”→“Class”,在打开的“NewJavaClass”对话框中输入Name为“HelloJava”,勾选“publicstaticvoidmain(String[]args)”,单击“Finish”按钮。3)在代码区中输入如下代码,按〈Ctrl+S〉组合键保存。在代码页面空白处右键单击,在弹出的快捷菜单中选择“RunAs”→“JavaApplication”,或者单击Eclipse上方菜单栏的Java语法基础学习内容语法基础0102选择语句循环语句032.1.1标识符与命名规范在Java中,标识符用来给程序中的包、常量、变量、方法、类和接口命名,标识符的命名规范如下。标识符由26个英文字母、数字0-9、下画线和$组成。标识符的首字符必须是字母、下画线或者$。标识符的命名不能与关键字、布尔值(true、false)和null相同。标识符严格区分大小写,没有长度限制。为了使程序具有可读性,标识符命名须符合见名知义的规则。比如,定义姓名时使用name,定义年龄时使用age,一看便知道其代表的含义。2.1.1标识符与命名规范【例2-1】

请从以下标识符中找出错误的标识符,并说明为什么;test和Test是一样的标识符吗?$test、_test、1test、test1、test、test$、public、null、Test、false、@chongqing2.1.2关键字

关键字是事先定义的,有特殊含义的单词。Java的关键字对Java的编译器有特殊的意义,和其它编程语言一样,Java中预留了许多关键字,如public、void、for、if等等。2.1.2部分关键字及其含义关键字含义abstract表明类或者成员方法具有抽象属性boolean基本数据类型之一,声明布尔类型的关键字break提前跳出一个块byte基本数据类型之一,字节类型case用在switch语句之中,表示其中的一个分支char基本数据类型之一,字符类型class声明一个类continue回到一个块的开始处do用在do-while循环结构中double基本数据类型之一,双精度浮点数类型else用在条件语句中,表明当条件不成立时的分支float基本数据类型之一,单精度浮点数类型for一种循环结构的引导词if条件语句的引导词long基本数据类型之一,长整数类型new用来创建新实例对象package包private一种访问控制方式:私用模式protected一种访问控制方式:保护模式public一种访问控制方式:共用模式return从成员方法中返回数据static表明具有静态属性switch分支语句结构的引导词void声明当前成员方法没有返回值while用在循环结构中2.1.3代码注释单行注释:“//”为单行注释标记,从“//”符号开始直到换行为止的所有内容都作为注释,编译器不会对这部分进行编译。语法://注释内容例:

inta=6;//声明一个int变量并赋值为62.1.3代码注释多行注释:“/**/”为多行注释标记,符号“/*”与“*/”之间的所有内容都是注释内容,可以换行。语法:/*注释内容1注释内容2*/例:/*程序名称:俄罗斯方块小游戏*/2.1.3代码注释

文档注释:如果想为程序生成一份像官方API帮助文档一样的文件,可以在编写代码时使用文档注释。可以使用JDK安装目录下bin文件中的javadoc.exe工具,javadoc工具可以从程序源代码中抽取类、方法、成员等注释形成一个和源代码配套的API帮助文档。只要程序员在编写程序时以一套特定的标签作注释,在程序编写完成后,通过使用javadoc工具就可以同时形成程序的开发文档了。使用方式:使用命令行在目标文件所在目录输入javadoc+文件名.java。还有另外一种方式生成帮助文档,在Eclipse当中选择Project→GenerateJavadoc,选择想要生成开发文档的项目工程和文档保存的路径,单击“Next”设置一些选项,单击“Finish”完成设置。这样,在相应路径下就会有生成的帮助文档了。编码规范每条语句占一行每条命令以英文状态下的分号结束,小心出错声明变量时要分行,有助于后面添加注释不要使用技术性很高、难懂、易混淆判断的语句,方便今后的维护对于程序的关键部分应该多加注释,可以增加程序的阅读性,也有助于阅读者快速了解代码结构2.1.4基本数据类型基本数据类型数值型字符型布尔型整数类型浮点类型byte、short、int、longfloat、double2.1.4整数类型整数类型用来存储整数数值,可以是正数、负数、也可以是零。根据所占内存的大小,可以分为byte(字节),int(整型),short(短整型),和long(长整型)。2.1.4整数类型取值范围数据类型内存空间取值范围byte8位(1个字节)-128~127short16位(2个字节)-32768~32767int32位(4个字节)-2147483648~2147483647long64位(8个字节)-9223372036854775808~9223372036854775807注意:在使用时一定要注意各个类型取值范围,避免数据产生溢出错误!其中,在对长整型变量赋值时必须在末尾加上大写L或者小写l,比如:longa=45789451L;2.1.4浮点类型浮点类型表示有小数部分的数字。浮点类型又分为单精度浮点类型(float)和双精度浮点类型(double)。2.1.4浮点类型取值范围数据类型内存空间取值范围float32位(4个字节)-3.40E+38~+3.40E+38double64位(8个字节)-1.79E+308~+1.79E+308注意:在Java中,一个小数会被默认为double类型,因此在为float类型的变量赋值时必须在末尾加上大写F或者小写f。比如:floata=123.4f;2.1.4字符类型

字符类型变量用于存储一个单一字符,在Java中用char表示,每个char类型的字符变量占用2个字节。在给char类型的变量赋值时,需要用单引号把字符括起来,也可以将char类型的变量赋值为0~65535范围内的整数,计算机会自动将这些整数转化为对应的字符。例:charc1=‘a’;//为一个char类型的变量赋值为字符acharc2=‘97’;//为一个char类型的变量赋值整数97,相当于赋值字符a2.1.4布尔(boolean)类型

布尔类型变量用来存储布尔值,在Java中用boolean表示。布尔类型变量只有2个值,即true和false。例:booleanb1=false;//声明一个boolean类型变量,初值为falseb1=true;//改变b1变量的值为true2.1.5常量与变量1.常量

常量指在程序运行过程中值固定不变的量。常量不同于常量值,它可以在程序中用符号来代替常量值使用,因此在使用前必须先定义。常量与变量类似,都需要初始化,即在声明常量的同时要赋予一个初始值。常量一旦初始化就不可以被修改。Java语言使用final关键字来定义一个常量。

定义常量的一般格式如下。

final数据类型常量名[=初值]例如,

finalintX=10;2.1.5常量Java常量包括整型常量、浮点数常量、布尔常量、字符常量、字符串常量等。1)整型常量值2)浮点数常量值3)布尔型常量值4)字符型和字符串常量值5)转义字符2.1.5变量

与常量相对,变量指在程序运行过程中其值可以变化的量。变量必须定义了之后才可以使用。定义变量的一般格式为:[访问修饰符]变量类型说明符变量名[=初值]【参数说明】访问修饰符是可选项,说明了变量的访问权限和某些规则。变量类型说明符确定变了量的取值范围以及对变量所能进行的操作范围。“变量名”是定义的名称变量,要遵循标识符的命名规则。初值是可选项,变量可以在定义的同时赋值,也可以先定义,在后续程序中赋初值。例如,定义一个int类型变量a并赋初值为3,代码如下所示。inta=3;例题【例2-2】使用变量存储数据,实现个人信息的输出。publicclassExample201{ publicstaticvoidmain(String[]args){ Stringname="小明";//姓名 intage=20;//年龄 Stringsex="男";//性别 Stringfavorite="篮球";//爱好 System.out.println("姓名是:"+name); System.out.println("年龄是:"+age); System.out.println("性别是:"+sex); System.out.println("爱好是:"+favorite); }}2.1.5变量的作用范围变量需要定义之后才可以使用,但是这并不意味着一个变量在定义之后可以在程序中的任意位置使用,变量需要在它的作用范围内使用。在Java程序中,变量被定义在一对大括号之中,这对大括号包含的区域就是这个变量的作用范围。例题【例2-3】通过一个完整例子进一步掌握变量的作用范围。下面程序代码有问题吗?publicclassExample202{ publicstaticvoidmain(String[]args){ inta=3;//定义了变量a,并赋初值为3 { intb=9;//定义了变量b,并赋初值为9 System.out.println("a="+a);//访问变量a System.out.println("b="+b);//访问变量b } System.out.println("b="+b);//访问变量b }}2.1.6Java中的常用运算符

运算符就是告诉程序执行特定运算操作的符号。Java常用的运算符有:赋值运算符、算术运算符、比较运算符、逻辑运算符、条件运算符等。赋值运算符

在Java中,赋值运算符“=”不是数学中的“等于”,赋值运算符“=”用于给变量赋值,并且可以和算术运算符进行结合,组成复合赋值运算符。复合赋值运算符有:+=,-=,*=,%=。intx=8;inty=2;x=x+y;//这句代码可以替换为x+=y【例2-4】赋值运算符。算术运算符运算符含义示例结果+加法运算符7+29-减法运算符7-25*乘法运算符7*214/除法运算符7/23%取模(求余数)运算符7%21++自增运算符i=2;j=i++;i=3;j=2--自减运算符i=2;j=i--;i=1;j=2例题【例2-5】算术运算符的用法。publicclassExample203{ publicstaticvoidmain(String[]args){ inti=7; intj=2; doublex=7.0; System.out.println("7/2="+i/j); System.out.println("7.0/2="+x/j); System.out.println("7%2="+i%j); System.out.println("7.0%2="+x%j); j=++i; System.out.println("i="+i+",j="+j); }}例题【例2-6】自增自减运算符的使用方法。publicclassExample204{ publicstaticvoidmain(String[]args){ inta,b,c,d,e,f; a=b=c=d=5; a++; ++b; c--; --d; System.out.println("a="+a+",b="+b+",c="+c+",d="+d); e=a++;f=++b; System.out.println("a="+a+",b="+b+",e="+e+",f="+f); }}比较运算符运算符含义示例结果==等于8==9false!=不等于8!=9true<小于8<9true>大于8>9false<=小于等于8<=9true>=大于等于8>=9false注意:比较运算符“==”不是赋值运算符“=”,一定不要搞混淆了。逻辑运算符

逻辑运算符用于对两个布尔类型的操作数进行运算,结果依然是布尔类型。publicclassExample205{ publicstaticvoidmain(String[]args){ inta=0,b=0,c=0; //定义整型变量a、b、c并赋初值为0 booleanx,y; //定义布尔类型变量x,y x=a>0&b++>1; //逻辑与运算 System.out.println(x); System.out.println("b="+b); y=a>0&&c++>1; //短路与 System.out.println(y); System.out.println("c="+c); }}【例2-7】通过以下案例掌握&运算符和&&运算符的不同之处。|运算符和||运算符同理。条件运算符

条件运算符是Java中唯一的需要3个操作数的运算符,因此,又称为三目运算符。条件运算符的语法格式如下。

条件表达式?表达式1:表达式2;

首先判断条件表达式是否成立,如果成立,执行表达式1;如果条件表达式不成立,执行表达式2。例题【例2-8】用条件运算符求三个数中的最小数。publicclassExample206{ publicstaticvoidmain(String[]args){ inta=34,b=12,c=61; intmin; min=a<b?(a<c?a:c):(b<c?b:c); System.out.println("min="+min); }}2.1.7数据类型转换

在程序中,当需要把一种数据类型的值赋给另外一种数据类型的变量的时候,需要用到数据类型转换。数据类型转换分为两种:自动类型转换和强制类型转换。自动类型转换

自动类型转换也叫做隐式类型转换。当不同类型的常量和变量在表达式中混合使用时,它们最终将自动被转换为同一类型。要实现自动类型转换,必须满足两个条件,一是两种数据类型彼此兼容,二是目标类型的取值范围要大于源类型的取值范围。自动类型转换规则如下所示。(byte、short)和int进行加减乘除等运算得到int(byte、short、int)和long进行加减乘除等运算得到long(byte、short、int、long)和float进行加减乘除等运算得到float(byte、short、int、long、float)和double进行加减乘除等运算得到doublechar和int进行加减乘除等运算得到int例题【例2-9】分析以下代码的数据类型转换过程。bytea=3;intb=a;

在上面的两行代码中,首先定义了byte类型的变量a并赋值为3,然后将变量a的值赋值给了int类型的变量b。这里能够实现两种不同数据类型变量的赋值运算,是因为int类型的取值范围要比byte类型的取值范围大,所以编译器能够自动完成这种数据类型的转换,不会报错。强制类型转换

强制类型转换也称作隐式类型转换,跟自动类型转换不同的是,强制类型转换需要进行显式的声明。当两种类型不兼容或者目标类型取值范围小于源类型取值范围额的时候,就不能进行自动类型转换,这时需要进行强制类型转换。在Java中,使用一对小括号进行强制类型转换。例题【例2-1】

找出下面代码中错误的地方并更正。intnum=259;byteb=num;shorts=num;任务实施 intf=200;//定义一个变量保存华氏温度,并给它赋初值200 intc;//定义一个变量保存转换后的摄氏温度值 c=(int)((5.0/9)*(f-32));//强制类型转换2.2.1if语句

一个if语句包含一个布尔表达式和一条或多条语句,语法格式如下所示。if(布尔表达式){语句块1;//如果布尔表达式为true将执行的语句}例题【例2-11】if语句的使用方法。publicclassExample207{ publicstaticvoidmain(String[]args){ intx=32;//声明int型变量x,并赋初值 inty=50;//声明int型变量y,并赋初值 if(x>y){//如果x>y System.out.println("变量x大于变量y");//如果条件成立,输出的信息 } if(x<y){//如果x<y System.out.println("变量x小于变量y");//如果条件成立,输出的信息 } }}if-else语句

程序中含有分支选择的时候简单的if语句就不能满足需要了,需要用if…else语句,语法格式如下。if(布尔表达式) 语句块1;//如果布尔表达式的值为trueelse语句块2;//如果布尔表达式的值为false例题【例2-12】if-else语句的使用方法。publicclassExample208{ publicstaticvoidmain(String[]args){ intmath=55;//数学成绩 intchinese=87; //语文成绩 if(math>60){//条件判断 System.out.println("数学及格了!"); }else{ System.out.println("数学不及格!"); } if(chinese>60){//条件判断 System.out.println("语文及格了!"); }else{ System.out.println("语文不及格!"); } }}嵌套if语句

现实中问题会比较复杂,单个的if-else语句可能不能解决问题,因此Java语言提供了if语句的嵌套功能,即一个if语句中还能有一个if语句。语法格式如下。if(布尔表达式1) 语句块1;elseif(布尔表达式2) 语句块2;elseif(布尔表达式3) 语句块3;……else语句块n;例题【例2-13】if…else语句嵌套的使用方法。publicclassExample209{ publicstaticvoidmain(String[]args){ intx=30; if(x>40){//条件判断 System.out.println("x的值大于40"); }elseif(x>20){//条件判断 System.out.println("x的值大于20,小于40"); }elseif(x>0){//条件判断 System.out.println("x的值大于0,小于20"); }else{//条件判断 System.out.println("x的值小于0"); } }}2.2.2switch语句

if-else语句只能有两个分支,而switch语句可以有多个分支。switch…case语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支,因此又称为多分支选择语句。如果要处理多种分支情况时,选择switch语句可以简化程序,使程序结构清楚明了,可读性强。switch语句的一般格式如下所示。switch(表达式){case值1:语句块1;break;case值2:语句块2;break;...case值n:语句块n;break;[default:默认语句;]}例题【例2-14】给定一个月份的数字形式,输出该月份的英文名称。publicclassExample210{ publicstaticvoidmain(String[]args){ intmonth=8;//定义整型month变量,赋值八月份 switch(month){//括号中表达式的值为8,数据类型为整型 case1:System.out.println("January");break;//case后的常量值类型也是整型 case2:System.out.println("February");break; case3:System.out.println("March");break; case4:System.out.println("April");break; case5:System.out.println("May");break; case6:System.out.println("June");break; case7:System.out.println("July");break; case8:System.out.println("August");break; case9:System.out.println("September");break; case10:System.out.println("October");break; case11:System.out.println("November");break; case12:System.out.println("December");break; default:System.out.println("Sorry!Idon'tknow!"); } }如果把“break”全部删除,会是什么结果?2.3.1while语句while语句主要用于循环次数不确定的情况,一般格式如下。while(布尔表达式){语句块;//可以是单条语句,也可以是复合语句}例题【例2-15】用while语句求1-100的和。publicclassExample212{ publicstaticvoidmain(String[]args){ intx=1; //定义int型变量,并赋初值 intsum=0; //定义变量用于保存各数相加后的结果 while(x<=100){ //while循环语句,当变量满足条件表达式时执行循环体语句 sum=sum+x; x++; //当使用了x变量后自加1

} System.out.println("1到100的和为:"+sum); }}2.3.2do-while语句do-while循环语句的一般格式如下。do{语句块;}while(布尔表达式);while和do-while有什么不同?例题【例2-16】do-while语句的使用方法。publicclassExample213{ publicstaticvoidmain(Stringargs[]){ intx=10; do{ System.out.print("valueofx:"+x); x++; System.out.print("\n"); }while(x<13);//指定循环条件 }}2.3.3for语句for循环语句的一般格式如下。for(表达式1;表达式2;表达式3){语句块;}例题【例2-17】用for循环语句计算1-100的和。publicclassExample214{ publicstaticvoidmain(String[]args){ intsum=0;//定义一个变量sum,赋初值0,用来保存每次循环后sum的值 for(inti=1;i<=100;i++){//循环条件 sum=sum+i;//循环体 } System.out.println("1到100的和为:"+sum); }}2.3.4跳转语句

跳转语句,是在程序进行到某一步时,想要结束或者中断这个循环,用程序跳转语句来实现这个功能。这里重点介绍两种跳转语句:break语句和continue语句。

break和continue都可以用来跳出当前循环,break还可以用在switch语句当中,break和continue两者的主要区别是:break语句是结束整个循环语句,不再执行该循环块或者程序块;而continue语句的作用是中断当前的这次循环,还会继续执行后面的循环。简而言之就是,break--跳出循环,continue--继续下一个循环的运算。例题【例2-18】break语句和continue语句的用法。publicclassExample215{ publicstaticvoidmain(String[]args){ for(inti=0;i<5;i++){ if(i==0){ break;//跳出循环 } System.out.println(i); } }}publicclassExample215{ publicstaticvoidmain(String[]args){ for(inti=0;i<5;i++){ if(i==0){ //break; continue;//结束本次循环 } System.out.println(i); } }}面向对象基础学习内容类和对象0102包构造方法的调用封装03面向过程的概念一种思维方法,重在解决问题的过程;最重要的是模块化的思想方法,基本单元是函数;主要体现我们解决问题的流程,比较简单,不易维护和扩展。面向过程含义面向对象的概念主要针对实现功能的对象,把需要解决的问题划分成多个独立的对象,分析每个对象的属性和方法,通过这些对象的属性和行为去解决问题;更易维护和扩展。面向对象含义面向对象的特点封装性继承性多态性类的概念类是定义同一类对象的原型,是一组具有共同特性的所有对象成员的集合,它是一个抽象的概念,多个对象常常具有一些共同的特征,于是可以把这些特征抽象出来,也就是一类对象的共性,就是类。类是对象的模板类含义定义类的语法语法形式[类修饰符]class类名[extends父类][implements接口列表]{[声明成员变量]

[定义构造方法][成员方法定义]}类的创建步骤打开软件,首先选择File→New→JavaProject,输入项目名Chapter03,点击Finish按钮。创建项目Chapter03。其次在项目名Chapter03下,选择File→New→Class,在Name中输入类名Phone,点击Finish按钮,创建类Phone然后我们看到文件“Phone.java”中默认的内容。定义成员变量的语法语法形式[修饰符][static][final]变量类型变量名[=初始值];修饰符用来控制访问权限static用来表示定义的是静态成员变量final表示用来定义常量static和final都省略表示定义实例成员变量为Phone类和Circle类添加成员变量静态成员变量和实例成员变量的区别关键字静态成员变量用static修饰,而实例成员变量不能用static修饰

生命周期

实例成员变量随着对象的创建而创建,随着对象被收回而释放,静态成员变量随着类的加载而存在,随着类的消失而消失调用方法实例成员变量只能被对象调用,静态成员变量既可以被类调用,又可以被对象调用定义成员方法的语法语法形式[修饰符][static]方法返回值的类型方法名([参数列表]){[方法体]}修饰符用来控制访问权限static用来表示定义的是静态成员方法static省略表示定义实例成员方法为Phone类和Circle类添加成员方法静态成员方法和实例成员方法的区别关键字静态成员方法用static修饰,而实例成员方法不能用static修饰

访问对象

实例方法既可以访问静态成员变量和静态方法,又可以访问实例成员变量和实例方法;而静态方法只能访问静态成员变量和静态方法调用方法实例方法只能被对象调用,静态方法既可以被类调用,又可以被对象调用成员变量和局部的区别定义位置成员变量在类体内,方法外;局部变量定义在方法体内和方法参数中关键字局部变量不能用修饰符和static,可以用final,成员变量都可以用初始化值成员变量有默认的初始化值;局部变量没有默认调用方式局部变量不能用类和对象调用,只能用在方法体内,成员变量中的静态成员变量可以由类和对象调用,实例成员变量可以由对象调用。生命周期局部变量与方法共存亡,成员变量中的静态成员变量与类共存亡,实例成员变量与对象共存亡。构造方法的特点调用名字返回值必须要与它所在的类的类名相同。只能由new运算符调用没有返回值,方法头部不能用void修饰,方法体不能使用return语句返回一个值省略可以省略,系统会自动为该类定义默认的构造方法定义构造方法的语法语法形式[访问修饰符]<类名>([参数列表]){构造方法的语句体}使用构造方法注意事项用void修饰在用new运算符调用构造方法时,会报错“TheconstructorEmployee(String)isundefined”用private修饰在另外一个类中生成此类的对象会报错“TheconstructorEmployee(String)isnotvisible”自定义构造方法后,再调用默认构造方法自定义构造方法后,调用默认构造方法会报错“TheconstructorEmployee()isundefined”。声明对象和创建对象[变量修饰符]类名对象名;

Phone

p;对象名=new类名([参数列表]);p=newPhone(“华为”,“金色”,2000);//用有参构造函数实例化对象p类名对象名=new类名();Phonep=newPhone(“华为”,“金色”,2000);引用成员变量类名.成员变量;

Circle.count=1;对象名.成员变量;System.out.println("品牌:"+p.brand+"颜色:"+p.color+"价格:"+p.price);品牌:三星颜色:灰色价格:2000静态成员变量01实例成员变量02引用成员方法类名.成员方法;

Circle.getCircleCount();对象名.成员方法;p.phoneCall();p.sendMessage();静态成员方法01实例成员方法02定义主类,测试Phone类定义主类,测试Circle类类的概念包是Java提供的一种为了更好的组织类而建立的命名空间机制,把一组功能相关的类和接口组织在一起,放在同一个包中,相当于系统中的文件夹。包含义包的作用容易知道哪些类和接口是相关的,而且也容易寻找实现某种功能的类和接口。允许包中的类比较自由地访问包中的其他类,同时又比较严格地限制包外面的类对包内的类进行访问包创建了一个“命名空间”,以避免类型之间的命名冲突,一个包中的类名、接口名不会与另外一个包中的类名和接口名发生冲突。利用包也利于对自己编写的程序进行管理③②①包的声明语法形式package包名;包名必须符合Java标识符的命名规则。

package包名.包名[.包名….包名];创建包的步骤创建项目ProjectPackage。选择File→New→JavaProject,输入项目名ProjectPackage,点击Finish按钮。在包com.java.cqcet下,选择File→New→Class,输入类名PackageTest.java。注意Eclipse自动在PackageTest.java文件的程序开始处加入packagecom.cqcet.java在项目名ProjectPackage下,选择File→New→Package,在Name中输入包名com.cqcet.java,点击Finish按钮③②①包的导入导入整个包import包名[.包名[.包名…]].*;例如,导入abc中的所有类importabc.*导入包的某类import包名[.包名[.包名…]].类名;例如,导入包abc中的单个类ClassNameimportabc.ClassName静态导入importstatic包名[.包名[.包名…]].类名.静态成员变量|静态成员方法;importstatic包名[.包名[.包名…]].类名.*;声明包,包中定义的类可以被其它的包访问静态导入四种访问修饰符public修饰类、成员变量和成员方法,对外界是可访问的protected这个类本身、它的子类(包括同一包中的和不同包中的子类)以及同一包中所有其它的类访问。(default)省略访问修饰符,就称之为(default),也称为包访问控制。同一包内的其它所有类都能访问该成员,但对包外的所有类就不能访问。private只能被这个类本身的方法访问,它不能在类外访问。private的访问权限有助于对客户隐藏类的实现细节,减少错误,提高程序的可修改性访问修饰符的访问权限

作用范围访问权限同一个类中同一个包中不同包中的子类不同包中的非子类public√√√√protected√√√×(default)√√××private√×××定义User类并测试setter的语法语法形式publicvoidset成员变量名(成员变量类型变量名){成员变量名=变量名}注意:set和成员变量名之间没有空格publicvoidsetPrice(intphoneprice){price=phoneprice;}publicvoidsetPrice(intphoneprice){if(phoneprice>0)price=phoneprice;}getter的语法语法形式public成员变量类型get成员变量名(){return成员变量名;}其中,get和成员变量名之间没有空格,成员变量名首字母要大写。publicintgetPrice(){returnprice;}this关键字的作用引用成员变量构造方法或者成员方法的参数与成员变量名相同,需要用this关键字来区分引用构造方法在一个构造方法内部引用其它的构造方法,可以用this关键字代表自身对象每一个类的内部都有一个隐含的表示自身类的成员变量,用this表示自身类的成员变量引用成员方法在一个类的内部,成员方法之间的相互调用也可以使用thisthis引用成员变量、构造方法this代表自身对象小结类和对象包的概念封装的用法继承和多态学习内容重载0102重写向上转型03继承的含义一个类A可以复用另外一个类B的属性和方法,类A也可以添加新的属性和方法,或者修改类B的方法,类B为父类,类A为子类,称子类A继承了父类B继承含义子类的声明[修饰符]class子类名extends父类名{//子类的成员变量定义//子类和父类同名的成员方法定义

//子类和父类不同名的成员方法定义}继承关系注意事项父类中声明为private的成员变量和方法父类的构造方法父类和子类成员方法名相同定义父类Animal以及子类Cat和Dog成员变量和成员方法的屏蔽子类用自己的成员变量,隐藏父类的成员变量子类用自己的成员方法,隐藏父类的成员方法成员变量名相同01成员方法名相同02修改Cat类,增加同名成员变量color方法eat()super关键字的用法访问父类同名成员变量super.成员变量访问父类同

名成员方法

super.成员方法([参数列表])访问父类构造方法super([参数列表])修改Animal类和Cat类final关键字的用法final关键字修饰类finalclass类名{

类体}类不能被继承final关键字修饰成员变量final数据类型常量名=默认值;}常量必须初始化,并且初始化之后不能更改final关键字修饰成员方法final返回类型成员方法名([参数列表]){方法体}方法不能在其所在的类的子类重新定义定义Circle父类和Cylinder子类抽象类抽象类是一种特殊的类,它不能被实例化,也就是不能用new关键字来创建对象。声明抽象类的格式与声明类的格式相同,但是要用abstract修饰符指明它是一个抽象类,语法格式如下:abstractclass类名{//类体}abstractclassFood{publicStringname;//定义成员变量name}classBreadextendsFood{}抽象方法在抽象类中只做声明而不去实现的方法称为抽象方法,抽象方法只有方法的声明,而没有方法的实现代码,需要子类重写抽象方法,定义抽象方法的语法格式如下:abstract<方法返回值类型>方法名([参数列表]);abstractclassFood{ publicStringname;//定义成员变量name publicabstractvoidcook();//烹饪的方法}classBreadextendsFood{ publicvoidcook(){ System.out.println("面包出炉了"); }}抽象类Animal,Cat和Dog类继承Animal类接口的含义接口是一种特殊的抽象类,只包含常量及成员方法的声明,接口中的所有方法都只有方法声明而没有方法体,既没有成员变量的定义,也没有成员方法的实现,规划了类的共同行为。接口含义接口的定义接口的定义包括接口声明和接口体,一般格式如下:[public]interface接口名[extends父接口列表]{//常量声明//方法声明}例如,定义一个Shape接口,在该接口中定义一个常量PI、两个方法getArea()和getCircumference(),代码如下:publicinterfaceShape{ finalfloatPI=3.14f; publicfloatgetArea(floatr); publicfloatgetCircumference(floatr);}接口的创建步骤①创建项目ProjectInterface。选择File→New→JavaProject,输入项目名ProjectInterface,点击Finish按钮。②在项目名ProjectInterface下,选择File→New→Interface,在Name中输入接口名Shape,点击Finish按钮,在文件“Shape.java”中输入接口的定义内容。接口的实现class类名implements接口1[,接口2,接口3,…,接口n]{//类体}接口中声明了一组方法,而具体实现接口的方法,则需要某个类来实现,语法格式如下:接口主要用来规范类的方法,主要应用有两种方式:①实现接口②接口作为参数接口Shape,定义类Circle实现接口Shape接口Student,小学生、中学生和大学生类实现接口Student接口作为参数重载的含义一个类中可以有多个方法具有相同的方法名,但这些方法的参数个数不同,或者参数类型不同重载含义构造方法重载成员方法重载重写的含义重写含义子类继承父类,定义与父类同名的成员方法,称为子类修改父类的成员方法,这种行为叫做方法重写,也称为覆盖。子类SoftwareTeacher,重写父类Teacher的teach()方法重载(Overloading)和重写(Overiding)的区别方法名重载方法名称相同,参数的类型或个数不同;而重写方法名称、参数类型、返回值类型全部相同权限

重载对方法的权限没有要求,而被重写的方法不能拥有更严格的权限现象重载一般发生在一个类中,而重写发生在继承中向上转型的含义向上转型含义当把子类对象赋值给父类引用变量时称为向上转型,也就是把子类对象转换为父类对象。Animal父类的对象指向子类Cat的对象Animal父类的对象指向子类Cat的对象小结接口的定义和实现继承的用法多态的用法常用类库学习内容字符串的使用0102数组的使用日期类0304Math类的使用集合的使用055.1.1String类的介绍

在应用程序中会经常用到字符串,字符串就是一连串的字符,它是由很多单个字符连接而成的。字符串中可以包含任意字符,字符必须在一对双引号里面,比如“abc123”。Java提供了一个内置的String类来处理字符串,String类封装在Java的标准包java.lang中,不需要导包就可以直接使用。String类的初始化在Java中,可以通过以下两种方式对String类进行初始化。1)使用字符串常量直接初始化一个String类对象,例如,Strings1=”hellojava!”;2)使用String的构造方法初始化字符串对象,如下表所示。方法声明功能描述String()创建一个内容为空的字符串String(char[]value)根据指定的字符数组创建对象String(Stringvalue)根据指定的字符串内容创建对象例题【例5-1】通过调用不同参数的构造方法完成String类的初始化。publicclassExample501{ publicstaticvoidmain(String[]args){ Stringstr1=newString();//创建一个空的字符串 Stringstr2=newString("hellojava!");//创建一个内容为hellojava的字符串 char[]charArray=newchar[]{'J','a','v','a'};//创建一个内容为字符数组的字符串 Stringstr3=newString(charArray); System.out.println("Ja"+str1+"va");//打印到控制台 System.out.println(str2); System.out.println(str3); }}String类的常用方法方法声明功能描述intindexOf(intch)返回指定字符在此字符串中第一次出现处的索引intlastIndexOf(intch)返回指定字符在此字符串中最后一次出现的索引charcharAt(intindex)返回字符串中index位置上的字符,其中index的取值范围是0~(字符串长度-1)booleanendsWith(Stringsuffix)判断此字符串是否以指定的字符串结尾intlength()返回此字符串的长度booleanequals(ObjectanObject)将此字符串与指定的字符串比较booleanisEmpty()当且仅当字符串长度为0时返回truebooleanstartWith(Stringprefix)判断此字符串是否以指定的字符串开始booleancontains(CharSequencecs)判断此字符串是否包含指定的字符序列StringtoLowerCase()将所有字符转换为小写StringtoUpperCase()将所有字符转换为大写StringvalueOf(inti)返回int参数的字符串表示形式char[]toCharArray()将此字符串转换为一个字符数组Stringreplace(CharSequenceoldstr,CharSequencenewstr)返回一个新的字符串,它是通过用newstr替换此字符串中出现的所有oldstr得到的Stringsubstring(intbeginIndex)根据参数regex将原来的字符串分割为若干个子字符串Stringsubstring(intbeginIndex,intendIndex)返回一个新字符串,它包含字符串中索引beginIndex后的所有字符Stringtrim()返回一个新字符串,它除去了原字符串首尾的空格例题【例5-2】字符串连接符“+”的用法。publicclassExample502{ publicstaticvoidmain(String[]args){ intreadtime=3;//int型变量 floatpractice=3.5f;//float型变量 System.out.println("我每天花"+readtime+"小时看Java书," +practice+"小时上机实践。");//字符串将各种类型的数据相连接并输出 }}例题【例5-3】获取字符串信息。publicclassExample503{ publicstaticvoidmain(String[]args){ Strings="HelloJava!";//创建了一个字符串 System.out.println("字符串s的长度为:"+s.length());//调用length()方法输出字符串长度 System.out.println("字符a在字符串s中第一次出现的位置是:"+s.indexOf("a")); System.out.println("字符a在字符串s中最后一次出现的位置是:"+s.lastIndexOf("a")); System.out.println("字符串s中索引位置为7的字符是:"+s.charAt(7));//将字符串s中索引位置为7的字符返回 }}例题【例5-4】字符串替换。publicclassExample504{ publicstaticvoidmain(String[]args){ Strings="Jovo!"; Stringnew1=s.replace("o","a");//将Jovo中全部o替换为a Stringnew2=s.replaceFirst("o","a");//将Jovo中第一个o替换为a System.out.println(new1); System.out.println(new2); }}例题【例5-5】比较两个字符串。publicclassExample505{ publicstaticvoidmain(String[]args){ Strings1=newString("HelloJava!");//声明字符串s1 Strings2=newString("HelloJava!");//声明字符串s2 Strings3=newString("HELLOJAVA!");//声明字符串s3 Strings4=s1;//将s1的值赋给s4 booleanb1=(s1==s2);//用“==”比较s1和s2 booleanb2=(s1==s4);//用“==”比较s1和s4 booleanb3=s1.equals(s2);//用“equals()”比较s1和s2 booleanb4=s1.equals(s3);//用“equals()”比较s1和s3 booleanb5=s1.equalsIgnoreCase(s2);//用“equalsIgnoreCase()”比较s1和s2 booleanb6=s1.equalsIgnoreCase(s3);//用“equalsIgnoreCase()”比较s1和s3 System.out.println("s1==s2:"+b1); System.out.println("s1==s4:"+b2); System.out.println("s1equalss2:"+b3); System.out.println("s1equalss3:"+b4); System.out.println("s1equalsIgnoreCases2:"+b5); System.out.println("s1equalsIgnoreCases3:"+b6); }}例题【例5-6】字符串大小写转换。publicclassExample506{ publicstaticvoidmain(String[]args){ Strings=newString("abcdeFGHI"); Stringnew1=s.toLowerCase();//转换为小写 Stringnew2=s.toUpperCase();//转换为大写 System.out.println("全部转换成小写字母后的字符串是:"+new1); System.out.println("全部转换成大写字母后的字符串是:"+new2); }}5.1.2StringBuffer类的介绍

字符串一经创建,其内容和长度就不可以再改变,所以如果要对一个字符串进行修改,就只能创建新的字符串。为了便于对字符串进行修改,JDK中提供了一个StringBuffer类(也称为字符串缓冲区)。StringBuffer类和String类的最大区别就是StringBuffer的内容和长度都可以修改,相当于一个容器,当在其中添加或者删除字符的时候,并不会产生新的StringBuffer对象。StringBuffer类的常用方法方法声明功能描述StringBufferappend(charc)添加参数到StringBuffer对象中StringBufferinsert(intoffset,Stringstr)在字符串中的offset位置插入字符串strStringBufferdeleteCharAt(intindex)删除指定位置的字符StringBufferdelete(intstart,intend)删除StringBuffer对象中指定范围的字符或字符串序列StringBufferreplace(intstart,intend,Strings)在StringBuffer对象中替换指定的字符或字符串序列voidsetCharAt(intindex,charch)修改指定位置index处的字符序列StringtoString()返回StringBuffer缓冲区中的字符串StringBufferreverse()将此字符序列顺序倒置例题【例5-7】通过以下代码理解StringBuffer类的常用方法如何使用。publicclassExample507{ publicstaticvoidmain(String[]args){ System.out.println("1.添加-------------------"); add(); System.out.println("2.删除-------------------"); remove(); System.out.println("3.修改-------------------"); alter(); } publicstaticvoidadd(){ StringBuffersb=newStringBuffer();//定义一个字符串缓冲区 sb.append("hellochongqing");//在末尾添加字符串 System.out.println("append的添加结果:"+sb); sb.insert(2,"666"); System.out.println("insert的添加结果"+sb); } publicstaticvoidremove(){ StringBuffersb=newStringBuffer("hellochongqing"); sb.delete(0,5);//指定范围删除 System.out.println("删除指定位置的结果:"+sb); sb.deleteCharAt(2);//删除指定位置 System.out.println("删除指定位置结果"+sb); sb.delete(0,sb.length());//清空缓冲区 System.out.println("清空缓冲区结果:"+sb); } publicstaticvoidalter(){ StringBuffersb=newStringBuffer("hellochongqing"); sb.setCharAt(0,'H');//修改指定位置的字符 System.out.println("修改指定位置的结果:"+sb); sb.replace(1,3,"EL");//替换指定位置字符串或字符 System.out.println("替换指定位置字符串或字符的结果:"+sb); System.out.println("字符串反转结果:"+sb.reverse()); }}5.2.1一维数组

数组是由若干相同类型的元素组成的对象。数组可以表示范围很广的对象,比如班级的学生成绩表可以表示成由若干个确定的学生成绩单组成的数组。数组的每个元素的数据类型相同,元素个数固定,元素按顺序存放,每个元素对应一个下标,各元素按下标存取引用。数组元素的存储顺序与其下标对应。一维数组的定义格式

数组元素类型数组名[];或者

数组元素类型[]数组名;

比如int[]array;和intarray[];这两种声明方式在Java中都是合法的。

上面例子仅仅是声明了一个引用,声明数组时方括号里面不能指定长度,仅仅是给出了数组名字和数组元素的类型而已。要想使用数组,声明之后还必须为其分配内存空间同时指明数组长度,即创建数组。一维数组的创建格式

数组名=new数组元素的类型[数组元素的个数];

例如,array=newint[5];这句代码意思是创建了包括5个整型变量的数组,并把它赋给引用array,然后可

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论