当前位置:
文档之家› Java程序设计-6-1 类的定义
Java程序设计-6-1 类的定义
9
Java程序设计
6.3.2声明一个自定义类
一些类声明的实例 简单类 class Student{ … } 可被任一其它类访问的类-public public class Student{ … } 一个不可被继承的最终类-final public final class Student{ … } 一个抽象的类-abstract public abstract class Student{ …
Java程序设计
2 属性的访问
对可直接访问的类属性可以通过“类名.类属性” public class Student{ 访问,如System.out,也可通过“对象引用名.类 private String name; 属性名”访问; public String getName(){ 对可直接访问的对象属性可以通过“对象引用名. return ; 属性名”访问; } 在声明类时,一般为那些需要进行存取访问的属 public void setName(String name){ 性定义对应的getXxx()、setXxx()方法用来对 } 属性的存取访问,而不是直接访问属性值;
学习目标:
理解类和对象的概念及两者间的区别 掌握类的定义
1
Java程序设计
6.1.1 面向对象的基本概念
什么是对象
在面向对象的方法学中,“对象”是现实世界的实体或概 念在计算机逻辑中的抽象表示。 对象的最主要特点是以数据为中心,它是一个集成了数据 和其上操作的封装。封装隐藏了类的内部实现细节,强制 过程式的程序 =算法+数据; 类的使用者通过规定的接口访问对象,提高了代码的可维 护性。 面向对象的程序 =对象+消息。 对象是具有唯一对象名和固定对外接口的一组属性和操作 的集合,用来模拟组成或影响现实世界问题的一个或一组 因素。
11
Java程序设计
6.3.3属性声明(cont.)
元素 public | private | protected|default static final transient volatile type √ 必选 作用 访问控制范围修饰符加上缺省没有任何访问控制范围 修饰符的四种情况,规定了成员变量的可见范围 声明该变量为类变量 声明该变量为最终变量,一旦赋值则不可修改 标记该变量不被串行化,既变量值不能用于基于 socket的网络访问 一个变量被声明为 volatile,表明它可以被异步修改, 编程时需要注意 每个变量必须规定它的类型,可以是基本类型(int, float, double等),也可以是引用类型(某种类,如 Student, List等) 变量的名称,要符合标识符的规定,在同一个作用域 范围内名称不能重复。
5
Java程序设计
实例二:
//程序6-2:一个窗口程序 import javax.swing.JFrame; public class FrameDemo { public static void main(String[] args) { JFrame frm=new JFrame("我的窗口程序"); frm.setSize(400, 300); frm.setVisible(true); } }
}
14
Java程序设计
封装和信息隐藏
问题的提出:如下例:
public class Person {
public int age; public String name;
}
客户端程序可以直接访问内部的数据:
p1.age = -30;//错误的年龄 = “Mike”;
15
Java程序设计
Java程序设计
name
√
12
6.3.3属性声明(cont.)
1. 访问控制范围修饰符
一个类所定义的属性被其他对象访问所加的限制 表6-4 访问控制范围修饰符可见区域
名称 修饰符 类 子类 包 所有类
公共
友好
public
--
√
√
√
√
√
√
保护
私有 13
protected
private
√
√
√
√
Java程序设计
6.2使用JDK的类
表6-1 JDK的一些包 包 ng
ng.reflect java.io java.text
作用 包含Java语言的基础类,无需用import加载
提供类和接口,以获取关于类和对象的反射信息 通过数据流、序列化和文件系统提供系统输入和输出
7
Java程序设计
6.3.1类的结构
一个类的定义
import java.util.Date; public class Account { private String id; private String name; private double balance; private Date openDay; public String getId() { return id; } public void setId(String id) { this.id = id; } public String toString(){ return name+","+id+","+balance; } }
Java程序设计
4
实例一:使用Math类
//程序6-1:一个利用Math类产生随机数的程序 public class RandomDemo { public static void main(String[] args) { for(int i=0;i<10;i++){ //利用random方法产生一个0.0到1.0之间的随机数 double r=Math.random(); System.out.println("本次产生的随机数是:"+r); } } }
封装和信息隐藏(c.)
为了实现良好的封装性,将类的成员变量声明为 private,再通过特定的方法来对这个变量进行访问。 对变量的操作,一般有读取和赋值操作,分别定义两个 方法来实现这两种操作:getXxx()(Xxx表示要访问的 成员变量的名字) 用来读取这个成员变量操作, setXxx()用来对这个成员变量赋值,可以加一些控制代 码,使其合法性。 一个类通常就是一个小的模块,让模块公开必须要让外 界知道的内容,而隐藏其它的内容。 在进行程序的详 细设计时,应尽量避免一个模块直接修改或操作另一个 模块的数据,模块设计追求强内聚(许多功能尽量在类 的内部独立完成,不让外面干预),弱耦合(提供给外 部尽量少的方法调用)。
-sid : String -name : String -gender : char -birthdate : Date gender : char = 男 birthdate : Date = 1986-1-1
实例
化
李敏 : Studnet sid : String = 002 name : String = 李敏 gender : char = 女 birthdate : Date = 1986-12-1
17
ห้องสมุดไป่ตู้
Java程序设计
变量作用域
表6-5 变量作用域 备注 类方 类初始 所有对 成员方 代码 法 化块 象 法 块 √ √ √ √ √ 类变量 该类的所有 实例 √ √ 成员变量 所有成员方 法 √ √ 方法参数 同一方法内 局部变量 异常捕获 参数 18 √ √ 同一代码块 异常处理块 内
Java程序设计
} 一个继承了父类Student的类- extends public class Postgraduate extends Student { … } 一个继承了父类Student,并且实现了 一个接口的类
public class Postgraduate extends Student implements TakeTactics { … }
提供以与自然语言无关的方式来处理文本、日期、数字和 消息的类和接口 java.util 包含集合框架、遗留的 collection 类、事件模型、日期和 时间设施、国际化和各种实用工具类(字符串标记生成器、 随机数生成器和位数组) java.util.concurrent 在并发编程中很常用的实用工具类 javax.swing java.sql 提供网络编程的类和接口 提供支持"Swing"GUI组件的类。 提供有关数据库访问的接口和类
讨论: double r=Math.random();在应用模式上 和上面的程序有何不同
6
Java程序设计
6.3创建自己的类
在Java语言中,要想表示对象,首先必须有对象 所属的类存在,无论这个类是J2SDK开发包提供 的、第三方提供的或者就是开发人员自己定义的。 张华 : Studnet 类封装了一组对象的公共属性和方法 sid : String = 001 化 name : String = 张华 Studnet 实例
位置
//程序6-3:变量的作用域 public class TestScope { int x; public static void main(String[] args)
{
int x = 12; { int q = 96; // x和q都可用 int x = 3;//错误的定义,Java中不允许有这种嵌套定义 System.out.println("x is "+x); System.out.println("q is "+q); } q = x; /* 错误的行,只有x可用, q 超出了作用域范围 */ System.out.println("x is "+x);