Java教材课件05
合集下载
Java学习第五章.ppt
2
Opening Problem
Problem:
100 times
System.out.println("Welcome to Java!"); System.out.println("Welcome to Java!"); System.out.println("Welcome to Java!"); System.out.println("Welcome to Java!"); System.out.println("Welcome to Java!"); System.out.println("Welcome to Java!");
3
Introducing while Loops
int count = 0; while (count < 100) {
System.out.println("Welcome to Java"); count++; }
Liang, Introduction to Java Programming, Tenth Edition, Global Edition. © Pearson Education Limited 2015
… … …
System.out.println("Welcome to Java!"); System.out.println("Welcome to Java!"); System.out.println("Welcome to Java!");
Liang, Introduction to Java Programming, Tenth Edition, Global Edition. © Pearson Education Limited 2015
Java语言课件第5章
补充:别的进制数据分析 Integer.parseInt(String s, int radix) 例如,int x=Integer.parseInt("a8",16);
将数字字 符串分析 得到整数
某个进制,例: 2,8,16
x的值为168
Integer类的toString(int i, int radix)方法返回一个整数 的某种进制表示形式。 例如: Integer.toString(12,8)的结果为14
String类
比较两个字符串
String类
boolean equals(Object anObject) int compareTo(String anotherString) boolean equalsIgnoreCase(String anotherString)
String类
• INT COMPARETO(STRING ANOTHERSTRING)
Integer x=new Integer(346); int m=x.intValue();
(3) 包装类的STATIC方法
Character类提供有
isDigit(char ch) 可判断某字符是否为数字 ; isLetter(char ch) 可判断某字符是否为字母。
除Character类外的所有包装类均提供有静态方法 valueOf(String s),它将得到一个相应类型的对象。 例如:
/* 获取文件名,文件名是最后一个分隔符后面的子串 */
public String getname() {
int pos=stIndexOf(pathSeparator);
if (pos==-1)
return fullpath;
将数字字 符串分析 得到整数
某个进制,例: 2,8,16
x的值为168
Integer类的toString(int i, int radix)方法返回一个整数 的某种进制表示形式。 例如: Integer.toString(12,8)的结果为14
String类
比较两个字符串
String类
boolean equals(Object anObject) int compareTo(String anotherString) boolean equalsIgnoreCase(String anotherString)
String类
• INT COMPARETO(STRING ANOTHERSTRING)
Integer x=new Integer(346); int m=x.intValue();
(3) 包装类的STATIC方法
Character类提供有
isDigit(char ch) 可判断某字符是否为数字 ; isLetter(char ch) 可判断某字符是否为字母。
除Character类外的所有包装类均提供有静态方法 valueOf(String s),它将得到一个相应类型的对象。 例如:
/* 获取文件名,文件名是最后一个分隔符后面的子串 */
public String getname() {
int pos=stIndexOf(pathSeparator);
if (pos==-1)
return fullpath;
Java课件(第五章)
静态属性与实例属性的比较
在Cust类中,增加属性bankName代表账 户所属的银行,因为它是每个账户所共有 的,将其定义为静态属性。再创建一个账 户总数(或总编号)allNum,它代表当前一共 创建了多少个账户,也不属于任何一个账 户对象,而是属于Cust类的,也将其定义 为静态属性。最后定义一个流水编号,它 是对象所独有的,应该定义为实例属性。
Public class TestThis{ public static void main(String[] args){ SimpleClass simple=new SimpleClass(); simple.test(); System.out.print(“simple对象中a的值 为:”); System.out.println(simple.a); }
如果将对象比作汽车,那么类就是汽车的设计图纸。 所以面向对象程序设计的重点是类的设计,而不是对 象的设计。
类的定义
class Person { int age; void shout() {System.out.println(“oh,my god! I am “ + age);} } • age是类的属性 ,也叫类成员变量 。 • shout是方法也叫类的成员函数。 • shout方法可以直接访问同一个类中的age变量 , 如果一个方法中有与成员变量同名的局部变量, 该方法中对这个变量名的访问是局部变量,而 不再是成员变量。
运行结果
X=103
静态代码块
• 一个类中可以使用不包含在任何方法体中的静态 代码块(static block ),当类被载入时,静态代码 块被执行,且只被执行一次,静态块经常用来进 行类属性的初始化。 • 类中的静态代码块被自动执行,尽管我们产生了 类的多个实例对象,但其中的静态代码块只被执 行了一次。当一个程序中用到了其他的类,类是 在第一次被使用的时候才被装载,而不是在程序 启动时就装载程序中所有可能要用到的类。
Java05(第5章java swing基础)
表格( 表格(JTable) )
使用数组处理数据(见教材P142) 使用数组处理数据(见教材 )
树(JTree) )
树结构(见教材P147) 树结构(见教材 )
下课! 下课!
�
窗体内不能直接安放组件, 窗体内不能直接安放组件,也不 能设置布局管理器,而要使用Awt 能设置布局管理器,而要使用 的虚拟容器Container. 的虚拟容器 . 关闭窗体: 关闭窗体:
setDefaultCloseOperation(JFrame.EXIT_ ON_CLOSE);
【例5-1】 应用 】 应用JFrame类建立 类建立 一个窗体
HORIZONTAL_SPLIT (水平拆分) 水平拆分) 或 VERTICAL_SPLIT (垂直拆分) 垂直拆分)
在组件上使用图标 创建图标类 创建图标类Icon的构造方法: 的构造方法: 的构造方法 ImageIcon("图像文件"); 图像文件" 图像文件 也可以直接使用 也可以直接使用ImageIcon类 类
见教材P127【例5-1】 【 见教材 】
【例5-3】 建立一个可拆分的窗体. 】 建立一个可拆分的窗体.
关键点: 关键点: 拆分窗体类为JSplitPane 拆分窗体类为
拆分窗体类JSplitPane 拆分窗体类
JSplitPane的构造方法: 的构造方法: 的构造方法 JSplitPane(拆分方式 组件1,组件 拆分方式,组件 组件2) 拆分方式 组件 组件 其中拆分方式为: 其中拆分方式为:
Java语言程序设计 语言程序设计
清华大学出版社
第5章 Swing组件 章 组件
第5章 章
Swing组件 组件
1,为什么要使用Swing ,为什么要使用 2,JFrame类的使用 , 类的使用 3,常用组件 子类) ,常用组件(JComponent子类 子类 4,表格 ,表格(JTable) 5,树(JTree) ,
Java程序设计基础第五章精品PPT课件
{ return(x+y+z); }
public static void main(String[] args) {
System.out.println("Sum is:"+add(8.5,2.3));
} } 11.10.2020
5
保护访问控制符protected说明
➢用protected修辞的数据成员和方法可以被 该类自身、同一包中的其他类以及其他 包中的该类的子类
➢其主要作用就是允许其他包中的该类的 子类来访问父类的特定属性
11.10.2020
6
缺省访问控制符示例
➢ 位于default包中的Human.java
– (1)以相似的方式处理相近概念
– (2)使程序更易于扩展
Java中提供两种多态机制:
– 重载:同一类中定义了多个同名而不同内容的 成员方法
– 覆盖:子类可以重新定义与父类同名的成员方
法,使父类方法在子类对象中不复存在。
11.10.2020
11
重载示例
重载的方法主要通过形式参数列表中参数的个数、参数的数
第7章 Java 语言类的特性
1 类的私有成员与公共成员及访问控制 2 多态机制——方法的重载 3 构造方法 4 类的静态成员 5 对象的应用
11.10.2020
1
1 访问控制
类
数据成员与方法
Public
Public
所有类
缺省
包中类(含当前类)
Protected
包中类(含当前 包中类(含当前类) 类),所有子类
Human man=new Human();
System.out.println();
Java教材课件第五章
21
接口的功能: (1)通过接口可以实现不相关类的相同行为, 而不需要考虑这些类之间的层次关系 (2)通过接口可以指明多个类需要实现的方法 (3)通过接口可以了解对象的交互界面,而不 需要了解对象所对应的类 (4)通过接口可以在运行时动态地定位类所调 用的方法
包(package):是类和接口的集合,它体现了 java 面向对象编程特性中的封装机制。消除了不同 组的类中潜在的类名冲突。 • java 中的类库被包含在一个叫做 java 的包里。 Java包里的类可以用于任何 java 实现中,而且也是 惟一被确认为在各种不同的实现中可用的类集。 Java 包中包含了更小的包,这些包定义了 java 语 言的功能中的某些特定子集,比如:标准特性、文 件管理、多媒体和许多其它功能。
18
接口的声明仅仅给出了抽象方法,相当于程 序早期开发的一组协议,而具体地实现接口所规定 的方法,则需某个类为接口中的每个抽象方法定义 具体的操作来实现这个接口。 注意以下问题:
(1)一个类可以实现多个接口,在 implements 子句中用逗号分开
(2)如果实现某接口的类不是 abstract 修饰的抽 象类,则在类的定义部分必须实现指定接口的所有 抽象方法。
注意: 子类只能有一个父类 如果省略了extends,子类的父类是Object 子类继承了父类和祖先的成员,可以使用 这些成员 子类可以添加新的成员变量和方法,也可 以隐藏父类的成员变量或覆盖父类的成员 方法
5.1.2 成员变量的继承和隐藏 成员变量的隐藏指子类重新定义了父类中 的同名变量,子类执行自己的方法时操作 的是子类的变量,子类执行父类方法时操 作的是父类的变量。
S tudent 学 生 大学生 UndergraduateS tudent 研究生 G raduateS tudent
接口的功能: (1)通过接口可以实现不相关类的相同行为, 而不需要考虑这些类之间的层次关系 (2)通过接口可以指明多个类需要实现的方法 (3)通过接口可以了解对象的交互界面,而不 需要了解对象所对应的类 (4)通过接口可以在运行时动态地定位类所调 用的方法
包(package):是类和接口的集合,它体现了 java 面向对象编程特性中的封装机制。消除了不同 组的类中潜在的类名冲突。 • java 中的类库被包含在一个叫做 java 的包里。 Java包里的类可以用于任何 java 实现中,而且也是 惟一被确认为在各种不同的实现中可用的类集。 Java 包中包含了更小的包,这些包定义了 java 语 言的功能中的某些特定子集,比如:标准特性、文 件管理、多媒体和许多其它功能。
18
接口的声明仅仅给出了抽象方法,相当于程 序早期开发的一组协议,而具体地实现接口所规定 的方法,则需某个类为接口中的每个抽象方法定义 具体的操作来实现这个接口。 注意以下问题:
(1)一个类可以实现多个接口,在 implements 子句中用逗号分开
(2)如果实现某接口的类不是 abstract 修饰的抽 象类,则在类的定义部分必须实现指定接口的所有 抽象方法。
注意: 子类只能有一个父类 如果省略了extends,子类的父类是Object 子类继承了父类和祖先的成员,可以使用 这些成员 子类可以添加新的成员变量和方法,也可 以隐藏父类的成员变量或覆盖父类的成员 方法
5.1.2 成员变量的继承和隐藏 成员变量的隐藏指子类重新定义了父类中 的同名变量,子类执行自己的方法时操作 的是子类的变量,子类执行父类方法时操 作的是父类的变量。
S tudent 学 生 大学生 UndergraduateS tudent 研究生 G raduateS tudent
Java基础第5章课件
程启动后,系统会自动调用run()方法,如果子类重写了该方 法便会执行子类中的方法。
第八页,编辑于星期三:点 二十二分。
5.2 线程的创立
让IT教学更简单,让IT学习更有效
• 5.2.1 继承Thread类创立多线程 • 通过继承Thread类的方式来实现多线程
第九页,编辑于星期三:点 二十二分。
第十二页,编辑于星期三:点 二十二分。
5.2 线程的创立
让IT教学更简单,让IT学习更有效
• 5.2.2 实现Runnable接口创立多线程
• 实现Runnable接口创立多线程
第十三页,编辑于星期三:点 二十二分。
5.2 线程的创立
让IT教学更简单,让IT学习更有效
• 5.2.2 实现Runnable接口创立多线程 • 运行结果
多线程通信
第二页,编辑于星期三:点 二十二分。
5.1 线程概述
让IT教学更简单,让IT学习更有效
• 5.1.1 进程 • 在一个操作系统中,每个独立执行的程序都可称之为一个进程
,也就是“正在运行的程序〞。 • 目前大局部计算机上安装的都是多任务操作系统,即能够同时
执行多个应用程序。 • 在计算机中,所有的应用程序都是由CPU执行的,对于一个CPU
• 单线程的程序在运行时,会按照代码的调用顺序进行执行。而在
多线程中,main()方法和MyThread类的run()方法却可以同时运
行,互不影响,这正是单线程和多线程的区别。
单线程
多线程
Example01.main()
Example01.main()
MyThread.run()
while语句 打印语句
第十一页,编辑于星期三:点 二十二分。
第八页,编辑于星期三:点 二十二分。
5.2 线程的创立
让IT教学更简单,让IT学习更有效
• 5.2.1 继承Thread类创立多线程 • 通过继承Thread类的方式来实现多线程
第九页,编辑于星期三:点 二十二分。
第十二页,编辑于星期三:点 二十二分。
5.2 线程的创立
让IT教学更简单,让IT学习更有效
• 5.2.2 实现Runnable接口创立多线程
• 实现Runnable接口创立多线程
第十三页,编辑于星期三:点 二十二分。
5.2 线程的创立
让IT教学更简单,让IT学习更有效
• 5.2.2 实现Runnable接口创立多线程 • 运行结果
多线程通信
第二页,编辑于星期三:点 二十二分。
5.1 线程概述
让IT教学更简单,让IT学习更有效
• 5.1.1 进程 • 在一个操作系统中,每个独立执行的程序都可称之为一个进程
,也就是“正在运行的程序〞。 • 目前大局部计算机上安装的都是多任务操作系统,即能够同时
执行多个应用程序。 • 在计算机中,所有的应用程序都是由CPU执行的,对于一个CPU
• 单线程的程序在运行时,会按照代码的调用顺序进行执行。而在
多线程中,main()方法和MyThread类的run()方法却可以同时运
行,互不影响,这正是单线程和多线程的区别。
单线程
多线程
Example01.main()
Example01.main()
MyThread.run()
while语句 打印语句
第十一页,编辑于星期三:点 二十二分。
5Java基础第5章课件
再如: String[ ][ ] AS = new String[3][4];
让IT教学更简单,让IT学习更有效
AS:xxx
5.2 多维数组
让IT教学更简单,让IT学习更有效
5.2.2 二维数组的初始化
(2) 从最高维开始(而且必须从最高维开始),分别为每一维 分配空间,此时二维数值中每行的元素个数可以不相等。
– 3、数组排序
• 在操作数组时,经常需要对数组中元素进行排序。
5.1 一维数组
让IT教学更简单,让IT学习更有效
• 5.1.3 数组的常见操作
– 3、数组排序
• 在操作数组时,经常需要对数组中元素进行排序。
bubbleSort ()方法中通过一个嵌套for循环实现了冒泡排序。
5.1 数组
让IT教学更简单,让IT学习更有效
• 第二步,除了最后一个元素,将剩余的元素继续进行两两比较,过程与第一步相 似,这样就可以将数组中第二大的数放在了倒数第二个位置。
• 第三步,以此类推,持续对越来越少的元素重复上面的步骤,直到没有任何一对 元素需要比较为止。
5.1 一维数组
让IT教学更简单,让IT学习更有效
• 5.1.3 数组的常见操作
5.1.1 一维数组的定义---元素为引用数据类型的数组
public class TestArry {
public static void main(String[] args) {
2019 10
Date[] days;
1
days = new Date[3];
for(int i = 0; i < 3; i++) {
5.2 多维数组
让IT教学更简单,让IT学习更有效
让IT教学更简单,让IT学习更有效
AS:xxx
5.2 多维数组
让IT教学更简单,让IT学习更有效
5.2.2 二维数组的初始化
(2) 从最高维开始(而且必须从最高维开始),分别为每一维 分配空间,此时二维数值中每行的元素个数可以不相等。
– 3、数组排序
• 在操作数组时,经常需要对数组中元素进行排序。
5.1 一维数组
让IT教学更简单,让IT学习更有效
• 5.1.3 数组的常见操作
– 3、数组排序
• 在操作数组时,经常需要对数组中元素进行排序。
bubbleSort ()方法中通过一个嵌套for循环实现了冒泡排序。
5.1 数组
让IT教学更简单,让IT学习更有效
• 第二步,除了最后一个元素,将剩余的元素继续进行两两比较,过程与第一步相 似,这样就可以将数组中第二大的数放在了倒数第二个位置。
• 第三步,以此类推,持续对越来越少的元素重复上面的步骤,直到没有任何一对 元素需要比较为止。
5.1 一维数组
让IT教学更简单,让IT学习更有效
• 5.1.3 数组的常见操作
5.1.1 一维数组的定义---元素为引用数据类型的数组
public class TestArry {
public static void main(String[] args) {
2019 10
Date[] days;
1
days = new Date[3];
for(int i = 0; i < 3; i++) {
5.2 多维数组
让IT教学更简单,让IT学习更有效
Java语言程序设计第五章PPT教学课件
voidpf5u(b)l;icpuvobildicfv3o( i)d{f5}( ){
}
public vpoSuiydbslfti4ecm(c)l.ao{sus}t.Tpersitn{tln("我就对f5( )方法感兴趣!");
public} voidpfu5b(l)ic{st}atic void main(String[ ] args) {
作用二:继承时,可用来修饰父类方法,防止 子类同名方法发生重写。
public class Mammal {
public final void call( ) {
System.out.println("哺乳动物会叫。");
}
public class Cat extend Mammal {
}
public void call() { //编译时发生错误
}
Line l = new Line();
public class Line implemCiercnltescS=hanpeew{Circle();
6
6
接口
演示接口
当所有方法均为抽象的,即没有具体实现时, 可使用interface关键字定义为接口,它是某个 事物对外提供的一些功能的申明 。
接口中的方法均为抽象声明的,及没有具体实 现;接口中的属性均为静态常量。
使用implements关键字来实现接口,可以利用 接口实现多态。
7
7
接口
接口中的方法不能有任何方法体实现。
声明抽象类语法:
– abstract class{…… }
应用场合:父类中的某些抽象方法不包含任何 逻辑,子类可以通过方法重写的机制提供这种 抽象方法的实现细节。
Java编程基础(2005ppt)
Java网络编程(Socket) 网络编程( 网络编程 )
Java网络编程(Socket)续 网络编程( 网络编程 ) 连接作为一个IO流对象对待 BufferStream可以提高频繁交互的效率 由于套接字使用了重要的非内存资源,必须特别 谨慎,自己动手将它们清除 尽可能的使用缓冲区,不要占用网络交互时间
Java多线程(Example续) 多线程( 多线程 续
两个线程拥有自己的私有拷贝而不和主存一致。如 果要避免这种行为出现,那么私有本机变量和主存 必须满足以下两个条件: 变量使用volatile声明 被访问的变量处于同步方法或者同步块中
Java多线程(Tips) 多线程( 多线程
如果变量被声明为volatile,在每次访问时都会和主存一 致。这个一致性是由Java语言保证的。 另外,如果变量在同步方法或者同步块中被访问,当在 方法或者块的入口处获得锁以及方法或者块退出时释放 锁是变量被同步。 如果你更新很多变量,那么使用volatile可能比使用同步 更慢。如果变量被声明为volatile,那么在每次访问时都 会和主存一致。与此对照,使用同步时,变量只在获得 锁和释放锁的时候和主存一致。
wait、notify和notifyAll
调用wait()会释放占用的锁资源 notifyAll()会通知所有等待该对象解锁的所有线程,然后这些线程通过竞 争获得该对象的锁 notify()只是通知等待解锁的线程之一。
public synchronized int get() { while (available == false) { try { // 等待生产者产生数据 wait(); } catch (InterruptedException e) { } } available = false; // 通知生产者数据已经消费 notifyAll(); return contents; } public synchronized void put(int value) { while (available = (InterruptedException e) { } } contents = value; available = true; // 通知消费者数据已经产生 notifyAll(); }
Java教程第五章PPT
5.1.3 特定于对象的消息
特定于对象的消息是指将所有能支持此对象可 接受消息的方法集中在一起,形成一个大消息, 称为特定于对象的消息。这些消息让对象执行这 个方法而不管它可能做什么及怎么做。特定于对 象的消息可分为三种类型: 1)可以返回对象内部状态的消息; 2)可以改变对象内部状态的消息; 3)可以做一些特定操作,改变系统状态的消息。
} } class studentScore { private int no; private double score; public void sendScore(int cno,double cscore) { no=cno; score=cscore; } void printScore() { System.out.println("No:"+no+" score:"+score); } } public class c5_1
class classArea { double lon,wid; double area(double x,double y) { double s; lon=x; wid=y; s=lon*wid;//求矩形面积 return s;//返回面积值 } }
类、数据成员和成员方法的访问控制符及其作用
5.2.1 公共访问控制符public
当一个类的访问控制符为public时,表明这个 类作为整体对其他类是可见和可使用的,这个类 就具有了被其他包中的类访问的可能性。但是, 处于不同包中的public类作为整体对其他类是可 见的,并不代表该类的所有数据成员和成员方法 也同时对其他类是可见的,这得由这些数据成员 和成员方法的修饰符来决定。只有当public类的 数据成员和成员方法的访问控制符也被声明为 public时,这个类的所有用public修饰的数据成 员和成员方法才同时对其他类也是可见的。 需要注意的是,数据成员和成员方法的访问控 制符被声明为public时,会造成安全性和封装性 下降,所以一般应尽量少用。
Java语言程序设计基础教程课件第5章
(2)public String(String original):初始化一 个新创建的String对象,表示一个与该参数 original相同的字符序列;换句话说,新创建的 字符串是该参数字符串的一个副本。由于 String是不可变的,不必使用该构造方法,除 非需要original 的显式副本。
Java语言中提供了大量的类库共程序开发者来使用,了 解类库的结构可以帮助开发者节省大量的编程时间,而 且能够使编写的程序更简单更实用。Java中丰富的类库 资源也是Java语言的一大特色,是Java程序设计的基础。
Java常用包的简单介绍如下:
1)ng包:主要含有与语言相关的类。ng包 由解释程序自动加载,不需要显示说明。Java语言包 (ng)定义了Java中的大多数基本类。该包中包含 了Object类,Object类是整个类层次结构的根结点,同时 还定义了基本数据类型的类,如:String、Boolean、 Byter、Short等。这些类支持数字类型的转换和字符串的 操作,在前面的章节中已经涉及了部分内容,本章主要介 绍该包中的Math类和字符串类。
One = Two;
System.out.println("赋值后,One.equals(Two)是" + (One.equals(Two)));
System.out.println("赋值后,One==Two是" + (One == Two));
}
}
可以看出,对于字符串变量来说,使用“==”运算符 和“equals()”方法来比较,其比较方式是不同的。 “==”运算符用于比较两个变量本身的值,即两个对 象在内存中的首地址;“equals()”方法比较的是两个 字符串中所包含的内容是否相同。对于非字符串类型 的变量来说,“==”运算符和“equals()”方法都用来 比较其所指对象在堆内存中的首地址,即比较两个类 类型的变量是否指向同一个对象。对于a3和a4这两个 由字符串常量生成的变量,其所存放的内存地址是相 同的。
Java语言中提供了大量的类库共程序开发者来使用,了 解类库的结构可以帮助开发者节省大量的编程时间,而 且能够使编写的程序更简单更实用。Java中丰富的类库 资源也是Java语言的一大特色,是Java程序设计的基础。
Java常用包的简单介绍如下:
1)ng包:主要含有与语言相关的类。ng包 由解释程序自动加载,不需要显示说明。Java语言包 (ng)定义了Java中的大多数基本类。该包中包含 了Object类,Object类是整个类层次结构的根结点,同时 还定义了基本数据类型的类,如:String、Boolean、 Byter、Short等。这些类支持数字类型的转换和字符串的 操作,在前面的章节中已经涉及了部分内容,本章主要介 绍该包中的Math类和字符串类。
One = Two;
System.out.println("赋值后,One.equals(Two)是" + (One.equals(Two)));
System.out.println("赋值后,One==Two是" + (One == Two));
}
}
可以看出,对于字符串变量来说,使用“==”运算符 和“equals()”方法来比较,其比较方式是不同的。 “==”运算符用于比较两个变量本身的值,即两个对 象在内存中的首地址;“equals()”方法比较的是两个 字符串中所包含的内容是否相同。对于非字符串类型 的变量来说,“==”运算符和“equals()”方法都用来 比较其所指对象在堆内存中的首地址,即比较两个类 类型的变量是否指向同一个对象。对于a3和a4这两个 由字符串常量生成的变量,其所存放的内存地址是相 同的。
JAVA 05 继承与多态
代码重用
易于维护
可扩展性
CD -artist -numberOfTracks +getArtist() +getNumberOfTracks() DVD -director +getDirector()
extends
extends class SubClassName extends BaseClassName
DanceGroup ControlPanel
Band
Waltz Rumba
Cha-Cha
Dancer
Salsa
接口(cont’d)
实现和使用接口
• class ClassName extends BaseClass implements Interface1,Interface2{…}
定义接口
类与接口(相似)
class interface
A superclass provides a secondary An interface provides a secondary data type to objects of its subclasses. data type to objects of classes that implement that interface. An abstract class cannot be instantiated. A concrete subclass of an abstract class must define all the inherited abstract methods. A class can extend another class. A subclass can add methods and override some of its superclass’s methods. An interface cannot be instantiated. A concrete class that implements an interface must define all the methods specified by the interface. An interface can extend another interface (called its superinterface) by adding declarations of abstract methods
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
15
5.2 访问控制符和封装
同一包内的其他类 同一包的子类 同一包的其他类(不是同一个文件 同一包的其他类 不是同一个文件) 不是同一个文件 不同包的子类 不同包的其他类
16
5.2 访问控制符和封装
public 可被相同包的非子类访问 可被相同包的子类访问 可被不同包的非子类访问 可被不同包的子类访问 可被相同包的子类继承 可被不同包的子类继承 Yes Yes Yes Yes Yes Yes default Yes Yes No No Yes No protected Yes Yes No No Yes Yes private No No No No No No
第5章 Java面向对象程序设计 教学目的要求
理解java语言的面向对象技术,包括面向对象的基本 概念、面向对象的程序设计方法; 理解java中的类、包、对象、抽象类、接口和面向对 象的特性; 掌握Java语言中类、方法和接口的基本定义及使用方 法; 了解包的概念及打包和引入方法; 通过技能实训,掌握一般Java程序的面向对象编程方法, 达到熟练开发Java一般程序的目的。
6
5.1.1 类的定义
4.成员方法
[方法修饰符] <方法返回值类型> <方法名> ([<参数列表>]){方法体} 方法修饰符] <方法返回值类型> <方法名> ([<参数列表>]){方法体} 方法返回值类型 方法名 参数列表>]){方法体
⑴ 方法修饰符 (public、private、protected、final、static、abstract 、synchronized ) public 可被所有类访问 private 只能被本类访问 protected 被相同包的类访问 ⑵ 方法的返回值类型 返回值的类型为Java语言的任何数据类型。 如果一个成员方法不需要返回值,则其返回值的类型被说明为void。 如果有返回值,那么return语句要带参数,并且return语句中返回的 数据类型必须与方法说明中的方法返回值的类型一致。
5.1.1 类的定义
3.成员变量
[public | protected | private ] [static] [final] type variableName; public private protected static: final: 默认: 可被所有类访问 只能被本类访问 被相同包的类和其子类访问访问 静态变量(类变量);相对于实例变量 常量 被包访问。
7
5.1.1 类的定义
⑶方法名 成员方法名是Java语言合法的标识符。 ⑷参数列表 成员方法的参数列表是由逗号分隔的类型及参数名组成,是可 选项。 ⑸方法体
方法体是方法定义的主要部分,包含了实现方法功能的代码。 在方法体中可以定义局部变量,它的作用域仅在方法体内。 方法体用“{}”括起来。
Person.java
8
【例5-2】定义一个方法,方法功能为根据参数r的大小,返回圆的面积。 在类中赋参数r,并且输出面积值。 public class Li5_02{ public static void main(String args[]){ double k; Li5_02 mj=new Li5_02(); k=mj.area(5); System.out.println(k); } public double area(int r){ //定义area方法,带有一个参数 final double PI=3.14; //定义常量PI,并赋初值3.14 return PI*r*r; //根据r的值,计算面积后,返回面积值 } } 运行结果为: 78.5
1
本章内容
5.1 类 5.2 访问控制符与封装 5.3 继承 5.4 非访问控制符接口 5.5 Java的名字空间和包 5.6 接口
2
5.1 类
5.1.1 类的定义 5.1.2 类的使用 5.1.3 方法重载 5.1.4 内部类
3
5.1.1 类的定义
1.类声明
类声明中包括关键字Class,类名及类的属性。类声明的格式 如下: [<修饰符 class <类名 [extends<父类 修饰符>] 类名> 父类>][implements<接口名 接口名>] 修饰符 类名 父类 接口名 类定义修饰符 定义类的性质(abstract \final)和访问权限 (public 或默认) extends 说明父类 implements说明实现的接口
21
5.3 继承
调用构造方法遵循以下的几条规则:
⑴ 当一个类创建对象时,可以调用该类的父类的构造方法。调用父类的构 造方法很简单,只要在类的构造方法的方法体中,第一条为super语句就 可以了。super可以调用父类的任何一个带入口参数或不带入口参数的构 造方法。 ⑵ 如果一个类的构造方法中第一条语句没有用super来调用父类的构造方法, 则编译器也会默认在构造方法中用super()语句调用父类的无参构造方 法。 ⑶ 如果某个类的构造方法的第一条语句是用this()来调用本类的另外一 个构造方法,那么Java系统就不会默认这个构造方法调用父类的构造方法。 ⑷ 若一个构造方法用this()语句调用本类的另一个构造方法时,如果被 调用的构造方法又要调用父类的构造方法而又没有用super语句,那么编 译器会默认它含有super()语句。此时,父类中若不存在无参的构造方 法,也将会导致编译出错。
5.1.2 类的使用
(4)对象释放
把指向该对象的值设置为null。该对象便成了无用对象,Java系统通 过垃圾回收器GC(Garbage Collector)周期性地释放无用对象所使 用的内存,完成对象的清除工作。 当不存在着对一个对象的引用时,该对象就成为一个无用对象。 GC自动扫描对象的动态内存区,对被引用的对象添加标记,然后把没 有引用的对象作为垃圾收集起来并加以释放。 GC在Java中作为一个线程来运行的,即调用System.gc(),当要求垃 圾收集时,该线程与系统同步运行;否则在系统空闲之时异步地运行。 此外,在Java系统开始运行时,会自动调用一个名为finalize()方法, 使它清除对象所占的内存。
4
5.1.1 类的定义
2.类主体
类主体是Java类的主体部分,完成变量的说明以及方法的定 义及实现。在类中,用变量来说明类的状态,而用方法来实 现类的行为。包含类主体的类结构如下: <类声明> { <成员变量的声明> <成员方法的声明及实现> } 注意: Java语言中没有独立的函数和过程,所有的子程序都是作为 类方法定义的。 5
5.3 继承
5.3.3 super和this
Java提供了关键字super super来实现对父类的成员和方法的访 super 问。Super有三种情况可以使用: ⑴ 用来访问父类中被覆盖的方法; ⑵ 用来调用父类中的构造方法; ⑶ 用来访问父类中被隐藏的成员变量。 例5-8 this表示实例对象指向自己的应用,一般有两种使用情 this 况: (1)若方法参数或局部变量与实例成员同名,同名的实例成 员变量会被隐蔽,可以实用this对成员变量显示引用。 (2)返回实例对象本身的引用。
5.3 继承
5.3.2 变量隐藏和方法覆盖
变量隐藏:子类的成员变量和父类的成员变量同名。 子类如果要调用父类的变量,则必须借用关键字super。 方法覆盖(overriding):子类的方法名与父类的方法名相同 (返回值的类型和入口参数的数目、类型均相同。 注意:
方法覆盖与重载均是Java多态的技巧之一,但两者之间也有不同之 处: 重载(overloading),指在同一个类中,定义多个名称相同,但 参数个数或类型不同的方法,Java根据参数的个数或类型,调用相 对应的方法。 覆盖(overriding),是指在子类中,定义名称、参数个数与类型 均与父类相同的方法,用以改写父类中的方法的功能。 20
9
5.1.1 类的定义
5.构造方法 5.构造方法
当用new创建一个类的新的对象时,构造方法立即执行。 构造方法名字必须与类名相同。 构造方法的语法为: public 类名([参数列表]){ [语句序列;] } 注意: ⑴ 构造方法没有返回值类型,甚至没有void。其修饰符只能是访问控制修饰符, 即public、private、protected中的任一个。 ⑵ 构造方法不能从父类中继承。 ⑶ 构造方法可以重载,一个类可以有任意多个构造方法。不同的构造方法根据 参数的不同状态来选择合适的构造方法。 ⑷ 构造方法不能直接通过方法名引用,必须通过new运算符。 ⑸ 在构造方法中可以调用当前类和其父类的另一个构造方法,但必须是方法体 的第一条语句。使用当前类的构造方法用this来引用,使用其父类的构造方 法用super来引用。
Java通过接口实现多重继承
24
5.3.5 对象类型转换
Java中两个不同类型对象之间也可以转换,但是只在子类和父类的对象 之间进行转换,而不是任意两个类。 一个子类对象的类型可以向上转换成它的父类类型,这个转换过程是安 全的。转换过程中会丢失属于子类而不属于父类的信息。 反过来,一个父类对象的类型未必可以向下转换成子类的对象的类型, 因为子类具有的信息,父类未必包含。所以只有当父类对象实际上是子 类的一个实例的时候,才可以转换,否则不能进行这种转换。
10
5.1.2 类的使用
(1) 对象创建
new运算符用于创建一个类的实例并返回对象的引用。 一般格式为: type 对象名=new type([参数列表]); 对象的声明并不为对象分配内存空间。用运算符new 为对象分配内存空间,实例化一个对象。比如: String UserName=new String(“zhangsan”);
同一包内的其他类(同一个文件) 同一包的子类(同一个文件) 同一包的其他类(不是同一个文件)Leabharlann 不同包的子类 不同包的其他类
5.2 访问控制符和封装
同一包内的其他类 同一包的子类 同一包的其他类(不是同一个文件 同一包的其他类 不是同一个文件) 不是同一个文件 不同包的子类 不同包的其他类
16
5.2 访问控制符和封装
public 可被相同包的非子类访问 可被相同包的子类访问 可被不同包的非子类访问 可被不同包的子类访问 可被相同包的子类继承 可被不同包的子类继承 Yes Yes Yes Yes Yes Yes default Yes Yes No No Yes No protected Yes Yes No No Yes Yes private No No No No No No
第5章 Java面向对象程序设计 教学目的要求
理解java语言的面向对象技术,包括面向对象的基本 概念、面向对象的程序设计方法; 理解java中的类、包、对象、抽象类、接口和面向对 象的特性; 掌握Java语言中类、方法和接口的基本定义及使用方 法; 了解包的概念及打包和引入方法; 通过技能实训,掌握一般Java程序的面向对象编程方法, 达到熟练开发Java一般程序的目的。
6
5.1.1 类的定义
4.成员方法
[方法修饰符] <方法返回值类型> <方法名> ([<参数列表>]){方法体} 方法修饰符] <方法返回值类型> <方法名> ([<参数列表>]){方法体} 方法返回值类型 方法名 参数列表>]){方法体
⑴ 方法修饰符 (public、private、protected、final、static、abstract 、synchronized ) public 可被所有类访问 private 只能被本类访问 protected 被相同包的类访问 ⑵ 方法的返回值类型 返回值的类型为Java语言的任何数据类型。 如果一个成员方法不需要返回值,则其返回值的类型被说明为void。 如果有返回值,那么return语句要带参数,并且return语句中返回的 数据类型必须与方法说明中的方法返回值的类型一致。
5.1.1 类的定义
3.成员变量
[public | protected | private ] [static] [final] type variableName; public private protected static: final: 默认: 可被所有类访问 只能被本类访问 被相同包的类和其子类访问访问 静态变量(类变量);相对于实例变量 常量 被包访问。
7
5.1.1 类的定义
⑶方法名 成员方法名是Java语言合法的标识符。 ⑷参数列表 成员方法的参数列表是由逗号分隔的类型及参数名组成,是可 选项。 ⑸方法体
方法体是方法定义的主要部分,包含了实现方法功能的代码。 在方法体中可以定义局部变量,它的作用域仅在方法体内。 方法体用“{}”括起来。
Person.java
8
【例5-2】定义一个方法,方法功能为根据参数r的大小,返回圆的面积。 在类中赋参数r,并且输出面积值。 public class Li5_02{ public static void main(String args[]){ double k; Li5_02 mj=new Li5_02(); k=mj.area(5); System.out.println(k); } public double area(int r){ //定义area方法,带有一个参数 final double PI=3.14; //定义常量PI,并赋初值3.14 return PI*r*r; //根据r的值,计算面积后,返回面积值 } } 运行结果为: 78.5
1
本章内容
5.1 类 5.2 访问控制符与封装 5.3 继承 5.4 非访问控制符接口 5.5 Java的名字空间和包 5.6 接口
2
5.1 类
5.1.1 类的定义 5.1.2 类的使用 5.1.3 方法重载 5.1.4 内部类
3
5.1.1 类的定义
1.类声明
类声明中包括关键字Class,类名及类的属性。类声明的格式 如下: [<修饰符 class <类名 [extends<父类 修饰符>] 类名> 父类>][implements<接口名 接口名>] 修饰符 类名 父类 接口名 类定义修饰符 定义类的性质(abstract \final)和访问权限 (public 或默认) extends 说明父类 implements说明实现的接口
21
5.3 继承
调用构造方法遵循以下的几条规则:
⑴ 当一个类创建对象时,可以调用该类的父类的构造方法。调用父类的构 造方法很简单,只要在类的构造方法的方法体中,第一条为super语句就 可以了。super可以调用父类的任何一个带入口参数或不带入口参数的构 造方法。 ⑵ 如果一个类的构造方法中第一条语句没有用super来调用父类的构造方法, 则编译器也会默认在构造方法中用super()语句调用父类的无参构造方 法。 ⑶ 如果某个类的构造方法的第一条语句是用this()来调用本类的另外一 个构造方法,那么Java系统就不会默认这个构造方法调用父类的构造方法。 ⑷ 若一个构造方法用this()语句调用本类的另一个构造方法时,如果被 调用的构造方法又要调用父类的构造方法而又没有用super语句,那么编 译器会默认它含有super()语句。此时,父类中若不存在无参的构造方 法,也将会导致编译出错。
5.1.2 类的使用
(4)对象释放
把指向该对象的值设置为null。该对象便成了无用对象,Java系统通 过垃圾回收器GC(Garbage Collector)周期性地释放无用对象所使 用的内存,完成对象的清除工作。 当不存在着对一个对象的引用时,该对象就成为一个无用对象。 GC自动扫描对象的动态内存区,对被引用的对象添加标记,然后把没 有引用的对象作为垃圾收集起来并加以释放。 GC在Java中作为一个线程来运行的,即调用System.gc(),当要求垃 圾收集时,该线程与系统同步运行;否则在系统空闲之时异步地运行。 此外,在Java系统开始运行时,会自动调用一个名为finalize()方法, 使它清除对象所占的内存。
4
5.1.1 类的定义
2.类主体
类主体是Java类的主体部分,完成变量的说明以及方法的定 义及实现。在类中,用变量来说明类的状态,而用方法来实 现类的行为。包含类主体的类结构如下: <类声明> { <成员变量的声明> <成员方法的声明及实现> } 注意: Java语言中没有独立的函数和过程,所有的子程序都是作为 类方法定义的。 5
5.3 继承
5.3.3 super和this
Java提供了关键字super super来实现对父类的成员和方法的访 super 问。Super有三种情况可以使用: ⑴ 用来访问父类中被覆盖的方法; ⑵ 用来调用父类中的构造方法; ⑶ 用来访问父类中被隐藏的成员变量。 例5-8 this表示实例对象指向自己的应用,一般有两种使用情 this 况: (1)若方法参数或局部变量与实例成员同名,同名的实例成 员变量会被隐蔽,可以实用this对成员变量显示引用。 (2)返回实例对象本身的引用。
5.3 继承
5.3.2 变量隐藏和方法覆盖
变量隐藏:子类的成员变量和父类的成员变量同名。 子类如果要调用父类的变量,则必须借用关键字super。 方法覆盖(overriding):子类的方法名与父类的方法名相同 (返回值的类型和入口参数的数目、类型均相同。 注意:
方法覆盖与重载均是Java多态的技巧之一,但两者之间也有不同之 处: 重载(overloading),指在同一个类中,定义多个名称相同,但 参数个数或类型不同的方法,Java根据参数的个数或类型,调用相 对应的方法。 覆盖(overriding),是指在子类中,定义名称、参数个数与类型 均与父类相同的方法,用以改写父类中的方法的功能。 20
9
5.1.1 类的定义
5.构造方法 5.构造方法
当用new创建一个类的新的对象时,构造方法立即执行。 构造方法名字必须与类名相同。 构造方法的语法为: public 类名([参数列表]){ [语句序列;] } 注意: ⑴ 构造方法没有返回值类型,甚至没有void。其修饰符只能是访问控制修饰符, 即public、private、protected中的任一个。 ⑵ 构造方法不能从父类中继承。 ⑶ 构造方法可以重载,一个类可以有任意多个构造方法。不同的构造方法根据 参数的不同状态来选择合适的构造方法。 ⑷ 构造方法不能直接通过方法名引用,必须通过new运算符。 ⑸ 在构造方法中可以调用当前类和其父类的另一个构造方法,但必须是方法体 的第一条语句。使用当前类的构造方法用this来引用,使用其父类的构造方 法用super来引用。
Java通过接口实现多重继承
24
5.3.5 对象类型转换
Java中两个不同类型对象之间也可以转换,但是只在子类和父类的对象 之间进行转换,而不是任意两个类。 一个子类对象的类型可以向上转换成它的父类类型,这个转换过程是安 全的。转换过程中会丢失属于子类而不属于父类的信息。 反过来,一个父类对象的类型未必可以向下转换成子类的对象的类型, 因为子类具有的信息,父类未必包含。所以只有当父类对象实际上是子 类的一个实例的时候,才可以转换,否则不能进行这种转换。
10
5.1.2 类的使用
(1) 对象创建
new运算符用于创建一个类的实例并返回对象的引用。 一般格式为: type 对象名=new type([参数列表]); 对象的声明并不为对象分配内存空间。用运算符new 为对象分配内存空间,实例化一个对象。比如: String UserName=new String(“zhangsan”);
同一包内的其他类(同一个文件) 同一包的子类(同一个文件) 同一包的其他类(不是同一个文件)Leabharlann 不同包的子类 不同包的其他类