JAVA核心技术
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
面向对象的三大原则
封
装
继 承
多 态
对象
收银员对象
对象是面向对象编程的核 心部分,是实际存在的具 体实体,具有明确定义的 状态和行为; 对象其实就是“数据”和 “函数”的封装体,其中:
– 数据表示自身的状态,也称 作“属性”或“成员数据”; – 函数表示自身的功能,也称 作“方法”或“成员函数”。
}
对象初始化
在上例中,只能逐个地为数据成员赋值,如果想 在对象实例化的同时就初始化成员属性,就使用 到了构造方法; 构造方法是特殊的成员方法,它与类同名,在对 象实例化时由虚拟机自动调用;
请注意:构造方法没有返回值类型,也不能有返 回值。
构造方法示例
/*定义ConstructorDemo类,对构造方法进行测试*/ class ConstructorDemo { /*构造方法,方法名与类名完全一致 无需指定返回值类型,也不能有返回值*/ public ConstructorDemo() { System.out.println("这是构造方法"); } } /*Test类,用来容纳main方法 一般将包含有main方法的类声明为public*/ public class Test { /*main方法,程序入口*/ public static void main(String[] args) { /*实例化ConstructorDemo类的对象*/ ConstructorDemo cd = new ConstructorDemo(); } }
在计算机程序中用相似的 实体模拟现实世界中的实体
设计和实现 软件系统的方法
C语言的编程方式
C语言是结构化的编程语言(Structured Programming,简作SP);
强调精巧的数据结构和优越的算法,关注程序的 运行效率; 不适合于大规模的程序开发; 程序模块之间协调性差,程序的重用性、安全性、 健壮性和可维护性都存在较大的缺陷。
面向对象编程 就是使用对象进行程序设计,简写成OOP。
面向对象的编程语言
如今,面向对象的编程思想已经成为主流; 面向对象的编程语言正大行其道,最具代表性的 有: C++ Java C# 连数据库也开始面向对象了,如Oracle。
面向对象的编程思想
OOP
旨在计算机程序中 模拟现实世界中的概念 在OOP中,现实世界的 所有事物全都被视为对象
抽象
把相同的或相似的对象归为一类的这个过程就是 抽象,所以,抽象就是分析问题的方法; 抽象的基本原则:
– 只关心主要问题,而不关心次要问题; – 只关心主要矛盾,而不关心次要矛盾; – 只关心相同的东西,而不关心不同的东西; – 只关心问题是什么,能够完成什么,而不关心怎样去 完成。
抽象的过程其实就是面向对象编程的核心思想。
成员变量
成员函数
定义类的语法
在Java中定义类
class 类名 { 成员列表
在C中定义结构体
struct 结构体名 { 成员列表
//包括成员变量和成员函数
}
//只有成员变量,没有成员函 数
};
习惯上,类名的首字母大写,如:Student
在Java中创建对象
/*Test类,用来容纳main方法*/ public class Test { /*main方法,程序入口*/ public static void main(String[] args) { Student std; //声明Student类型的引用 std = new Student(); //创建Student类型的对象 std.name = "张三"; //为姓名赋值 std.age = 18; //为年龄赋值 std.weight = 50; //为体重赋值 std.dining(); //调用成员方法 System.out.println(std.weight); std.walk(); System.out.println(std.weight); } }
类和对象I
• 了解什么是 面向对象 • 面向对象的 基本概念
– – – – – 类 对象 封装 继承 多态
• • • •
如何定义 类,如何创建 对象 成员运算符 访问控制权限:public和private 构造方法
什么是面向对象?
Object Oriendted Programming
对象 以…为导向的 程序设计
访问权限(续)
加上访问修饰符有时候可能会给操作数据带来不 便,但可以在很大程度上保证数据的安全; 一般地,我们会将成员属性声明为private,而将 成员方法声明为public,但这样做并不是绝对的; 有时候,类外部可能要操作到某些私有数据成员, 那么就可以增加一个公有的方法,再由这个方法 来操作私有数据,避免因类外部的误操作而造成 的数据损坏; 因为main方法要由类外部的虚拟机来调用,所以 main方法必须声明成public。
修改Student类
class Student { //定义学生类 private String name; //姓名,私有 private int age; //年龄,私有 private float weight; //体重,私有 public void setName(String name) { //为姓名赋值的方法,公有 this.name = name; } public void setAge(int a) { //为年龄赋值的方法,公有 age = a; } public void setWeight(float w) { //为体重赋值的方法,公有 weight = w; } public void display() { //将所有信息打印出来的方法,公有 System.out.println("姓名:" + name + ",年龄:" + age + ",体重:" + weight); } public void dining() {„„} //吃饭的方法,公有,代码略 public void walk() {„„} //走路的方法,公有,代码略 } public class Test { public static void main(String[] args) { Student std = new Student(); //实例化学生类对象 std.setName("张三"); //为姓名赋值 std.setAge(18); //为年龄赋值 std.setWeight(55); //为体重赋值 std.dining(); //调用吃饭的方法 std.display(); //将信息打印出来 }
属性
事物的特性在类中用变量表示; 每个对象的每个属性都拥有其特定的值; 属性名称由类的所有对象共享; 对象或实体拥有的特征在类中表示时称为属性。
姓 名 年 龄
学生对象 属 性
住 址 ……
方法
事物的行为和动作在类中用函数表示; 每个对象都有相同的动作和行为; 对象执行的操作在类中表示为方法。
吃 饭
在Java中定义类
/*定义学生类*/ class Student { String name; //姓名 int age; //年龄 float weight; //体重 /*吃饭的方法*/ void dining() { System.out.println("吃饱了..."); weight++; } /*走路的方法*/ void walk() { System.out.println("走累了..."); weight--; } }
行为
姓名:布兰尼 职衔:收银员 年龄:35 体重:60千克
操作: 收款 打印帐单
状态
顾客对象
顾客 姓名:朱丽叶 年龄:28 体重:52千克
操作: 购买商品
类
人们为了更好地认识世界,将现实生活中的事物 (对象)划分成类; 同一类中的事物总是具有一些共性; 类以共同的特性和行为定义实体; 类是具有相同属性和和行为的一组对象的集合。
创建对象的语法
和数组相似,对象也是引用数据类型,只能使用 new运算符从堆中分配内存; 注意:这里要有括号 创建对象的一般语法: 类名 引用名 = new 类名() ; 使用已经定义好的类,创建该类对象的过程称为 “实例化”。
成员运算符.
在C语言中,必须要先声明结构体变量,才可以访 问结构体中的成员;
SP和OOP对比
SP
设计思路 程序单元 设计方法 优点 缺点 自顶向下、层次化、分解 函数模块 程序 = 算法 + 数据结构 相互独立,代码共享 数据与程序不一致 维护困难 对象
OOP
自底向上、对象化、综合 程序 = 对象 = 数据 + 方法
接近人的思维方式 模拟客观世界
客观世界的无序性 概念不成熟
第一章 JAVA核心技术
ຫໍສະໝຸດ Baidu
OOP I 类和对象I
回顾
Java中的数据类型分为:原始数据类型和引用数 据类型; 在数据类型转换中,由低类型转至高类型,将会 自动(隐式)类型转换,而从高类型转至低类型, 则必须强制(显式)类型转换; Java中的数组是引用数据类型,必须由new关键字 在堆中分配内存; Java虚拟机的垃圾回收机制将自动释放不再使用 的内存; 使用命令行参数接收来自用户的输入。
学生对象
睡 觉 上 课 ……
方 法
类和对象的区别
类是用来描述实体的“模板”或“原型”; 对象是实际的实体,每一个对象都是类的一个具 体实例; 类用来定义对象所有的属性和方法,同一类的所 有对象都拥有相同的特征和操作;
可以将类理解成生产产品的模具,而对象则是根 据此模具生产的一个个产品。
类与结构
最简单的理解方式:
同样的,只有先实例化类的对象,才可以访问到 类中的成员(属性和方法); 使用成员运算符(.)来访问成员属性或成员方法; 一般语法是: 对象名.成员名 如:std.age = 18; //为成员属性赋值 std.dining(); //调用成员方法
访问权限:public和private
C语言中结构体的成员可以从任何地方进行访问, 这将给数据的安全留下极大的隐患;
可以公开 无所谓
不可以公开
继承
继承就是重用现有的类来生成新类的一种特征; 通俗地讲就是从现有的类(即父类或基类)创建 新类(子类或派生类)的过程; 现实生活中,继承可以达到财产重用的目的,而 在Java中,继承可以使代码重用。
多态
多态是指同一函数在不同的类中有不同的实现; 多态的好处就是使类更灵活,更便于扩充。
访问权限
无法从类的外部访问私有成员; 其它类的私有成员对于当前类也是隐藏的。
类
私有
不可从类 外部访问 属性或方法
公有
可以从类 外部访问 属性或方法
访问权限示例
class Student { private String name; //姓名,私有的,不可以从类外部直接访问 private int age; //年龄,私有的,不可以从类外部直接访问 private float weight; //体重,私有的,不可以从类外部直接访问 //吃饭的方法,公有的,可以从任何地方访问 public void dining() { System.out.println("吃饱了..."); weight++; //dining方法是类内部成员,可以直接访问本类私有成员 } //走路的方法,公有的,可以从任何地方访问 public void walk() { System.out.println("走累了..."); weight--; //walk方法是类内部成员,可以直接访问本类私有成员 } } public class Test { public static void main(String[] args) { Student std = new Student(); //实例化一个Student对象 std.age = 18; //试图从类外部访问私有成员,将会报出一个错误 std.dining(); //允许访问公有成员 } }
C
结构体
Java
类
结构体变量
对象
区别在于:结构体一般只有数据(属性)而没有函数(方法)。
封装
将某些东西包装在一起,然后以新的完整形式呈 现出来; 隐藏属性、方法或实现细节的处理方式称为封装; 封装其实就是有选择性地公开或隐藏某些信息, 它解决了数据的安全性问题。
姓名:张三 一 个 人 类 的 对 象 属性 体重:50kg …… 密码:****** 走路 方法 吃饭 ……
为了避免从类外部直接访问类成员而造成的数据 损坏,Java对类成员的访问制定了约束; 关键字public和private是访问修饰符,用来说明某 个成员是否可以从类外部进行访问; public修饰的成员可以在任何地方进行访问,不受 任何约束; private修饰的成员只能够被本类中的其它成员访 问,而不能从类的外部进行访问。