• 1. Java基础学习 付佳兴 fujx1@ufida.com.cn 2010年 07月 21 日
  • 2. Java语言基础 1. 掌握Java中标识符的命名规则; 2. 熟练应用Java的基本数据类型; 3. 掌握Java中的运算符、表达式的运算规则; 4. 养成做注释的良好习惯,并熟练进行Java注释; 5. 熟练运用选择结构和循环结构进行程序设计。
  • 3. 1.1 标识符和关键字 标识符 ☆标识符用来标志包名、类名、对象名、方法名、变量名、类型名、数组名、文件名有效字符序列称为标识符。通俗地说,标识符就是一个名字。 ☆ Java语言规定:标识符由任意多个字母、下划线(_)、美元符号($)和阿拉伯数字组成,并且第一个字符不能是数字。其中的字母包括汉字或其他国家(日本、朝鲜、希腊、罗马等)的文字,下列都是合法的标识符: getMyName4 _yourAge $123moon T3ty
  • 4. 关键字abstractassert***booleanbreakbytecasecatchcharclassconst*continuedefaultdodoubleelseenum****extendsfinalfinallyfloatforgoto*ifimplementsimportinstanceofintinterfacelongnativenewpackageprivateprotectedpublicreturnshortstaticstrictfp**superswitchsynchronizedthisthrowthrowstransienttryvoidvolatilewhile
  • 5. 标识符命名规则 1.每个名字可以由几个单词连接而成。 2.对于类名,每个单词的开头字母应该大写。例如:YourName。 3.对于方法名和变量名,类似类名的命名规则,但是,第一个字母不用大写,例如: 方法:yourMethod() 变量:yourVariable 4.常量应该用全部大写的标识符。例如: YOURCONST。 5.包名应该全部用小写。例如:yourpackage。
  • 6. 1.2 基本数据类型整数类型(int、short、long、byte) 整数类型的有关指标类型占用存储空间取值范围int4字节-2147483648~2147483647(即-231~231-1)short2字节-32768~32767(即-215~215-1)long8字节-9223372036854775808L~9223372036854775807L(即-263~263-1)byte1字节-128到127(即-27~27-1)
  • 7. 浮点数类型(float、double) 浮点类型的有关指标类型存储空间大小取值范围float4字节-1.4×10-45~3.4028235×1038double8字节-4.9×10-324~1.7976931348623157×10308
  • 8. 布尔类型(boolean)布尔类型(boolean)只有两个取值:true和false。 字符类型(char) Java使用Unicode格式表示字符。Unicode格式使用双字节编码,能够表示65536个字符,几乎可以表示世界上所有的语言文字的字符。
  • 9. 1.3 常量和变量 常量 1.整型常量 2.浮点常量 3.字符常量 4.字符串常量 5.布尔常量
  • 10. 变量 在Java编程语言中,对于变量名有下面的必须满足以下条件: 1.它必须是一个合法的标识符;  2.它必须不是一个关键字、布尔型字符(true或者false)或者保留字NULL; 3.在使用中变量名中的字符是区分大小的。 任何变量在使用之前都需要声明。变量的声明、赋值和初始化的格式是: 变量类型 变量名1[=变量值1[,变量名2[=变量值2]……];
  • 11. 1.4 运算符与表达式1.赋值运算符和语句 2.算术运算符和算术表达式 3.关系运算符和关系表达式 4.逻辑运算符和逻辑表达式 5.位运算符 6.条件赋值运算符 7.广义赋值运算符 8.对象运算符 9.括号与方括号运算符
  • 12. 运算符优先级及其结合性运算符结合性优先级()、[]从左到右 高 低++、--、!、~(按位反)、instanceof从右到左*、/、%从左到右+、-从左到右<<、>>、>>>从左到右<、>、<=、>=从左到右==、!=从左到右&(按位与)从左到右^(按位异或)从左到右|(按位或)从左到右&&、&(逻辑与)从左到右||、|(逻辑或)从左到右?:从右到左=从右到左
  • 13. 1.5 程序中的注释在Java程序中,允许使用以下三种注释方式: 1.单行注释符(//)。它以//开头,后面跟随注释内容,直至该行末。 2.多行注释符(/* */)。它以/*开头,以*/结束,中间可以有0至任意多行内容作为注释。 3.文档注释符(/** */)。为便于建立Web页面的HTML文档,使用以/**开头,以*/结束的注释。
  • 14. 1.6 类型转换 自动转换 Java自动转换规则操作数1类型操作数2类型结果数类型byte或short或charintintbyte或short或intlonglongbyte或short或int或longfloatfloatbyte或short或int或long或floatdoubledouble强制转换 (数据类型)变量名或表达式;
  • 15. 1.7 流程控制 选择语句 语法格式3 if (条件表达式1) 语句或语句序列1; else if (条件表达式2) 语句或语句序列2; …… else 语句或语句序列n;
  • 16. 循环语句 for语法格式 for(表达式1;表达式2;表达式3) {语句序列}
  • 17. 流程控制 循环语句 while语法格式 while(条件表达式) {语句序列}do-while语法格式 do {语句序列} while(条件表达式);
  • 18. 数组和字符串 1. 掌握Java中的数组概念、声明、创建、初始化与使用; 2. 熟练掌握Java的数组编程方法; 3. 掌握Java中字符串的概念; 4. 熟练掌握Java中String类、StringBuffer类中的有关方法应用; 5. 了解向量的声明、添加、修改、删除等操作。
  • 19. 2.1 数组 ★声明一维数组有两种格式: 格式一:数组元素类型 数组名[] 格式二:数组元素类型 []数组名一维数组★为数组分配内存空间的格式如下: 数组名 = new 数组元素的类型[数组的长度];★数组的初始化 创建数组后,系统会给每个元素一个默认的值,也可以在声明数组的同时给数组一个初始值,称之为初始化。例如: int num [ ] = {2, 5, 4, 1} ;
  • 20. 一维数组 ★数组的使用 ☆数组的访问,比如:student [0]=18 ☆数组的复制,例如: int num [ ] = {9,8, 3, 0, 2}; int numCopy[ ]=num; numCopy[2]=9; ☆一维数组中元素的个数:数组名.length
  • 21. 多维数组 ★声明二维数组有两种格式: 数组元素类型 数组名[][]; 数组元素类型 [][]数组名; ★二维数组的初始化 数组名 = new 数组元素的类型 [数组的行数][数组的列数]; 类型 数组名[][]={{初值表1},{初值表2},…, {初值表n},}; ★二维数组的使用 数组名.length 或 数组名[行号].length 例如:score[0]=new float[3];
  • 22. 2.1 类 2.2 访问控制符与封装 2.3 继承 2.4 非访问控制符 2.5 Java的名字空间和包 2.6 接口22
  • 23. 2.1.1 类的定义1.类声明:  类声明中包括关键字Class,类名及类的属性。类声明的格式如下:23[<修饰符>]class<类名>[extends<父类>][implements<接口名>]
  • 24. (1)类定义修饰符 类的说明性修饰符说明类的性质和访问权限,包括public、缺省修饰符、abstract、final。关于修饰符具体含义后面详细介绍。 (2)extends extends说明类的父类,一般形式为extends〈父类名〉Java语言中,如果在类说明中无extends,则隐含地假设其父类为Java.lang.object类。24
  • 25. 2.1.1 类的定义2.类主体   <类声明> { <成员变量的声明> <成员方法的声明及实现> } Java语言中没有独立的函数和过程,所有的子程序都是作为类方法定义的。如下所示: class className{  memberVariable Declarations  method Declarations} 25
  • 26. 3.成员变量   成员变量的声明方式如下:   [变量修饰符] <变量类型> <变量名> 其中修饰符包括public、protected、private. public:用来说明公有变量; private:用来说明私有变量; protected:用来说明保护变量。 26
  • 27. 4.成员方法   说明成员方法定义的一般形式为: [方法修饰符] <方法返回值类型> <方法名> ([<参数列表>]){方法体}27
  • 28. ⑴方法修饰符 成员方法修饰符主要有public、private、protected、final、static、abstract和synchronized共7种,前3种的访问权限、说明形式和含义与成员变量一致。 ⑵方法的返回值类型 Java语言要求在成员方法说明中必须指明方法返回值的类型,返回值的类型为Java语言的任何数据类型。如果一个成员方法不需要返回值,则其返回值的类型被说明为void。方法返回值用return语句来实现,如果有返回值,那么return语句要带参数,并且return语句中返回的数据类型必须与方法说明中的方法返回值的类型一致。 28
  • 29. ⑶方法名 成员方法名是Java语言合法的标识符,为了提高程序的可读性,成员方法名一般具有一定的含义。 ⑷参数列表 成员方法的参数列表是由逗号分隔的类型及参数名组成,是可选项。类型可以是Java语言的任何数据类型。29
  • 30. ⑸方法体 方法体是一个方法定义的主要部分,包含了所有实现方法功能的Java语言程序代码。在方法体中可以定义局部变量,它的作用域仅在方法体内,当方法被执行结束之后,该方法内部的所有局部变量也就失效了,局部变量不能与参数列表中参数名同名。方法体用“{}”括起来。 30
  • 31. 2.1.2 对象的使用2.1.2.4 对象释放 Java可回收不使用对象所占的内存空间。其作法是,把指向该对象的值设置为null。该对象便成了无用对象,Java系统通过垃圾回收器GC(Garbage Collector)周期性地释放无用对象所使用的内存,完成对象的清除工作。 当不存在着对一个对象的引用时,该对象就成为一个无用对象。GC自动扫描对象的动态内存区,对被引用的对象添加标记,然后把没有引用的对象作为垃圾收集起来并加以释放。 GC在Java中作为一个线程来运行的,即调用System.gc(),当要求垃圾收集时,该线程与系统同步运行;否则在系统空闲之时异步地运行。 此外,在Java系统开始运行时,会自动调用一个名为finalize()方法,使它清除对象所占的内存。比C++中用delete和C中用free来释放内存的措施好得多。31
  • 32. 2.1.3 方法重载 在Java类中可以创建名字相同,但是参数不同和返回值不同的几个方法,这就是方法重载(overloading),Java系统通过参数和返回值来分辨具体是哪一个方法。通过方法重载,一个类中可以有多个具有相同名字的方法,传递给它们的不同个数和类型的参数来决定使用那种方法,这就是多态。32
  • 33. 内部类 在类内部可定义成员变量和方法,其实,在类内部也可以定义另一个类。如果在类A的内部再定义一个类B,此时类B称为内部类,而类A则称为外部类。 内部类可声明为public或private。当内部类声明成public或private时,其访问限制与成员变量或方法完全相同。332.1.4 内部类
  • 34. 2.2 访问控制符和封装 Java的类成员主要有访问修饰符具体存取权限见下表publicdefaultprotectedprivate可被相同包的非子类访问是是是否可被相同包的子类访问是是是否可被不同包的非子类访问是否否否可被不同包的子类访问是否否否可被相同包的子类继承是是是否可被不同包的子类继承是否是否34
  • 35. 2.3 继承352.3.3 super和this Super有三种情况可以使用: ⑴用来访问父类中被覆盖的方法; ⑵用来调用父类中的构造方法; ⑶用来访问父类中被隐藏的成员变量。
  • 36. 2.4 非访问控制符 2.4.1 static 在类中声明一个变量或方法时,还可以指定它为实例成员或类成员。其格式为: static 类型 变量名; static 返回值类型 方法名([参数列表]){ … } 上述用static修饰的变量和方法分别称为类变量和类方法,也称静态变量和静态方法。如果没有static修饰,则分别称为实例变量和实例方法。 36
  • 37. 2.5 Java的名字空间和包2.5.1 Java的名字空间 Java注意解决名字空间的冲突问题,全局变量不再是语言的组成部分,即没有全局的方法,也没有全局的变量。所有的变量和方法都是在类中定义,并且是类的重要组成部分,而每个类又是包的一部分,因此每个Java变量或方法都可以用全限定的名字表示。包括包名、类名、域名三部分,之间用“.”分隔。 Java编译器会为Java程序的每个类生成一个字节码文件,这些字节码文件名与类同名,扩展名为.class,因此一个含有多个类定义的源文件编译后会生成多个.class文件。 Java源代码的扩展名一般为.java,其中包括一个或多个类定义,如果在Java文件中有多个类定义,则只能有一个类可以定义为public,并且这个类的名字必须与程序的源代码名(去掉扩展名)一致。 37
  • 38. 2.6 接口 接口(interface)是Java所提供的另一种重要功能,它的结构和抽象类非常相似。 接口是一种特殊的类,但接口与类存在着本质的区别。 类有它的成员变量和成员方法,而接口却只有常量和抽象方法,也就是说接口的成员变量必须初始化,同时接口中的所有方法必须全部声明为abstract方法,一个类可以有多个接口。 Java语言通过接口使得处于不同类甚至互不相关的类具有相同的行为。 38
  • 39. 2.6.1 接口的声明 接口通过关键词interface来定义,接口定义的一般形式为 [接口修饰符] interface〈接口名〉[extends〈父类接口列表〉] {…//接口体} ⑴接口修饰符:接口修饰符为接口访问权限,有public和缺省两种状态。 ①用public指明任意类均可以使用这个接口。 ②在缺省情况下,只有与该接口定义在同一包中的类才可以访问这个接口,而其他包中的类无权访问该接口。 ⑵接口名:接口名为合法的Java语言标识符。 ⑶父类接口列表:一个接口可以继承其他接口,可通过关键词extends来实现,其语法与类的继承相同。被继承的类接口称为父类接口,当有多个父类接口时,用逗号“,”分隔。 ⑷接口体:接口体中包括接口中所需要说明的常量和抽象方法。39
  • 40. 接口2.6.2 接口的实现 在前面所介绍的类声明中,用implements子句表示一个类用于实现某个接口。一个类可以同时实现多个接口,接口之间用逗号“,”分隔。 在类体中可以使用接口中定义的常量,由于接口中的方法为抽象方法,所以必须在类体中加入要实现接口方法的代码,如果一个接口是从别的一个或多个父接口中继承而来,则在类体中必须加入实现该接口及其父接口中所有方法的代码。 在实现一个接口时,类中对方法的定义要和接口中的相应方法的定义相匹配,其方法名、方法的返回值类型、方法的访问权限和参数的数目与类型信息要一致。 40
  • 41. 接口2.6.3 接口的使用 2.6.4 扩展接口与接口的多重继承 使用extends子句、扩展接口,可以生成子接口。原来的接口称为基本接口(base interface)或父接口(super interface),扩展出的接口称为派生接口或子接口。通过这种机制,派生接口不仅可以保有父接口的成员,同时也可以加入新的成员以满足实际问题的需要。与类不同的是,一个接口可以扩展多个接口,继承它们所有属性,而一个类只能扩展一个类。显然,接口不能扩展类,接口的方法必须全是抽象的。例如: interface A extends B{…} 这条语句表示定义了接口A并继承了接口B,使A成为B的子接口,并且A具有B的所有属性。 41