第三章java面向对象技术基础(6学时)
- 格式:ppt
- 大小:666.00 KB
- 文档页数:191
Java语言基础本章的主要目标:1、了解java的主类的结构;2、了解java语言中的基本数据类型;3、了解java语言中的常量和变量;4、了解java语言运算符的使用;5、了解java语言数据类型的转换;6、了解java语言中代码注释与编码规范;Java主类结构Java语言是面向对象的程序设计语言,java的基本组成单元就是类,类体又包括属性和方法,而每一个程序都必须包含一个main()方法,含有main()方法的类称之为主类;我们用一个程序来看一下主类的结构:public class First{static String s1=”java”;public static void main(String args[]){String s2=”学习之旅!”;System.out.println(“s1”);System.out.println(“s2”);}}这就是一个简单的java程序,包含了类的结构;需要注意的是,java代码中所有的标点符号,括号都是需要在英文状态下输入;否则在编译的时候将会报错;通常将类的属性称之为类的全局变量(又叫成员变量),将方法中的属性称之为局部变量;全局变量声明在类体中,局部变量声明在方法体中;Java程序中的main()方法必须声明为public staticvoid 。
main()方法是程序开始执行的位置;Java语言严格区分大小写;基本数据类型Java中的基本数据类型有字符和数字之间可以相互转换;在程序执行过程中,其值不能改变的量称为常量,其值能改变的量称之为变量;Java语言规定标识符由任意顺序的字母、下划线、美元符号、和数字组成,并且第一个字符不能使数字字符;Java中允许使用汉字或其他语言作为变量名,但不建议使用;常量名通常使用大写字母,但这并不是必须的,很多java程序员使用大写字母表示常量,常常是为了清楚的表明正在使用常量;由于变量被定义出来后只是暂存在内存中,等到程序执行到某一个点后,该变量会被释放掉,也就是说变量有他的生命周期;在一个方法中,局部变量和成员变量同名时,此时成员变量将被隐藏,即这个成员变量在这个方法中暂时失效;如果从低精度类型向高精度类型转换,则永远不会溢出,并且总是成功的;把高精度类型转换为低精度类型则必然会有信息的丢失;从低精度类型向高精度类型转换,系统自动执行,程序员无需进行任何操作,这种类型的转换又叫隐式转换,从高进度类型向低精度类型转换,则需要强制执行,又叫强制类型转换,又称显示转换;当一个数超过了要转换的类型的最大值,则转会后的数值则会变为最小值,这也可以理解为数据的溢出;代码注释分为单行、多行、和文档注释;编码规范,简言之就是利人利己;。
第3章对象和类在当今的计算机大型应用软件开发领域,面向对象技术正在逐步取代面向过程的程序设计技术。
本章将介绍面向对象的基本知识和Java实现面向对象程序设计的主要工具--类。
如果读者缺乏关于面向对象程序设计的背景,一定要仔细地阅读本章。
如果读者有C++编程经验,也要注意二者之间的区别,毕竟Java在类的具体实现上与C++有较大的差别。
3.1 面向对象的基本概念面向对象(Object Oriented,OO)是当前计算机界关心的重点,它是90年代软件开发方法的主流。
面向对象的概念和应用已超越了程序设计和软件开发,扩展到很广的范围。
例如,数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。
谈到面向对象,这方面的文章非常多。
但是,明确地给出"面向对象"的定义却非常少。
最初,"面向对象"是专指在程序设计中采用封装、继承、抽象等设计方法。
可是,这个定义显然不能再适合现在的情况。
面向对象的思想已经涉及到软件开发的各个方面。
例如,面向对象的分析(Object Oriented Analysis,OOA),面向对象的设计(Object Oriented Design,OOD)以及经常说的面向对象的编程(Object Oriented Programming,OOP)。
许多有关面向对象的文章,都只是讲述在面向对象的开发中所需要注意的问题,或所采用的比较好的设计方法。
看这些文章只有真正懂得什么是对象,什么是面向对象,才能最大程度地收获知识。
说明:在本章中,着重讨论OOP,有关OOA和OOD请读者查阅有关软件工程的书籍。
OOP从所处理的数据入手,以数据为中心而不是以服务(功能)为中心来描述系统。
它把编程问题视为一个数据集合,因为数据相对于功能而言,具有更强的稳定性。
OOP同结构化程序设计相比最大的区别就在于:前者首先关心的是所要处理的数据,而后者首先关心的是功能。
专接本辅导java第三章《面向对象编程基础》补充0.类变量与实例变量区别(类方法与实例方法的区别见习题解答第12题改错)java类的成员变量有两种:一种是被static关键字修饰的变量,叫类变量或者静态变量;另一种没有static修饰,为实例变量。
在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。
在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。
静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。
总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
例如,对于下面的程序,无论创建多少个实例对象,只在类被第一次装置时初始化一次staticVar变量和sum变量,并且每创建一个实例对象,就会执行一次构造函数;但是,每创建一个实例对象,就会分配一个instanceVar,即可能分配多个instanceVar,并且每个instanceVar的值都只自加了1次。
public class类变量与实例变量{public static int staticVar = 0;//类变量初始化,只会在类装载时进行一次!!public int instanceVar = 0;//实例变量初始化public static int sum=1;public类变量与实例变量()//构造方法{staticVar++;instanceVar++;sum=sum+5;System.out.println("staticVar = "+staticVar+",instanceVar="+instanceVar);System.out.println("sum = "+sum);}public static void main(String []args){类变量与实例变量对象1=new类变量与实例变量();类变量与实例变量对象2=new类变量与实例变量();类变量与实例变量对象3=new类变量与实例变量();}}运行结果:staticVar = 1,instanceVar=1sum = 6staticVar = 2,instanceVar=1sum = 11staticVar = 3,instanceVar=1sum = 16再如下面的程序,涉及static块:class Value{static int c=0;static int d;Value(){c=15;d=65;}Value(int i){c=i;d=c-1;}static void inc(){c++;}}public class Count {Value v0=new Value();//调用无参构造函数建立Value类非静态对象v0,类Count和类Value是has-a关系Value v=new Value(10);//调用有参构造函数建立Value类非静态对象vstatic Value v1,v2;//声明Value类的static对象v1,v2//static Value v1=new Value(),v2=new Value();//声明v1、v2并引用新建立的Value类对象static{//★声明static块,其初始化工作会先于任何其它非static块及非static变量而不管其在源程序书写中出现的先后次序!System.out.println("static块中println语句执行结果:"+"\n"+"v0和v是非静态内部类对象,v1和v2是静态内部类对象(请与教材P58例3.18对比),只有声明没有具体指向某对象时:v1.c="+v1.c+" v2.c="+v2.c+" v1.d="+v1.d+" v2.d="+v2.d);v1=new Value(30);//对象v1引用新建立的Value类对象System.out.println("static块中执行完“v1=new Value(30)之后:”v1.c="+v1.c+" v2.c="+v2.c+" v1.d="+v1.d+" v2.d="+v2.d);v2=new Value(15);//对象v2引用新建立的Value类对象System.out.println("static块中执行完“v2=new Value(15)之后:”v1.c="+v1.c+" v2.c="+v2.c+" v1.d="+v1.d+" v2.d="+v2.d);System.out.println("特别说明:因此时还没有建立Count类对象(Count 类和Value类是has-a关系,前者是外部类,后者是内部类)故非静态对象v0和v无法引用!"+"\n");}public static void main(String[] args) {Count ct1=new Count();//建立Count类(外部类)对象Count ct2=new Count();System.out.print("在main方法中,现在建立Count类(外部类)对象,");System.out.println("ct1的在ct2之前创建!分别指向两个Count类对象,Count类和Value类是has-a关系!"+"\n"+"以下是main方法体中println语句执行结果:");System.out.println("v0是无参构造内部类非静态对象,ct1.v0.c="+ct1.v0.c+" ct1.v0.d="+ct1.v0.d+" ct2.v0.c="+ct2.v0.c+"ct2.v0.d="+ct2.v0.d);// 非静态内部类对象只能通过外部类对象名访问System.out.println("v是有参构造内部类非静态对象,ct1.v.c="+ct1.v.c+" ct1.v.d="+ct1.v.d+" ct2.v.c="+ct2.v.c+" ct2.v.d="+ct2.v.d);// 非静态内部类对象只能通过外部类对象名访问System.out.println("v1是有参构造内部类静态对象,Count.v1.c="+Count.v1.c+" count.v1.d="+Count.v1.d);//静态内部类对象可以通过外部类名访问System.out.println("v2是有参构造内部类静态对象,Count.v2.c="+Count.v2.c+" count.v2.d="+Count.v2.d);Value.inc();//通过类名调用类方法System.out.println("调用类方法inc()之后Count.v1.c="+Count.v1.c+" Count.v1.d="+Count.v1.d);//引用类变量既可以通过类名也可以通过对象名System.out.println("调用类方法inc()之后Count.v2.c="+Count.v2.c+" count.v2.d="+Count.v2.d);Count.v2.inc();//通过类名调用类方法,这种写法不妥!System.out.println("调用类方法v1.inc()之后Count.v1.c="+Count.v1.c+" Count.v1.d="+Count.v1.d);//引用类变量既可以通过类名也可以通过对象名System.out.println("调用类方法v1.inc()之后Count.v2.c="+Count.v2.c+" count.v2.d="+Count.v2.d);ct1.v0.c++;//this.v0.c++;//错误,★不能在静态上下文中使用this关键字:!因为Value是Count的内部类,只能使用其外部类的对象ct2.v0.c++;System.out.println("顺序执行语句:ct1.v0.c++;ct2.v0.c++;后,ct1.v0.c="+ct1.v0.c+" ct2.v0.c="+ct2.v0.c);// 非静态内部类对象只能通过外部类对象名访问}}上面这个程序的行动结果如下:static块中println语句执行结果:v0和v是非静态内部类对象,v1和v2是静态内部类对象(请与教材P58例3.18对比),只有声明没有具体指向某对象时:v1.c=0 v2.c=0 v1.d=0 v2.d=0static块中执行完“v1=new Value(30)之后:”v1.c=30 v2.c=30 v1.d=29 v2.d=29static块中执行完“v2=new Value(15)之后:”v1.c=15 v2.c=15 v1.d=14 v2.d=14特别说明:因此时还没有建立Count类对象(Count类和Value类是has-a关系,前者是外部类,后者是内部类)故非静态对象v0和v无法引用!在main方法中,现在建立Count类(外部类)对象,ct1的在ct2之前创建!分别指向两个Count类对象,Count类和Value类是has-a关系!以下是main方法体中println语句执行结果:v0是无参构造内部类非静态对象,ct1.v0.c=10 ct1.v0.d=9 ct2.v0.c=10 ct2.v0.d=9v是有参构造内部类非静态对象,ct1.v.c=10 ct1.v.d=9 ct2.v.c=10 ct2.v.d=9 v1是有参构造内部类静态对象, Count.v1.c=10 count.v1.d=9v2是有参构造内部类静态对象, Count.v2.c=10 count.v2.d=9调用类方法inc()之后 Count.v1.c=11 Count.v1.d=9调用类方法inc()之后 Count.v2.c=11 count.v2.d=9调用类方法v1.inc()之后 Count.v1.c=12 Count.v1.d=9调用类方法v1.inc()之后 Count.v2.c=12 count.v2.d=9顺序执行语句:ct1.v0.c++;ct2.v0.c++;后,ct1.v0.c=14 ct2.v0.c=14以上运行结果中,有五点值得注意:一是static变量和static块是在类第一次装载时被初始化一次,并供类的所有对象共享,故static变量和static块中内容最先被初始化(早于main方法)。
《JAVA面向对象程序设计》课程教学大纲Oriented object Programming in JAVA编号:08065121适用专业:计算机科学与技术、网络工程学时数:32 学分数:2执笔者:田小玲编写日期:2009年11月一、课程的性质和目的本课程是为计算机科学与技术以及网络工程专业本科生开设的专业选修课,是一门面向对象的编程语言,通过本课程的学习,培养和提高学生面向对象程序设计的能力和Java语言在web开发中的应用能力。
二、课程教学内容第一章面向对象软件开发概述(2学时)1.内容面向对象问题求解的提出、面向对象问题求解的概述、对象、类与实体、对象的属性与相互关系、面向对象的软件开发过程、面向对象程序设计方法的优点、开发环境设置及开发工具简介。
2.要求(1)了解:面向对象软件开发概述,面向对象的软件开发过程及面向对象程序设计方法的优点。
(2)掌握:对象的属性与相互关系,对象、类与实体的基本概念。
(3)熟练掌握:开发环境设置及开发工具简介(补充)。
3.重点对象、类与实体的基本概念。
4滩点面向对象程序设计方法的理解。
第二章Java概述(2学时)1.内容Java语言的特点、Java虚拟机及垃圾回收机制、JDK目录结构、Java的API结构及Java 程序结构、第一个Java Application程序、第一个Java Applet程序、图形界面的输入输出、字符界面的输入输出。
2.要求(1)了解:Java语言的发展历史及特点,Java Application程序及Java Applet程序,图形界面的输入输出,字符界面的输入输出。
(2)掌握:Java语言实现机制(补充),Java体系结构(补充)。
(3)熟练掌握:Java Application程序的结构。
3.重点Java Application 程序的结构。
4滩点Java语言实现机制。
第三章Java语言基础(2学时)1.内容数据类型、变量与常量、表达式、流程控制语句。