JAVA教程第2章(控制台程序设计).ppt_第1页
JAVA教程第2章(控制台程序设计).ppt_第2页
JAVA教程第2章(控制台程序设计).ppt_第3页
JAVA教程第2章(控制台程序设计).ppt_第4页
JAVA教程第2章(控制台程序设计).ppt_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

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

文档简介

第2章 控制台程序设计,本章提要 面向对象思想 Java语言特点 Java运行环境 编写Java程序,本章知识要点,Java程序分类 Java开发环境与运行 类的定义 类的四个基本特性 接口,任务1 认识Java程序及其运行,什么是Java程序 Java开发环境及工具 计算机处理Java程序的过程,Java程序,例子: /* WelcomeApp.java*/ import java.lang.System; class WelcomeApp public static void main(String args) System.out.println(“Welcome to Java World!“); ,Java程序,Java应用程序的特点是可以一次编译到处运行。 两大类型 应用程序(applications) 小应用程序(applets) 应用程序是可以独立在任何操作系统平台上执行的程序。 基于窗体的应用程序 基于控制台的应用程序 小应用程序是在Web页面内执行的Java程序,小应用程序需要浏览器支持。,Java运行环境,Java运行环境 Java Runtime Environment(JRE) 是可以在其上运行、测试和传输应用程序的 Java 平台。它包括 Java 虚拟机、Java 平台核心类和支持文件。如sun公司的JRE包括: Java Runtime Environment 和 Java Plug-in Java虚拟机JVM(Java Virtual Machine) 它是一种可以运行Java字节码的虚拟的计算机,它是Java运行平台的核心。Java源程序编译生成的字节码不能直接在操作系统平台上运行,必须在Java虚拟机上运行。,任务1 认识Java程序及其运行,什么是Java程序 Java开发环境及工具 计算机处理Java程序的过程,Java开发环境,Java开发包 Java开发工具箱(JDK)是SUN的Java软件开发包。其中包含有实现各种各样低层技术的类的集合,这些类提供了很多属性和方法。我们可以在这之上开发Java应用程序。 JDK的三种版本 SE(J2SE),standard edition,标准版,通常用版本 EE(J2EE),enterprise edtion,企业版,用于开发J2EE应用程序 ME(J2ME),microedtion,主要用于移动设备、嵌入式设备上的java应用程序,Java开发环境(续),在SUN的JDK中,不仅包含开发类库。同时,JDK也为用户提供了集成和执行Java应用程序和小应用程序的工具。表中列出的就是它们所提供的部分工具,Java开发环境(续),JDK下载地址 /technetwork/java/javase/downloads/index.html JDK的安装与系统环境配置 1、右击我的电脑选择属性高级环境变量系统变量 2、新建一个变量名为“CLASSPATH”,变量值为“C:Program FilesJavajdk1.5.0_14libtools.jar;C:Program FilesJavajdk1.5.0_14libdt.jar;.;”中间用分号隔开,若修改了安装目录的,则需修改成相应目录。 3、再新建一个变量名为“JAVA_HOME”,变量值值为“C:Program FilesJavajdk1.5.0_14;”。 4、打开系统变量“PATH”,在变量值后面添加“C:Program FilesJavajdk1.5.0_14bin;”,Java开发环境(续),JDK安装与配置测试: 输入 Java -version 出现以下说明,则表示成功 java version “1.5.0_14“ Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_14-b03 Java HotSpot(TM) Client VM (build 1.5.0_14-b03, mixed mode, sharing),Java开发环境(续),关于系统环境配置变量的说明: 1.PATH环境变量。作用是指定命令搜索路径,在DOS命令行下面执行命令,如javac编译java程序时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序。 2.CLASSPATH环境变量。作用是指定类搜索路径,JVM通过CLASSPTH来寻找类的,从而我们可以使用已编写好的类。 3.JAVA_HOME环境变量。它指向jdk的安装目录,Eclipse/NetBeans/Tomcat等软件就是通过搜索JAVA_HOME变量来找到并使用安装好的jdk。 4.如果安装了J2EE,也同样要加一个环境变量J2EE_HOME。,Java开发工具,JCreator JBuilder VisualAge For Java Sun ONE Studio Netbean Eclipse,任务1 认识Java程序及其运行,什么是Java程序 Java开发环境及工具 计算机处理Java程序的过程,Java程序运行环境架构,JVM,虚拟机用软件构造出来的计算机。它是通过在实际的计算机上仿真模拟各种计算机功能来实现的。虚拟机有自己的指令系统,但没有硬件,它把虚拟代码转换成相应的机器代码,再加以执行。 JAVA虚拟机(JVM)一个想象中的机器,在实际的计算机上通过软件模拟来实现。Java虚拟机有自己想象中的硬件,如处理器、堆栈、寄存器等,还具有相应的指令系统。 JVM的作用它有自己的一套逻辑指令,JAVA源代码经过编译器编译以后,生成虚拟机的逻辑指令集(.class文件),而JVM的任务就是将.class 文件装入内存,并把这些.class 文件包含的伪指令解释为具体平台的机器指令,然后执行。从这个意义上来说编译器是平台无关的,而JVM是平台有关的。如window平台与linux平台上的JVM是不一样的。,JVM体系结构,常量池:虚拟机必须为每个被装载的类型维护一个常量池。常量池就是该类型所用到常量的一个有序集和,包括直接常量(string,integer和 floating point常量)和对其他类型,字段和方法的符号引用。,JVM,类装载指将包含在类文件中的字节码装载到JVM中, 并使其成为JVM一部分的过程。即寻找一个类或是一个接口的二进制形式,并用该二进制形式来构造代表这个类或是这个接口的class对象的过程,其中类或接口的名称是给定了的。 类装载过程装载、链接和初始化,其中链接又可以分成校验、准备、解析三步: 装载:查找和导入类或接口的二进制数据; 链接:执行下面的校验、准备和解析步骤,其中解析步骤是可以选择的; 校验:检查导入类或接口的二进制数据的正确性; 准备:给类的静态变量分配并初始化存储空间; 解析:将符号引用转成直接引用,如变量直接通过地址访问,方法也被映射到内存的某个位置等待调用; 初始化:利用类定义的代码对静态变量的初始化Java代码和静态Java代码块。,JVM,运行引擎负责执行包含在已装载的类或接口中的指令 。 JVM区 Java堆是一个运行时数据区,类的实例(对象)从中分配空间,它的管理是由垃圾回收来负责的,程序员不能显式释放对象。Java不规定具体使用的垃圾回收算法,可以根据系统的需求使用各种各样的算法。 Java方法区保存方法代码(编译后的java代码)和符号表(常量池) 程序计数器每个线程一旦被创建就拥有了自己的程序计数器。当线程执行Java方法的时候,它包含该线程正在被执行的指令的地址,JVM,Java栈有三个区域:局部变量区、运行环境区、操作数区 局部变量区:每个Java方法使用一个固定大小的局部变量集。 运行环境区:在运行环境中包含的信息用于动态链接,正常的方法返回以及异常捕捉 操作数区:机器指令从操作数栈中取操作数,对它们进行操作,并把结果返回到栈中 本地方法栈,当一个线程调用本地方法时,它就不再受到虚拟机关于结构和安全限制方面的约束,它既可以访问虚拟机的运行期数据区,也可以使用本地处理器以及任何类型的栈。,JVM工作过程,JVM是JDK的最底层,负责于操作系统的交互,用来屏蔽操作系统环境,提供一个完整的java运行环境, 即虚拟计算机 JDK装入JVM的过程 创建jvm装载环境和配置 装载jvm.dll 初始化jvm.dll并挂界到JNIENV(JNI调用接口)实例 调用JNIENV实例装载并处理class类。,JVM处理示例Test.class的过程,输入命令:Java Test,确定jvm的路径和相关的参数配置,装载jvm.cfg文件,获得jvm.dll的路径,由LoadJavaVM来装入jvm.dll文件,获得JNIEnv实例,java.c中LoadClass方法装载该主类,由JNIEnv实例的方法调用主类中main方法,任务2 编写数字显示程序,问题分析 知识学习 类的抽象与封装 数据类型 常用类和包 定义Java类 任务实施,问题分析,任务描述: 编写一个程序,能够显示数字 问题分析: Java程序构成,它是面向对象的语言,其程序由类组成的,需要了解类的相关概念 编写Java程序的方法和步骤 确定显示数字所使用的数据类型,了解数据类型知识 编写代码 编译执行,知识学习类的抽象与封装,将客观世界的任何实体看作对象,则客观世界由各种“对象”组成,且有自己的状态和行为,将具有相同特征和功能的对象归类,形成类,其中每个对象就是这个类的一个实例。 类之间可通过继承关系构成类的层次结构,对象之间可通过消息相互作用,即一个对象通知另一个对象完成一个允许作用于该对象的操作,而其操作细节被封装,对外界不公开。 类和对象是对对象的抽象及描述,是一些数据元素(属性)及其上操作(方法)的聚集。对象则对应一个值。类与对象的关系相当于模式和它的实例的关系。,知识学习类的抽象与封装,面向对象的四个基本特征抽象、封装、继承、多态。 抽象从众多对象中抽出共同的、本质的属性和行为的过程。 封装将类的属性和行为(即数据和方法)聚集在一起形成一个完整逻辑单元的机制,只让可信的类或者对象操作,对不可信的进行信息隐藏。 继承是类之间“一般”和“特殊”的关系,已有类(父类)可派生出新类(子类),构成类的层次关系 多态表示同一事物的多种形态 面向对象是一种程序设计思想,在程序空间内,利用数据抽象的方法对客观世界的实体进行描述,即将一种数据结构和操作该数据结构的方法捆绑在一起,封装在一个程序实体内,从而实现了数据封装和信息隐藏。,知识学习类的抽象与封装,定义一个Java类 class ClassName /构造方法 /一个或多个属性 /一个或多个方法 /一个主方法 ,知识学习类的实例化,对象的生命周期:生成 、使用和清除 对象的生成 包括声明 、实例化和初始化三方面的内容 .通常的格式为 : type objectName = new type ( paramlist ); 说明:其中type是组合类型 (包括类和接口 ) type objectName:即声明,分配一个type引用空间 new type :即实例化,在堆空间创建一个type类对象 ( paramlist ):即初始化,在对象创建后,立即调用type类的构造函数,对刚生成的对象进行初始化 =:使对象引用指向刚创建的那个type对象,知识学习类的实例化和使用,例如:Position a=new Position(); Position a声明了一个Position类,创建该类的引用变量,a为null new Position实例化了一个Position类对象 ()调用该类的构造函数,初始化对象 例如:Position a=new Position(x,y);? 对象的使用 调用对象的方法:对象名.方法名(参数1值,参数2值) 调用对象的变量:对象名.属性名 例如:a.disp(“hello”), =“java”,知识学习类的清除,类的清除 当不存在对一个对象的引用时,该对象成为一个无用对象。Java的垃圾收集器自动扫描对象的动态内存区,把没有引用的对象作为垃圾收集起来并释放。,知识学习构造方法,构造方法是类实例化为对象时,编译器自动调用的方法,用以给出对象中变量的初值。 构造方法必须与类同名,而且绝对不允许有返回值。,定义Java类 /Java类例子 public class Application /类的属性 String name; int age; /没带参数的构造 public Application() name = “Jack”; age = 21; /带两个参数的构造 public Application(String name, int age) = name; this.age = age; /类的方法 public void Display( ) System.out.println(“name: ”+); System.out.println(“age : ”+ this.age); ,知识学习 Main()方法,Java运行环境在开始解释运行Java程序时,必须有一个切入点。那么Java应用程序中的切入点就是类中所定义的main方法。 public class Welcome public static void main(String args) /do something ,一个简单的Java程序,import java.lang.*; public class WelcomeDemo String str; public WelcomeDemo() str = “welcome to Java world!“; public static void main(String args) WelcomeDemo wel=new WelcomeDemo(); System.out.println(wel.str); ,主类,Main方法,构造方法,一个简单的Java程序(续),上机运行步骤如下: 编辑。在编辑窗口中输入并存成后缀为.java的文件,其中文件名必须与定义的应用程序类名一致。 编译。在该文件所在目录下输入如下的命令行: javac WelcomeDemo.java 编译通过后,将自动生成程序中声明的类文件。 解释运行。同样通过输入命令行: java WelcomeDemo,知识学习 编写Java程序的步骤,构造主类 分析类,以及相关属性和方法,定义Java类 构造其构造函数 写main方法 编译 运行,模仿例子,编写一个显示hello,how are you程序 思考: String是什么数据类型? import java.lang.*;是做什么用的?,动手练习,15 分钟,知识学习数据类型,Java数据类型基本数据类型,引用类型,知识学习数据类型(续),包装类型与基本类型之间可以转换: 例如:double a=1.0; /把double基本类型转换为Double包装类型 Double b=new Double(a); /把Double包装类型转换为double基本类型 a=b.doubleValue(); 包装类的作用:用以实现数据类型之间转换,知识学习数据类型(续),引用类型包括类,接口,数组,字符串类 常用类: 包装类,如java.lang.Integer 数组:存储一组相同类型数据的数据结构。数组不能改变数组元素个数.。 数组创建: 数据类型 数组名称=初始化数值列表 数据类型 数组名称=new 数据类型数组元素个数 例如: int smallPrimes = 1,3,4;/初始化 int magicSquere = 1,3,4,3,3,3;/多维数组初始化 int smallPrimes = new int3 int smallPrimes = new int1,3,4,案例ArrayDemo.java,知识学习数据类型(续),字符串:多个字符的组合,String,StringBuffer,StringTokenizer String类用于构造一个字符串 String 字符串名=new String(字符串常量); String 字符串名=字符串常量; 例如: String str=new String(“hello”); String str=“hello”; 常用方法 length(),equals(Object),comparTo(Object),charAt(int),indexOf(char),知识学习数据类型(续),StringBuffer类用于构造一个字符串缓冲区 StringBuffer 字符串名=new StringBuffer(字符串常量); StringBuffer 字符串名=new StringBuffer(int len); StringBuffer 字符串名=new StringBuffer(); 例如: StringBuffer strbuf=new String(“hello”);分配”hello”+16个字符缓冲区 StringBuffer strbuf=new String(50);分配50个字符缓冲区 常用方法 length(),setLength(int),append(String),insert(int,String), delete(int,int),reverse(),案例StringBufferDemo.java,知识学习数据类型(续),StringTokenizer类用于构造一个词法分析器类,将一个串分为多个片,以提取或处理其中的单词 StringTokenizer 字符串名=new StringBuffer(字符串常量); StringTokenizer 字符串名=new StringBuffer(字符串常量,分隔符常量); 例如: StringTokenizer strtok=new StringTokenizer(“this is a string”,“ ”);,案例StringBufferDemo.java,知识学习数据类型(续),注意 若对于字符串类,要循环过程中进行串连接等处理时,不要使用String,而要使用StringBuffer,例如, String s1=“aaa”; String s2=“bbb”; String s=s1+s2; 执行+,则要创建一个StringBuilder(StringBuffer),并使用其方法append,合并字符串,而后销毁该StringBuilder对象,也就是说,执行多少次+,就要创建和销毁多少次StringBuilder对象 字符串相等,使用equals()方法,不要使用”=” ”=”用于判断值是否相等, equals()用于判断对象的值是否相等 如:String str1=new String(“hello”); String str2=new String(“hello”); str1=str2 则为 false,由于这两个对象的地址值不同,案例StringDemo.java,知识学习数据类型(续),常量池,堆内存,int x=123; String str=new String(“hello”); Position p=new Position();,基本数据类型变量x,引用类型变量p,引用类型变量str,copy,知识学习包,包是类和接口的集合,是Java中组织分类程序的一种树形结构,将功能相关的多个类或接口放在同一个包中,同时在此包中再声明其子包,形成包树形结构。 为了指出类是某个包的成员,使用package关键字。 通过使用import语句,在程序中使用Java包。 常用包: java.lang.*,java.util.*,java.awt.*,java.applet.*,java.sql.*,任务实施:编写显示数字程序,/*NumberDemo.java*/ import java.lang.System; Public class NumberDemo int x=0; public NumberDemo () public void disp(int y) x=y; System.out.println(“Number: “+x); public static void main(String args) NumberDemo dnum=new NumberDemo (); dnum.disp(5); ,任务实施,编写显示数字程序 /*Numbers.java*/ import java.lang.System; Public class Numbers int x=0; public Numbers () public void disp(int y) x=y; System.out.println(“Number: “+x); public static void main(String args) Numbers dnum=new Numbers (); dnum.disp(5); 编译执行,编写一个单个字符串显示程序 课外拓展:编写一个程序,显示集合中字符串“abc”,”mn”,”khl”,”mn”,”hello”,”hi”,且无重复字符串,即结果应显示“abc”,”mn”,”khl”,”hello”,”hi”,动手练习,30 分钟,任务3 编写整数相加程序,问题分析 知识学习 类的继承 访问控制符 任务实施,问题分析,任务描述: 编写一个程序,能够进行整数相加 步骤分析: 分析整数相加与任务2中类NumberDemo的关系,是数字的一种行为,可利用类的继承性 继承或访问过程要考虑其访问限度,即访问控制符 编写代码 编译执行,知识学习类的继承性,类的继承是指使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展 Java语言实现继承是通过extends关键字来实现。 Java不支持多重继承。例classExtendDemo.java class Book public Book() /类元素定义 class TextBook extends Book public TextBook() /类元素定义 注意:若基类构造函数带参数时,子类的构造函数中显示调用基类构造函数super(基类构造函数参数名);若基类实例化时,指向子类实例,则基类对象调用子类中的重写方法,知识学习访问控制符,访问控制符是规定了被定义元素的的被访问限度 Java中的访问控制符包括: Public Private Protected private protected 默认访问(包访问性),访问控制符作用图,任务实施,整数为数的子类,可以任务1中Number为父类,构造一个整数类,并增加一个相加方法 Public class IntegerNumbers extends Numbers Public void intSum(int y1,int y2) x=y1+y2; System.out.println(“result: ”+x); 编写代码 编译执行,案例IntegerNumbers.java,知识延伸传参数,代码分析: public static void main(String args) int i=2; IntegerNumbers dnum=new IntegerNumbers(); dnum.disp(i); /传值 Sum(i,4); System.out.println(i); /方法外的变量将不改变值 传参数 传值:方法操作的是参数变量(也就是原型变量的一个值的拷贝)改变的也只是原型变量的一个拷贝而已,而非变量本身。因此,变量原型将不会随之改变。 传引用:当方法传入的参数为非基本类型时(即是一个对象类型的变量), 方法改变参数变量的同时变量原型也会随之改变 ,但String,包装类除外,案例StringParaDemo.java StringBufferParaDemo.java,知识延伸静态成员,类成员 静态成员:类型说明符要加关键字static 静态变量:static String str 静态方法: static void main() 实例成员 实例变量 实例方法 在类中的应用 静态成员:类名.属性,类名.方法名 在静态方法中不可使用实例成员 实例成员:对象名.属性,对象名.方法名,知识延伸Object和Class,Object 所有对象的基类,提供了所有对象常用的方法 可以引用所有类型的对象,例如用于参数 Class 是一个公有的最终类,这是Object类的直接子类,常用于描述正在运行中的类或接口 它的实例化可通过方法getClass()完成 Exp:Object obj; Class c=obj.getClass()可以得到一个Class的一个实例 c.getName() 即obj.getClass().getName();得到obj对象的类名,案例TestDemo.java,编写一个程序,显示由两单词组成的字符串,动手练习,30 分钟,任务4 编写多个整数相加程序,问题分析 知识学习 类的多态 任务实施,问题分析,任务描述: 编写一个程序,能够进行多个整数相加 步骤分析: 分析多个整数相加与任务2、3中类的关系,是数字的一种行为,且是整数运算的另一种形式,可利用类的多态性 编写代码 编译执行,知识学习类的多态性,类的多态性指的是同样的消息能被发送到父类的对象和它子类的对象,Java中的多态主要指的就是方法的重写Overriding和重载Overloading 重载Overloading:一个类中多态性的一种表现 ,如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型或是返回值的类型,则称为方法的重载(Overloading)。 重写Overriding:是父类与子类之间多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。,案例PolyClassDemo.java,任务实施,多个整数相加,是整数相加的一种形式,可以利用一个类中多态性即重载来实现 public class MultIntNumbers extends IntegerNumbers public void intSum(int y1,int y2) x=y1+y2; System.out.println(“result: ”+x); public void intSum(int y1,int y2,int y3) x=y1+y2+y3; System.out.println(“result: ”+x); ,案例MultIntNumbers.java,整数相加的处理方法不同, 即方法内代码改变了,则可以利用父类和子类间的多态性即重写来实现 public class IntegerNumbers_2 extends IntegerNumbers public void intSum(int y1,int y2) y1=y1+y2; x=y1; System.out.println(“result: ”+x); ,案例IntegerNumbers_2.java,知识延伸类的多态性(重写),编写一个程序,显示由多个单词组成的字符串,动手练习,30 分钟,拓展1抽象类和接口,抽象类(abstract)所有对象是由类来描述的,但不是所有类都用于描述对象,即有些没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。 例如 图形类,有图形相关参数,图形面积计算,而面积因其形状不同而各异,拓展1抽象类和接口,public abstract class Graph int edgeNum; public abstract void getArea(); /抽象方法 public void getParameter() /默认方法 class Square extends Graph public Square(int edge) this.edgeNum=edge; public void getArea() /calculate area of square public static void main(String args) Square s = new Square(); s.getArea(); ,抽象类,子类,拓展1抽象类和接口,接口 (interface) 接口比抽象的概念更进了一步。你可以把一个接口看成是一个纯的抽象类。它用于实现Java中的多重继承的结构。它定义了若干个抽象方法用以实现多重继承的功能。 接口使用interface关键字声明,其中方法默认为public abstract,即方法无实现代码,且其中的变量声明默认为static(静态)和final(常量) 一般类实现接口使用关键字 implements,实现接口的类就必须实现接口中的所有方法, 但是抽象类可以不用实现接口中的所有方法 一个类只可继承于一个父类,但可实现多个接口,拓展1抽象类和接口(续),public interface driverMethod public void methods(); public class car implements driverMethod String category; public car(String category)this.category=category; public void methods() System.out.println(this.category+“的方式是机动车辆驾驶”) ,拓展1抽象类和接口,拓展1抽象类和接口,接口的使用规则 用interface是在指定一个类必须要做什么,但不是规定它如何去做. 一旦接口被

温馨提示

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

评论

0/150

提交评论