[core.java基础教程]_杨帆_03.java编程语言基础-对象定义、变量与值传递

killerdongbo

贡献于2013-05-12

字数:0 关键词: Java开发

http://gzyangfan.spaces.live.com/blog/ gzyangfan@gmail.com  定义建模的概念:抽象、封装 和包  讨论为什么可以重用 Java 技术应用程序代码  定义类、成员、属性、方法、构造器 和包  调用具体对象的一个方法  声明类类型的变量  使用 new 构造对象 学习目标——对象定义 gzyangfan@gmail.com 认识语言的发展与演变 认识面向对象分析与设计 认识抽象这个概念 认识类这一概念 gzyangfan@gmail.com 语言的发展与演变 gzyangfan@gmail.com  分析描述系统需要做什么: ◦ 为现实世界建模,包括角色与活动、对象和行为  设计描述系统如何 做: ◦ 为系统中对象和角色之间的关系和交互建模 ◦ 查找有用的抽象以帮助简化问题或解决方案 分析和设计阶段 gzyangfan@gmail.com  函数 ◦ 编写一种算法,一旦写成即可用于多种情况  对象 ◦ 将一组相关的属性和行为组成一个类  框架和API(Application Program Interface) ◦ 支持复杂活动的大型对象组; ◦ 框架可按原样使用,或者可以修改以扩展其基本行为 抽象 gzyangfan@gmail.com  在制造业中,蓝图描述了同类物件的相同结构  在软件中,类是对对象的描述: ◦ 类描述每个对象包含的数据。 ◦ 类描述每个对象表现的行为。  在 Java 技术中,类支持三个面向对象编程 (OOP) 的 关键特性: ◦ 封装 ◦ 继承 ◦ 多态 类是什么 本节目标在于认识面向对象,封装、继承、多态这类具体 的特性,将在后面的课程中再介绍 gzyangfan@gmail.com 通过学习类的声明语法来认识与学习Java的基本语法 类的定义与使用 gzyangfan@gmail.com  Java 类的基本语法: 声明 Java 类 目前阶段只需要有基本概念就可以了! gzyangfan@gmail.com  范例: 声明 Java 类 /** * 灯的范例 * @author Frank */ public class Light { public void on() { System.out.println("灯亮了!"); } public void off() { System.out.println("灯灭了!"); } } gzyangfan@gmail.com  属性的基本语法:  范例: 声明属性 /** * 坐标点范例 * @author Frank */ public class Point { public int x; public int y = 0; public String label = "坐标点"; } gzyangfan@gmail.com  方法的基本语法:  范例: 声明方法 public class Calculator { public int add(int number1, int number2) { return number1 + number2; } } gzyangfan@gmail.com  点 符号:<对象>.<成员>  这用于访问对象成员,包括属性和方法。  范例: 访问对象成员 Calculator calculator = new Calculator(); // 访问方法 calculator.add(100, 200); Point point = new Point(); // 访问属性 point.x = 20; gzyangfan@gmail.com  客户机代码可直接访问内部 数据: 信息隐藏 // 设置了无效的日期 date.day = 32; // 这个也有可能是错误的 date.month = 2; date.day = 30; // 这个也缺少了赋值前的检查 date.day = date.day + 1; gzyangfan@gmail.com  客户机代码必须使用存储和 获取方法来访问内部数据: 信息隐藏 // 通过 Setter 方法设置设置数值 // 还可以通过 返回值 或 异常, // 得知操作是否有效 date.setYear(2012); date.setMonth(1); date.setDay(30); // 通过 Getter 方法获取数值 int year = date.getYear(); int month = date.getMonth(); int day = date.getDay(); gzyangfan@gmail.com  隐藏类的实现细节  强迫用户使用方法来访问数据  使代码更易维护 封装 gzyangfan@gmail.com  构造器的基本语法:  范例: 声明构造器 public class Pet { private String name; public Pet() { name = "Baby"; } // Getter and Setter … } gzyangfan@gmail.com  每个类中至少始终有一个构造器。  如果不编写任何构造器,则自动添加缺省构造器: ◦ 缺省构造器不带参数 ◦ 缺省构造器为空  缺省情况下,不必编写构造器就能使用 new Xxx() 创建对象实例。 缺省构造器 构造器是生成对象时,系统调用的方法。用于初始化对象 的内部数据。 gzyangfan@gmail.com  包帮助管理大型软件系统。  包可以包含类和子包。 软件包 gzyangfan@gmail.com  package 语句的基本语法是: package <顶层包名>[.<子包名>]*;  该语句的示例: package org.springframework.beans.factory;  在源文件的开始处指定包声明。  每个源文件只能有一个包声明。  如果没有包声明,则将该类放在缺省包中。  包名称必须是分层的且由点分开。 package 语句 gzyangfan@gmail.com  import 语句的基本语法是: import <包名>[.<子包名>]*.<类名>; 或 import <包名>[.<子包名>]*.*;  该语句的示例: import java.util.List; import java.io.*;  import 语句位于所有类声明之前  它的作用在于告知编译器在哪里可以找到类 import 语句 gzyangfan@gmail.com  类 — 运行时对象的源代码蓝图  对象 — 类的实例; 也称为实例  属性 — 对象的数据元素; 也称为数据成员、实例变量 和数据字段  方法 — 对象的行为元素; 也称为算法、函数 和过程  构造器 — 用于初始化一个新对象的类似方法 的构造  包 — 类和子包的集合 术语摘要 gzyangfan@gmail.com 打包与 library 的使用  jar指令的使用 ◦ 将全部 class 文件打包为 library.jar jar cvf library.jar *.*  在 Eclipse 中完成打包工作  尝试使用已经打好的包 gzyangfan@gmail.com 理解基本数据类型与引用数据类型在赋值与参数传递上的不同 变量与值传递 gzyangfan@gmail.com  描述缺省初始化  描述引用类型变量与基本类型变量的差异  描述如何初始化实例变量  认识变量的作用域  区分合法的与非法的基本数据类型赋值 学习目标——变量与值传递 gzyangfan@gmail.com  Java变量是程序中最基本的存储单元  在Java中,每个变量都有类型  在使用变量之前,必须先声明变量的类型。类型可以 是基本类型,也可以是引用类型。 变量、声明与赋值 // 声明(Declare) int x; // 声明一个int类型的变量,变量名为x int y1, y2; // 同时声明多个变量 // 赋值(Assign) x = 1; // 可通过赋值运算符对变量进行赋值 y1 = y2 = 2; // 同时对多个变量赋值 int n1 = 10; // 变量的声明和赋值也可以同时进行 int n2 = 20, n3 = n1; // 赋值可以直接给出值, // 也可以通过引用另外一个变量的值进行 int result = n2 - n1; // 甚至还可把表达式的运算结果作为值 gzyangfan@gmail.com  基本类型的变量直接包含了具体的值,存储在栈 (Stack)中  范例: int x; // Step1 x = 1; // Step2 x = 2; // Step3 基本类型变量赋值详解 栈 Stack X : 0 Step1 栈 Stack X : 1 Step2 栈 Stack X : 2 Step3 gzyangfan@gmail.com  调用 new Xyz() 执行以下操作: ◦ a. 为对象分配内存。 ◦ b. 执行属性的显式初始化。 ◦ c. 执行构造器 ◦ d. 由 new 运算符返回对象引用。  将对象的引用值赋给变量。  示例: MyDate birthday = new MyDate(22, 7, 1964); 构造和初始化对象 gzyangfan@gmail.com  new 出来的对象被放置在堆(Heap)中  变量实际是指向一个对象的句柄(handle)  范例: MyDate d1; // Step1 d1 = new MyDate(); // Step2 d1.setYear(1999); // Step3 MyDate d2 = d1; // Step4 d1 = new MyDate(2008, 8, 8); // Step5 引用类型变量赋值详解 gzyangfan@gmail.com 引用类型变量赋值详解 栈 Stack d1 : null Step1 堆 Heap 栈 Stack d1 : 0x0FF Step2 堆 Heap 0x0FF year:2000 month:1 day:1 MyDate d1; // Step1 d1 = new MyDate(); // Step2 d1.setYear(1999); // Step3 MyDate d2 = d1; // Step4 d1 = new MyDate(2008, 8, 8); // Step5 gzyangfan@gmail.com 引用类型变量赋值详解 栈 Stack d1 : 0x0FF Step3 堆 Heap 栈 Stack d1 : 0x0FF d2 : 0x0FF Step4 堆 Heap 0x0FF year:1999 month:1 day:1 MyDate d1; // Step1 d1 = new MyDate(); // Step2 d1.setYear(1999); // Step3 MyDate d2 = d1; // Step4 d1 = new MyDate(2008, 8, 8); // Step5 0x0FF year:1999 month:1 day:1 gzyangfan@gmail.com 引用类型变量赋值详解 栈 Stack d1 : 0x1FF d2 : 0x0FF Step5 堆 Heap 0x0FF year:1999 month:1 day:1 MyDate d1; // Step1 d1 = new MyDate(); // Step2 d1.setYear(1999); // Step3 MyDate d2 = d1; // Step4 d1 = new MyDate(2008, 8, 8); // Step5 0x1FF year:2008 month:8 day:8 gzyangfan@gmail.com  在单独的虚拟机中, Java 只按值传递参数。  当对象实例作为一个参数传给方法时,该参数的值是 对这个对象的一个引用 。  可以在调用的方法中改变对象的内容 ,但原来对象 的引用从不改变。 参数传递 gzyangfan@gmail.com 该程序的输出结果是: 在方法内部:50 执行方法后:100 理解基本数据类型的参数传递 public class PassOne { public void changeInt(int value) { value = 50; System.out.println("在方法内部:" + value); } public static void main(String[] args) { PassOne pass = new PassOne(); int number = 100; pass.changeInt(number); System.out.println("执行方法后:" + number); } } gzyangfan@gmail.com 该程序的输出结果是: 执行方法前:1997-7-1 在方法内部:1999-12-20 执行方法后:1999-12-20 理解引用数据类型的参数传递 public class PassTwo { public void changeValue(MyDate date) { date.setYear(1999); date.setMonth(12); date.setDay(20); System.out.println("在方法内部 :" + date); } public static void main(String[] args) { PassTwo pass = new PassTwo(); MyDate d = new MyDate(1997, 7, 1); System.out.println("执行方法前 :" + d); pass.changeValue(d); System.out.println("执行方法后 :" + d); } } gzyangfan@gmail.com 该程序的输出结果是: 执行方法前:1997-7-1 在方法内部:1999-12-20 执行方法后:1997-7-1 理解引用数据类型的参数传递 public class PassThree { public void changeRef(MyDate date) { date = new MyDate(1999, 12, 20); System.out.println("在方法内部 :" + date); } public static void main(String[] args) { PassThree pass = new PassThree(); MyDate d = new MyDate(1997, 7, 1); System.out.println("执行方法前 :" + d); pass.changeRef(d); System.out.println("执行方法后 :" + d); } } gzyangfan@gmail.com  this 关键字用于以下几方面: ◦ 解决实例变量和参数之间的二义性 ◦ 将当前对象作为参数传递给另一个方法或构造器 this 引用 gzyangfan@gmail.com this 引用范例 public class MyDate { private int year = 2000; private int month = 1; private int day = 1; public MyDate(int year, int month, int day) { this.year = year; this.month = month; this.day = day; } // 方法 public int getYear() { return year; } public void setYear(int year) { this.year = year; } …… gzyangfan@gmail.com this 引用范例 public class Child { private String name; private Parent parent; public Child(String childName, String parentName) { name = childName; parent = new Parent(parentName, this); } public class Parent { private String name; private Child child; public Parent(String name, Child child) { this.name = name; this.child = child; } gzyangfan@gmail.com  局部变量是: ◦ 在方法内定义的变量,称为局部 变量、自动变量、临时变量 或堆栈变量 ◦ 方法执行时创建,方法退出时释放的变量  变量初始化包括如下内容: ◦ 局部变量需要显式地初始化。 ◦ 自动初始化实例变量。 变量及其作用域 局部变量在使用之前必须先初始化,编译器将会校验变量 是否被初始化过,没有初始化就使用变量会出现异常。 gzyangfan@gmail.com 变量及其作用域 public class Scope { private int i = 1; public void firstMethod() { int i = 4, j = 5; this.i = i + j; secondMethod(7); } public void secondMethod(int i) { int j = 8; this.i = i + j; } } public class ScopeTest { public static void main(String[] args) { Scope scope = new Scope(); scope.firstMethod(); } } gzyangfan@gmail.com 学习使用Eclipse进行程序调试  学会打断点  控制程序执行  观察变量值  运行于终止程序

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 2 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档

相关文档