Java基础就业培训教程第二章张孝祥.docx

上传人:b****2 文档编号:2904811 上传时间:2023-05-05 格式:DOCX 页数:62 大小:536.71KB
下载 相关 举报
Java基础就业培训教程第二章张孝祥.docx_第1页
第1页 / 共62页
Java基础就业培训教程第二章张孝祥.docx_第2页
第2页 / 共62页
Java基础就业培训教程第二章张孝祥.docx_第3页
第3页 / 共62页
Java基础就业培训教程第二章张孝祥.docx_第4页
第4页 / 共62页
Java基础就业培训教程第二章张孝祥.docx_第5页
第5页 / 共62页
Java基础就业培训教程第二章张孝祥.docx_第6页
第6页 / 共62页
Java基础就业培训教程第二章张孝祥.docx_第7页
第7页 / 共62页
Java基础就业培训教程第二章张孝祥.docx_第8页
第8页 / 共62页
Java基础就业培训教程第二章张孝祥.docx_第9页
第9页 / 共62页
Java基础就业培训教程第二章张孝祥.docx_第10页
第10页 / 共62页
Java基础就业培训教程第二章张孝祥.docx_第11页
第11页 / 共62页
Java基础就业培训教程第二章张孝祥.docx_第12页
第12页 / 共62页
Java基础就业培训教程第二章张孝祥.docx_第13页
第13页 / 共62页
Java基础就业培训教程第二章张孝祥.docx_第14页
第14页 / 共62页
Java基础就业培训教程第二章张孝祥.docx_第15页
第15页 / 共62页
Java基础就业培训教程第二章张孝祥.docx_第16页
第16页 / 共62页
Java基础就业培训教程第二章张孝祥.docx_第17页
第17页 / 共62页
Java基础就业培训教程第二章张孝祥.docx_第18页
第18页 / 共62页
Java基础就业培训教程第二章张孝祥.docx_第19页
第19页 / 共62页
Java基础就业培训教程第二章张孝祥.docx_第20页
第20页 / 共62页
亲,该文档总共62页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Java基础就业培训教程第二章张孝祥.docx

《Java基础就业培训教程第二章张孝祥.docx》由会员分享,可在线阅读,更多相关《Java基础就业培训教程第二章张孝祥.docx(62页珍藏版)》请在冰点文库上搜索。

Java基础就业培训教程第二章张孝祥.docx

Java基础就业培训教程第二章张孝祥

第2章Java编程基础

2.1Java基本语法格式

2.1.1Java代码的落脚点

Java中的所有程序代码都必须存在于一个类中,用class关键字定义类,在class前面可以有一些修饰符。

格式如下:

修饰符class类名

{

程序代码

}

2.1.2Java是严格区分大小写的

例如,我们不能将class写成Class。

2.1.3Java是一种自由格式的语言

在Java中,所有的程序代码分为结构定义语句和功能执行语句,一条语句可以写在若干行上,功能执行语句的最后必须用分号(;)结束,不必要对齐或缩进一致。

可以按自己的意愿任意编排,只要每个词之间用空格、制表符、换行符或大括号、小括号这样的分隔符隔开就行。

例如第一章的例子程序改成下面这种编排方式也是可以的:

classTest{publicstaticvoidmain(String[

]args){System.out.println(“Myfirstjavaprogram”);}}

用哪种代码书写的格式因个人爱好而定,但出于可读性的考虑不建议使用这种格式。

M脚下留心:

1.Java程序中一句连续的字符串不能分开在两行中写,以上程序如果写成下面这种方式是会编译出错的:

classTest{publicstaticvoidmain(String[

]args){System.out.println(“Myfirstjava

program”);}}

2.功能执行语句的最后必须用分号(;)结束,但中国的初学者常将这个英文的(;)误写成中文的(;)自己却找不出错误的原因来,对于这样的情况,编译器通常会报告“illegalcharacter”(非法字符)这样的错误信息。

2.1.4Java程序的注释

为程序添加注释可以提高程序的可读性,它是写在程序里的信息,用来说明某段程序的作用和功能。

Java里的注释根据不同的用途分为三种类型:

●单行注释

●多行注释

●文档注释

第一种是单行注释,就是在注释内容前面加双斜线(//),java编译器会忽略掉这部分信息。

如下例:

intc=10;//定义一个整型

第二种是多行注释,就是在注释内容前面以单斜线加一个星形标记(/*)开头,并在注释内容末尾以一个星形标记加单斜线(*/)结束。

当注释内容超过一行时一般使用这种方法,如:

/*intc=10;//定义一个整型

intx=5;*/

第三种注释方法是文档注释,是以单斜线加两个星形标记(/**)开头,并以一个星形标记加单斜线(*/)结束。

用这种方法注释的内容会被解释成程序的正式文档,并能被包含在诸如javadoc之类的工具程序提取的文档里,用以说明该程序的层次结构及其方法。

关于这种注释的详细用法,我们会在后面的章节中讲解。

M脚下留心:

/*……*/中可以嵌套“//”注释,但不能嵌套“/**/”,如:

下面的注释是非法的:

/*

/*intc=10;*/

intx=5;

*/

☞不得不说:

我们要从开始就养成良好的编程风格,软件编码规范中说:

“可读性第一,效率第二”。

在程序中必须包含适量的注释,以提高程序的可读性和易于维护性,程序注释一般占程序代码总量的20%-50%。

2.1.5Java中的标识符

Java中的包、类、方法、参数和变量的名字,可由任意顺序的大小写字母、数字、下划线(_)和美元符号($)组成,但标识符不能以数字开头,不能是关键字。

下面是合法的标识符:

indentifier,

username

user_name

_userName

$username

下面是非法的标识符:

class

98.3

HelloWorld

正确的路有一条,错误的路千万条,何苦要去记住有哪些错误的路呢?

永远用字母开头,尽量不要包含其他的符号就行了。

2.1.6Java的关键字

和其他语言一样,Java中也有许多保留关键字,如public,break等,这些保留关键字不能被当作标识符使用。

其实大家不用死记硬背到底有哪些关键字,知道有这回事就足够了,万一不小心把某个关键字用作标识符了,编译器就能告诉我们这个错误。

下面是Java的关键字列表,大家就留个初步的印象吧!

abstractbooleanbreakbytecasecatchchar

classcontinuedefaultdodoubleelseextend

falsefinalfinallyfloatforifimplement

importinstanceofintinterfacelongnativenew

nullpackageprivateprotectedpublicreturnshort

staticstrictfpsuperswitchthisthrowthrows

transienttruetryvoidvolatilewhilesynchronized

注意:

Java没有sizeof、goto、const这些关键字,但不能用goto、const作为变量名。

2.1.7Java中的常量

常量就是程序里持续不变的值(有的书中称其为字面量或实字),Java中的常量包含整型常量,浮点数常量,布尔常量等,下面我们来看一下它们是如何表示的:

整型常量

整型常量可以分为十进制,十六进制和八进制来表示:

十进制:

0123456789

注意:

以十进制表示时,第一位不能是0(数字0除外)。

十六进制:

0123456789abcdefABCDEF

注意:

以十六进制表示时,需以0x或0X开头,如:

0x8a0Xff0X9A0x12

八进制:

01234567

注意:

八进制必须以0开头。

如:

0123045098046

长整型:

长整型必须以L做结尾,如:

9L156L

浮点数常量:

浮点数常量有float(32位)和double(64位)两种类型,分别叫做单精度浮点数和双精度浮点数,表示浮点数时,要在后面加上f(F)或者d(D),用指数表示也可以。

注意:

由于小数常量的默认类型为double型,所以float类型的后面一定要加f(F),用以区分。

如:

2e3f3.6d

.4f0f

3.84d5.022e+23f

都是合法的。

布尔常量:

布尔常量用于区分一个事物的正反两面,不是真就是假。

其值只有两种:

true和false。

字符常量:

字符常量是由英文字母、数字、转义序列、特殊字符等的字符所表示,它的值就是字符本身,如:

'a''8''\t''\u0027'

字符常量要用两个单引号括起来,Java中的字符占用两个字节,是用unicode码表示的,我们也可以使用unicode码值加上\u来表示对应的字符。

字符串常量:

字符串常量和字符型常量的区别就是:

前者是用双引号括起来的常量,用于表示一连串的字符。

而后者是用单引号括起来的,用于表示单个字符。

下面是一些字符串常量:

"HelloWorld""123""Welcome\nXXX"

&多学两招:

有些时候,我们在无法直接往程序里面写一些特殊的按键,比如你想打印出一句带引号的字符串,或者判断用户的输入是不是一个回车键,等等。

其实它们都可以用一些转义字符来表示,以下一些特殊字符的意义,供参考:

\r表示接受键盘输入,相当于按下了回车键;

\n表示换行;

\t表示制表符,相当于table键;

\b表示退格键,相当于BackSpace;

\'表示单引号,\"是双引号;

\\表示一个斜杠“\”。

比如上面的"Welcome\nXXX",它的运行结果是:

Welcome

XXX

null常量:

null常量只有一个值,用null表示,表示对象的引用为空。

2.2变量及变量的作用域

2.2.1变量的概念

变量就是系统为程序分配的一块内存单元,用来存储各种类型的数据。

根据所存储的数据类型的不同,有各种不同类型的变量。

用一个变量定义一块内存以后,程序就可以用变量名代表这块内存中的数据。

我们来看一下:

intx=0,y;

y=x+3;

第一句代码分配了两块内存用于存储整数,分别用x,y作为这两块内存的变量名,并将x标识的内存中的数据置为0,y标识的内存中的数据为其原始状态,可以认为是一个未知数。

第二句代码的执行过程,程序首先取出x代表的那块内存单元的数,加上3,然后把结果放到y所在的那块内存单元,这样就完成了y=x+3的运算。

2.2.2Java的变量类型

在Java中内建有八种基本变量类型来存储整数、浮点数、字符和布尔值。

其中引用数据类型会在以后章节详细讲解,这里只讲基本数据类型。

与其他编程语言不同的是,Java的基本数据类型在任何操作系统中都具有相同的大小和属性,不像C语言,在不同的系统中变量的取值范围不一样,在所有系统中,Java变量的取值都是一样的,如表2.1。

这也是Java跨平台的一个特性。

有四种数据类型用来存储整数,它们具有不同的取值范围,分别如表2.1所示:

类型名大小取值范围

byte8位-128~127

short16位-32768~32767

int32位-2147483648~2147483647

long64位-9223372036854775808~9223372036854775807

表2.1

这些类型都是有符号的,所有整数变量都无法可靠地存储其取值范围以外的数据值,因此定义数据类型时一定要谨慎。

有两种数据类型用来存储浮点数,它们是单精度浮点型(float)和双精度浮点型(double)。

浮点数在计算机内存中的表示方式比较复杂,我们在后面的课程为大家进行分析,单精度浮点型和双精度浮点型的取值范围见表2.2:

类型名大小取值范围

float32位1.4E-45~3.4E+38,-1.4E-45~-3.4E+38

double64位4.9E-324~1.7E+308,-4.9E-324~-1.7E+308

表2.2

char类型用来存储诸如字母、数字、标点符号及其他符号之类的单一字符。

与C语言不同,Java的字符占两个字节,是unicode编码的。

$独家见解:

计算机里只有数值,当你在内存中看到一个数值时,这个数值可能代表各种意义,比如你看到的文字、图像和听到的声音等都是使用数字形式来表示的。

生活中的数值也可以代表其他意义,如1234可以代表密码,存款额,电报信息等。

根据上下线索,我们能够知道这些数值代表的意义。

其实,字符也是一个数字,当我们要给一个字符变量赋值时,就可以直接用整数,如:

97对应字符'a',我们使用charch=97将字符'a'赋值给变量ch。

98对应的是字符'b',当在内存里面躺着一个99时,请问,它对应键盘上的哪个字母呢?

大家都能够猜出就是字符'c'。

如果我们要将字符'x'赋给一个char变量,该填一个怎样的整数呢?

显然,我们不太容易记住每个字符所对应的数字,所以,我们就用单引号加上这个字符本身来表示那个字符对应的数字,如charch='x'。

boolean类型用来存储布尔值,在Java里布尔值只有两个,要么是true,要么就是false。

Java里的这八种基本类型都是小写的,有一些与它们同名但大小写不同的类,例如Boolean等,它们在Java里具有不同的功能,切记不要互换使用。

2.2.3注意变量的有效取值范围

系统为不同的变量类型分配不同的空间大小,如double型常量在内存中占八个字节,float的变量占四个字节,byte型占一个字节等,如图2.1所示:

图2.1

byteb=129;//编译报错,因为129超出了byte类型的取值范围。

floatf=3.5;//编译报错,因为小数常量的默认类型为double型。

double型常量在内存中占八个字节,而Java只为float的变量分配四个字节的空间,要将八个字节的内容装入四个字节的容器,显然有问题。

改为:

floatf=3.5f;

编译就可以通过了,因为3.5f是一个float型常数,在内存中只占4个字节。

2.2.4基本数据类型之间的转换

在编写程序过程中,我们经常会遇到的一种情况,就是需要将一种数据类型的值赋给另一种不同数据类型的变量,由于数据类型有差异,在赋值时就需要进行数据类型的转换,这里就涉及到两个关于数据转换的概念:

自动类型转换和强制类型转换。

◆自动类型转换(也叫隐式类型转换)

要实现自动类型转换,需要同时满足两个条件,第一是两种类型彼此兼容,第二是目标类型的取值范围要大于源类型。

例如,当byte型向int型转换时,由于int型取值范围大于byte型,就会发生自动转换。

所有的数字类型,包括整型和浮点型彼此都可以进行这样的转换。

请看下面的例子:

byteb=3;

intx=b;//没有问题,程序把b的结果自动转换成了int型了

◆强制类型转换(也叫显式类型转换)

当两种类型彼此不兼容,或目标类型取值范围小于源类型时,自动转换无法进行,这时就需要进行强制类型转换。

强制类型转换的通用格式如下:

目标类型变量=(目标类型)值

例如:

bytea;

intb;

a=(byte)b;

这段代码的含义就是先将int型的变量b的取值强制转换成byte型,再将该值赋给变量a,注意,变量b本身的数据类型并没有改变。

由于这类转换中,源类型的值可能大于目标类型,因此强制类型转换可能会造成你的数值不准确,从下面的图中就可以看出强制类型转换时数据传递的过程。

图2.2

请看下面的程序:

程序清单:

Conversion.java

publicclassConversion

{

publicstaticvoidmain(String[]args)

{

byteb;

inti=266;

b=(byte)i;

System.out.println("bytetointis"+""+b);

}

}

程序输出入下:

bytetointis10

字符串可以使用加号(+)同其他的数据类型相连而形成一个新的字符串,读者只要明白二进制与十进制数之间的转换关系,就不难明白上面程序打印的结果了。

$独家见解:

要理解类型转换,大家可以这么想像,大脑前面是一片内存,源和目标分别是两个大小不同的内存块(由变量及数据的类型来决定),将源数据赋值给目标内存的过程,就是用目标内存块去套取源内存中的数据,能套多少算多少。

2.2.5表达式的数据类型自动提升

我们先看下面一个错误程序:

程序清单:

Test.java

classTest

{

publicstaticvoidmain(String[]args)

{

byteb=5;

b=(b-2);

System.out.println(b);

}

}

这段代码中,5-2的值并未超出byte型取值范围,然而当执行这段代码时,Java报出如下错误:

Test.java:

6:

possiblelossofprecision

found:

int

required:

byte

b=(b-2);

^

1error

这是因为在表达式求值时,变量值被自动提升为int型,表达式的结果也就成了int型,这时要想把它赋给byte型变量就必须强制转换了。

因此前面代码中粗体的部分就应该改成:

b=(byte)(b-2);

这种特殊情况在编程过程中如果遇到了,只要知道怎么解决就可以了。

关于类型的自动提升,Java定义了若干适用于表达式的类型提升规则。

第一,所有的byte型、short型和char的值将被提升到int型。

第二,如果一个操作数是long型,计算结果就是long型;

第三,如果一个操作数是float型,计算结果就是float型;

第四,如果一个操作数是double型,计算结果就是double型。

以下代码演示了Java的类型自动提升规则:

程序清单:

Promote.java

classPromote

{

publicstaticvoidmain(Stringargs[])

{

byteb=50;

charc='a';

shorts=1024;

inti=50000;

floatf=5.67f;

doubled=.1234;

doubleresult=(f*b)+(i/c)-(d*s);

System.out.println((f*b)+"+"+(i/c)+"-"+(d*s));

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

}

}

我们看看在下列代码行的类型提升:

doubleresult=(f*b)+(i/c)-(d*s);

在第一个子表达式f*b中,变量b被提升为float类型,该子表达式的结果也提升为float类型。

接下来,在子表达式i/c中,变量c被提升为int类型,该子表达式的结果提升为int类型。

然后,子表达式d*s中的变量s被提升为double类型,该子表达式的结果提升为double类型。

最后,这三个结果值类型分别是float类型,int类型,和double类型。

float类型加int类型的结果是float类型。

然后float类型减去double类型,该表达式的最后结果就是double类型。

&多学两招:

System.out.println()除了可以在屏幕上打印字符串外,还可以直接在屏幕上打印其他类型的数据,读者再想想System.out.println('a'+1)在屏幕上的打印结果与System.out.println(""+'a'+1)在屏幕上的打印结果有什么不同呢?

前者将字符'a'与整数1相加后得到的结果是整数98,后者将一个空字符串与字符'a'相连后再与整数1相连形成一个新的字符串“a1”。

2.2.6变量的作用域

大多数程序设计语言都提供了“变量作用域”(Scope)的概念。

在C、C++和Java里,一对花括号中间的部分就是一个代码块,代码块决定其中定义的变量的作用域。

代码块由若干语句组成,必须用大括号包起来形成一个复合语句,多个复合语句可以嵌套在另外的一对大括号中形成更复杂的复合语句。

如:

{

intx=0;

inty=0;

y=y+1;

x=x+1;

}

代码块决定了变量的作用域,作用域决定了变量的“可见性”以及“存在时间”。

参考下面这个例子:

程序清单:

TestScope.java

publicclassTestScope

{

publicstaticvoidmain(String[]args)

{

intx=12;

{

intq=96;//x和q都可用

System.out.println("xis"+x);

System.out.println("qis"+q);

}

q=x;/*错误的行,只有x可用,q超出了作用域范围*/

System.out.println("xis"+x);

}

q作为在里层的代码块中定义的一个变量,只有在那个代码块中位于这个变量定义之后的语句,才可使用这个变量,q=x语句已经超过了q的作用域,所以编译无法通过。

记住这样的一个道理,在定义变量的语句所属于的那层大括号之间,就是这个变量的有效作用范围,但不能违背变量先定义后使用的原则。

M脚下留心:

下面这样书写的代码在C和C++里是合法的:

{

intx=12;

{

intx=96;

x=x+4;//x运算后的结果为100

}

x=x-5;//x运算后的结果为7,而不是95。

}

在C和C++里面,上面的两个x相当于定义了两个变量,第二层大括号里面的代码对x的操作,都是对第二个x的操作,不会影响到第一个x。

第一层大括号里面的代码对x的操作,都是对第一个x的操作,跟第二个x没有任何关系。

但这种做法在Java里是不允许的,因为Java的设计者认为这样做使程序产生了混淆,编译器会认为变量x已在第一层大括号中被定义,不能在第二层大括号被重复定义。

2.2.7局部变量的初始化

在一个函数或函数里面的代码块中定义的变量称为局部变量,局部变量在函数或代码块被执行时被创建,在函数或代码块结束时被销毁。

局部变量在进行取值操作前必须被初始化或进行过赋值操作,否则会出现编译错误,如下面的代码:

程序清单:

TestVar.java

publicclassTestVar

{

publicstaticvoidmain(String[]args)

{

intx;//应改为intx=0;

x=x+1;//这个x由于没有初始化,编译会报错。

System.out.println("xis"+x);

}

}

2.3函数与函数的重载

2.3.1函数

假设我们有一个游戏程序,在程序运行过程中,我们要不断地发射炮弹。

发射炮弹的动作都需要使用一段百行左右的程序代码,我们在每次发射炮弹的地方都要重复加入这一段百行程序代码,程序会变得非常臃肿,程序的可读性也就非常差。

假如我们要修改发射炮弹的程序代码,需要修改每个发射炮弹的地方,很可能就会发生遗漏。

几乎所有的编程语言中都要碰到这个问题,各种编程语言都将发射炮弹的程序代码从原来的主程序中单独拿出来,做成一个子程序,并为这个子程序安排一个名称,在主程序中需要使用到子程序的功能的每个地方,只要写上子程序的名称就行了,计算机便会去执行子程序中的程序代码,当子程序中的代码执行完后,计算机又会回到主程序中接着往下执行。

在Java中,我们将这种子程序叫函数。

我们来写一个程序来说明函数的作用与编写方式,程序在窗口上打印出3个由*组成的矩形,如下图所示。

图2.3

我们可以用下面的程序来实现:

程序清单:

Func1.java

publicclassFunc1

{

publicstaticvoidmain(String[]args)

{

//下面是打印出第一个矩形的程序代码

for(inti=0;i<3;i++)

{

for(intj=0;j<5;j++)

{

System.out.print("*");

}

System.out.println();//换行

}

System.out.println();

//下面是打印出第二个矩形的程序代码

for(inti=0;i<2;i++)

{

for(intj=0;j<4;j++)

{

System.out.print("*");

}

System.out.println();

}

System.out.println();

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2