第三章
Java技术编程入门
学习目标:
?掌握编译和运行基本 Java程序的步

?熟练使用各种数据类型的定义、表
示和引用
新术语
? 在 Java技术中:
? 变量 =属性
? 方法 =操作
? 类仍然称作类
? 所谓类就是一类 属性(变量) 和 操作(方
法) 的描述。其中,属性可用一系列的 变
量 表达,而操作用一系列 方法 表示 。
? 一类人员 Person:
– 抽象出下列属性:名字、年龄、身高、婚否、
性别,分别用变量 name,age,height、
marriage,sex表示 (见名知义),
– 吃饭,讲话,走路等行为可表示为相应的方法
eat(), speak(), walk()等。
用 Java语言描述
Person类如下:
class Person
{ //以下 5个是变量
String name;
int age;
double height;
boolean marriage;
char sex;
speak (…) //方法
{

}
eat (…) //方法
{

}
}
对 Person类中某一特定的人,
上述 变量就有 特定的值, 如
name( 张三 ), age( 20),
height ( 1.76 ), marriage
( false), sex( ’ m’) 。
主要的应用程序组件
? 类代码块 是程序的主要结构
? 变量 是程序执行所使用的数据
? 方法 代码块是用于程序操作的
结构
? 使用大括号 {和 }来定义代码块
? 在操作的结尾使用分号
查看结果,Shirt.java
javac Hello.java D:\Lesson3 >
java HelloD:\Lesson3 >
Hello,Java World!
编译、运行应用程序
Application:
Debugging调试
? 检查错误消息中指出的行
? 检查分号
? 检查大括号数是否为偶数
使用基本数据类型将数据存储在变量中
? 基本类型包括:
? 整型 ——byte,short,int和 long
? 浮点型 —— float和 double
? 字符型 —— char
? 逻辑型 ——boolean
基本数据类型
数据类型名 占用内存空间 数值范围 缺省值 说明
byte 1字节 (-128)~ 127 0


short 2字节 (-32768)~ 32767 0
int 4字节 (-2147483648)~ 2147483647 0
long 8字节 (-9223372036854775808)~ 9223372036854775807 0
float 4字节 0.0F 浮

型double 8字节 0.0D
char 2字节 字符型
boolean —— true或 false false 布尔型
类型 长度 范围
byte 8bit -27~27-1( -128~127)
short 16bit -215~215-1( -32768~32767)
int 32bit -231~231-1 (-2147483648~ 2147483647)
long 64bit -263~263-1 (-9 223 372 036 854 775 808~ 9 223 372 036 854 775 807)
?存储没有小数部分的数据类型
Java各整数类型有固定的表数范围和字段长度,
而不受具体操作系统的影响,以保证 Java程序
的可移植性
1、整型
数值 20在内存中的存储形式
00010100 byte( 1字节)
00000000 00010100 short ( 2字节)高位置 0
00000000 00000000 00000000 00010100 int ( 4字节)
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00010100 Long ( 8字节)
2、浮点型
? 浮点型是带有小数部分的数据类型,包括两种不同的
数据类型,float和 double。
? float类型的变量占用 4个字节( 32位),
? double类型的数据则需要 8个字节( 64位)内存。
在许多程序中,就其表示的数值范围而言,使用 float类
型来存储浮点数已经足够了。
? 浮点数据有两种表示形式
– 十进制数形式,必须含有小数点,例如,
3.14 314.0,314
– 科学记数法形式,如
3.14e2 3.14E-12
? Java浮点数据默认为 double型,如要声明一个
常量为 float型,则需在数字后面加 f或 F,如:
? double d = 3.14;
? float f = 3.14f;
3、布尔型( boolean)
? 布尔数据类型用于表达两个逻辑状态之一的
值,true(真)或 false(假)。
? 布尔型数据只有两个值 true和 false,且它们
不对应于任何整数值。
? 布尔型变量的定义如:
boolean b=true;
4、字符型 (char)
? 字符型数据类型用于存放 单个字符,每个字符占用 2个
字节( 16位)的存储空间。
? 将一个字符放到一个字符变量中,实际上并不是把该
字符本身放到内存单元中去,而是将该字符的相应的
Unicode代码 放到存储单元中。
char c1=‘t’;
char c2=‘3’;
? char基于 Unicode编码,\u前缀标志着这是一个
Unicode值
例如,\u0061代表字符’ a?。
标识符
Java保留字 ( 又称 关键字 )
? 关键字不能作为标识符;
关键字是 具有专门的意义和用途,不能当作一般的标识符使用,这些标识符称
为保留字 (reserved word),下面列出了 java语言中的所有保留字:
abstract do implements protected throws
boolean double import public transient
break else instanceof return true this throw
byte extends int short try synchronized
case false interface static void continue
catch final long strictpf volatile goto default
char finally native super while package
class float new switch const for null if private
? java中的关键字均用小写字母表示 。
? 合法的标识符
identifier userName User_Name_sysval
$change A98_23 _abc
? 非法的标识符
2mail room# class A- 4
3_1 >the
变量 (属性)
变量是用来存放指定类型的数据,其值在程序 运行 过程中是
可变的。
在使用 Java中的每个变量之前,都必须对它进行声明。
变量的声明形式如下:
类型 变量名 ;
变量声明包括指明 变量的数据类型、变量名和作用域
其中 数据类型 说明了这个变量能存放什么样的数据。 变量
名 是用来标识该变量的,我们存取变量的内容(变量的值)都
是通过 变量名 来实现的。
变量名
? 在 Java中用标识符来表示变量名。象 Person这个类,我们使用了 name、
age,tall,marriage,sex这几个标识符,分别定义了五个变量。
? 程序员应该为变量取有意义的名称,以利于程序的阅读和理解。 (见名
知义)
? 但变量取名时还有一些限制:
– 变量名由字母、数字、下划线或美元符,$”组成的
– 变量名不能以数字作为第一个字符
– 区分大小写
? 下面是合法的变量名:
Month(不同于 month), student_name,class1,dollar$,$abc
? 而下面的变量名都不合法:
3a46,a>b,abc-d,#ef.
变量名
? 变量名中字母大写和小写是有区别的,
name和 Name表示两个不同的变量名。
? Java中约定,变量名以小写字母开头,
若一个变量名由超过一个单词所组成,则
第一个单词之后的所有单词都以大写字母
开头,以便于理解该变量名。
? 例如,anIntVar表示一个整型变量。
变量的初始化
赋予变量一个初值,称为变量的初始化。可在定义
变量的同时进行变量的初始化,如:
int anIntVar=1;
char aCharVar=?A?;
float aFloatVar=1.23f;
boolean aBooleanVar=true;
也可定义变量后再单独初始化,如:
int anIntVar;
char aCharVar;
float aFloatVar;
boolean aBooleanVar;
anIntVar=1;
aCharVar =?A?;
aFloatVar=1.23f;
aBooleanVar=true;
两种方法都完成了定义变量,anIntVar,aCharVar、
aFloatVar,aBooleanVar,并分别给它们赋初值:
1、’ A?,1.23,true。
变量的作用域
? 变量的作用域:变量的使用范围。
? 假定在某代码段中能够使用一特定变量,
则此段代码即是该变量的作用域。
?在类中声明的类成员变量,可在该
类的各个成员方法中使用;
?在某个方法体中或参数表中声明的
变量,只能在该方法体中使用;
?在某个语句块中声明的变量,只能
在该语句块中使用。
变量的作用域
public class VariableLifeTime
{
public static void main(String[] args)
{
int sum=0;
int A=10;
for(int x=1;x<=5;x++)
{
int y=0;
y=y+A;
sum=sum+y;
System.out.print("x="+x);
System.out.print("y="+y);
System.out.println("sum="+sum);
}
System.out.println("sum="+sum);
}
}
查看结果,VariableLifeTime,java
class Person
{//以下 5个成员变量
String name;
int age;
double tall;
boolean marriage;
char sex; //以下 2个方法
eat(String eatwhat){
System.out.println(name+” ate up the
“+eatwhat);
}
}
Speak(String saywhat,int time){
int i;
for(i=0;i<time;i++)
System.out.println(name+” say:”+saywhat);
}
变量 name、
age,tall、
marriage、
sex的作用

变量 i的
作用域
下图为变量作用域的示意图, 由左图可以看出,变量 name、age,tall,marriage,sex和
变量 i的作用域是不同的。变
量 name,age,tall、
marriage、和 sex的作用域是
整个类,在类的方法中也可使
用它们。
这种变量称之为 成员变量 。确
切地讲,成员变量是在类当中、
但不是在其类的方法中定义的
变量。
而变量 i是定义在 speak方法中,
它的作用域仅限于 speak方法
中。这类定义在某方法中的变
量叫做 局部变量 。
注意,同一作用域中不可有同
名的变量。如上面的代码在
speak方法中不能再定义一个
名字为 i的变量 。
常量
常量是指在程序运行过程中其值不变的量。
定义常量的方法有两种:
( 1)在定义变量的类型前面加 final关键字,
并同时进行初始化,如下所示:
final int aFinalVar=0;
final double PI=3.14159;
( 2)在定义变量的类型前面加 final关键字,
不进行初始化。通过另外的语句进行赋值。如
下所示:
final int aFinalVar;

aFinalVar=0;
常量和变量
常量与变量之间最根本的区别是:常量在经过定义并给它一
个值之后,不能再对它进行修改。而变量则无此限制。
对于常量 a,进行如下的操作是错误的:
final int a=1;
….
a=2;
而对于变量 a,如下这段代码则是正确的。
int a=1;

a=2;
示例:
public class Assign {
public static void main (String [ ] args)
{
int x;
int y; //定义 x,y两个整型变量
float z = 1.234f ; //指定变量 z为 float型,且赋初值为 1.234
double w = 1.234 ; //指定变量 w为 double型,且赋初值
为 1.234
boolean flag = true ; //指定变量 flag为 boolean型,且赋
初值为 true
char c ; //定义字符型变量 c
String str ; //定义字符串变量 str
String str1 = " Hi " ; //指定变量 str1为 String型,且赋初
值为 Hi
c = ' A ' ; //给字符型变量 c赋值 'A'
str = " bye " ; //给字符串变量 str赋值 "bye"
x = 12 ; //给整型变量 x赋值为 12
y = x; //给整型变量 y赋值为 12
}
}
?Java区分大小写
?类定义不能嵌套
?一个程序中可以有一个或多个类,
但其中只能有一个 public类
?源程序编写完毕,应该以主类名作
为文件名,再加后缀,java存储
编写 Java程序需要注意的几点
在 Java中嵌套的程序块的内层和外
层,不允许定义相同的变量名,否
则将导致编译错误。
public class ScopeError
{
public static void main(String[] args)
{
int E=999;
{
int E=999;
System.out.println(―E="+E);
}
}
}
变量类型转换
? 短类型 ?长 类型:默认
? 长类型 ?短类型,强制
? 例,int a ;
? long b ;
? b = a ;
? a = ( int ) b ;
不同类型数据间的优先关系如下:
低 ------------------------------------------->高
byte,short,char-> int -> long -> float -> double
? 高级数据类型要转换成低级数据类型,需要用到强制类型转换。
其一般形式为:
( 类型名 )( 表达式 )
? 如:
– int i;
– byte b;
– i = 356;
– b =( byte) i;
? // 强制转换后丢失一部分数据,使得 b的值为 100。
一般使用强制类型转换可能会导致数值溢出或精度的下降,应尽量
避免。
习题
1,判断下面标识符, 哪些是合法的标识符? 哪些
是不合法的标识符?
myName,2mail,room#,value-1,dollar
$, class
2,请指出下面数值的类型:
( 1) 178 ( 2) 8876L ( 3) 37.266D
( 4) 37.266D (5) 87.363F (6) 26.77E3
(7) ?c? (8)true