版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、-面向对象(上)1.类和对象的理解2.如何创建一个对象3.this关键字4.基本数据类型和引用数据类型作为参数传递5.static关键字3面向过程的思想考虑问题时,以一个具体的流程为单位,考虑它的实现办法。关心的是功能的实现。面向对象的思想考虑问题时,以具体的事物为单位,考虑它的属性(特征)及动作(行为)。4五子棋:面向过程:面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。把上面每个步骤用分别的函数来实现,问题就解决了。面向对象:整个五子棋可以分为 1、黑白双方,这两方
2、的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等。1.首先考虑在问题域中设计到的对象有哪些2.其次考虑这些对象有怎样的特征和功能3.最后考虑对象和对象之间的关系6面向对象的编程思想力图使对计算机语言中对事物的描述与现实世界中该事物的本来面目尽可能的一致。 类(class)和对象(object)是面向对象方法的核心概念。类是对一类事物的描述,是抽象的、概念上的定义;人对象是实际存在的该类事物的每个个体,因而也称实例(instance)。7抽象出下面系统中的类及其关系旅行社旅客预定机票准备机票记账航班目录记账文件对象是Java程序的核心,在Java程序中“万事
3、万物皆对象”类描述了对象的属性和对象的行为,类是对象的模板,图纸。对象是类的一个实例,是一个实实在在的个体 。JDK提供了很多类供编程人员使用,编程人员也可以定义自己想要的类。特征或状态操作或行为属性(成员变量)方法(函数)抽象实例化对象类对于OOP(面向对象编程)而言:封装:就是将一类型事物的属性和方法一起包装到一个程序单元中,这个程序单元以类的形式实现。抽象:将客观存在的事物特征用Java语言描述出来。抽象只关注一个主题与当前目标中有关的方面,而忽略与当前目标无关的那些方面。只关注类的属性和方法就称为数据抽象。封装一个类,就是根据具体的应用从同一类型对象中抽象出相关的属性(成员变量)和方法
4、(函数)封装一个类属性namesexage方法speak()tread()Person类人姓名性别年龄 说话 行走类定义类的语法:访问修饰符 class 类名 /这里放属性和方法的声明public class Person private String name; /姓名 private boolean sex; /性别 private int age; /年龄 public void speak(String word) /说话 System.out.println(name + “说:” + word); public void tread() /行走 System.out.println
5、(“四处走动”); 定义成员变量的语法: 访问修饰符 数据类型 成员变量名 = 初始值;成员变量的类型可以使用Java语言中的任何一种数据类型(包括基本类型和引用类型)。在定义成员变量时可以对其进行初始化。如果不对其初始化,Java会使用默认的值对其进行初始化。成员变量的作用域是整个类体。成员变量类型默认值byte0short0int0long0Lcharu0000float0.0Fdouble0.0DbooleanFalse所有的引用类型null定义方法的语法:访问修饰符 返回值类型 方法名 (参数类型 参数名1,) / 这里放方法的具体实现语句怎么根据设计好的类来创建一个对象?利用new关
6、键词调用类的构造方法(类的一种特殊方法)就可创建该类的一个对象。 构造方法构造方法的名字和类名相同,并且没有返回值,并且不要加void。构造方法的作用在于构造并初始化对象。两种构造方法参数化构造方法默认(隐式)构造方法默认构造方法就是指不带参数的构造方法。Java的类都要求有构造方法,如果没有定义构造方法,Java编译器会为我们提供一个默认的构造方法。 public class Person private String name; /姓名 private boolean sex; /性别 private int age; /年龄public void tread() /行走 System.o
7、ut.println(“走走走”); public static void main(String args) Person person = new Person(); person.tread(); 用new调用该类的默认构造方法来创建一个对象public class Person private String name; /姓名 private boolean sex; /性别 private int age; /年龄 public Person(String n, boolean b, int a) name = n; sex = b; age = a; public void spe
8、ak(String word) /说话 System.out.println( name + “说:” + word); public void tread() /行走 System.out.println(“走走走”); public static void main(String args) Person person = new Person(“张三”,true,18); person.speak(“你好”); 参数化构造方法:访问修饰符 类名(参数类型 参数名,) .用new调用该类的构造方法来创建一个对象注意:传递的值和构造方法的参数在个数、次序和类型上要匹配普通方法用:对象变量名.
9、方法 来调用如果类中有一个自己编写的构造方法时,编译器就不会为我们再提供那个默认构造方法。此时又希望还可以用默认构造方法来创建类的实例时,那就必须在类中明确添加这个默认构造方法。public class Person private String name; /姓名 private boolean sex; /性别 private int age; /年龄 public Person(String n, boolean b, int a) name = n; sex = b; age = a; public void tread() /行走 System.out.println(“the pe
10、ople can tread every where”); public static void main(String args) Person person = new Person(); person.speak(“你好”); 编译报错类描述了对象的特征和对象的行为,类是对象的模板,图纸。对象是类的一个实例,是一个实实在在的个体 。封装一个类,就是根据具体的应用从同一类型对象中抽象出相关的属性(成员变量)和方法(函数)。构造方法的作用在于构造并初始化对象。两种构造方法:参数化构造方法和默认构造方法。方法的调用构造方法:用new 调用。普通方法:用对象变量名.方法 调用。封装一个学生(St
11、udent)类:学生应该有姓名(name)、年龄(age)、性别(sex),班级号(classNum),座位号(sno)。提供一个参数化构造化方法以便能很方便的创建一个学生对象。提供一个方法(displayInfo()用来显示这个学生的姓名、年龄、性别、所在的班级和他的座位号。写一个main方法创建两个学生对象,分别调用displayInfo()方法显示各自的信息。public class Student public static void main(String args) Student stu = new Student(“张三”, 18, 男, “精英班”, 10); stu.dis
12、playInfo(); Student stu2 = new Student(“李四”, 23, 女, “预热班”, 18); stu2.displayInfo(); 堆内存栈内存0 x5010stustu20 x50800 x606618男0 x6220100 x821023女0 x832018全局数据区“预热班”“李四”“张三”“精英班”stu变量是堆内存中创建的“对象的引用“,但常说成是一个对象。方法的重载指的是一个类中可以定义有相同的名字,但参数列表不同的多个方法,调用时,会根据不同的参数表选择对应的方法。参数列表是指参数的类型,个数或顺序类中定义的普通方法、构造方法都可以重载思考:返
13、回值类型不同算不算重载?可见性(访问修饰符) 不同算不算重载?例如:在Person类中添加如下方法:void info()System.out.println(“My id is”+id);void infor(String t)System.out.println(t+“ ”+id+” ”+age);与普通方法一样,构造方法也可以重载:public class Person private String name; /姓名 private boolean sex; /性别 private int age; /年龄 public Person(String n, boolean s, int
14、a) name = n; sex = s; age = a; public Person() public void speak(String word) /说话 System.out.println(name + “说:” + word); public void speak() System.out.println(“无语”); public static void main(String args) Person person = new Person(); person.speak(“你好”); person.speak(); 每个类的每个非静态方法(没有被static修饰)都会隐含一
15、个this引用名称,它指向调用这个方法的对象。当在方法中使用本类的属性时,都会隐含地使用this名称,当然也可以明确指定。this可以看作是一个变量,它的值就是当前对象的引用/Persion类的构造方法public Person(String n, boolean s, int a) = n; this.sex = s; this.age = a;当类中某个非静态方法的参数名跟类的某个成员变量名相同时,为了避免参数的作用范围覆盖了成员变量的作用范围,必须明确地使用this关键字来指定成员变量public class Employee private String name;
16、 /姓名 private int age; /年龄 private double salary; /薪水 public Employee(String name, int age, double salary) /构造方法 = name; this.age = age; this.salary = salary; 如果某个构造方法的第一条语句具有形式this(.),那么这个构造方法将调用本类中的其他构造方法。public class Employee private String name; /姓名 private int age; /年龄 private double s
17、alary; /薪水 public Employee(String name, int age, double salary) /构造方法1 = name; this.age = age; this.salary = salary; public Employee() /构造方法2 this(“无名”, 18, 800.0); /调用到了构造方法1 Java语言在给被调用方法的参数赋值时,只采用传值的方式:基本类型数据传递的是该数据的值本身。引用类型数据传递的也是这个变量的值本身,即对象的引用,而非对象本身。public class PassValue public sta
18、tic void main(String args) PassValue pv = new PassValue(); int x = 5; System.out.println(“方法调用之前x=” + x); pv.change(x); System.out.println(“方法调用之后x=” + x); public void change(int x) x = 100; System.out.println(“方法中x=” + x); 5main方法中的栈内存情况x?change方法中的栈内存情况xpublic class PassValue2 private int x ; publ
19、ic static void main(String args) PassValue2 obj = new Passvalue2(); obj.x = 5; System.out.println(“方法调用之前obj.x=” + obj.x); obj.change(obj); System.out.println(“方法调用之后obj.x=” + obj.x); public void change(PassValue2 obj) obj.x = 100; System.out.println(“方法中obj.x=” + obj.x); 0 x3000main方法中的栈内存情况obj?cha
20、nge方法中的栈内存情况obj堆内存5x封装(Encapsulation)对外部不可见继承(Inheritance)扩展类的功能多态(Polymorphism)方法的重载对象的多态性类的封装private 不允许任何其他类存取和调用“前边没有修饰字的情况” 在同一程序包中出现的类才可以直接使用它的数据和方法.在类中,用static声明的成员变量为静态成员变量,它是该类的公用变量,在第一次使用时被初始化,对于该类的所有对象来说,static成员变量只有一份。用static声明的方法为静态方法,该方法独立于类的实例,所以也叫类方法。静态方法中只能调用本类中其他的静态成员(变量和方法)。静态方法中不
21、能使用this和super关键字。静态成员可以通过类名(不需要实例化)或类的实例去访问。public class Dog private static int count = 100; private int id; private String name; public Dog(String name) = name; id = count+; public void displayInfo() System.out.print(“名字是:” + name + 编号是 + id); public static void currentCount() System.out.
22、println(当前编号是 + count); public static void main(String args) Dog.currentCount(); Dog dog = new Dog(小黑); dog.displayInfo(); Dog dog2 = new Dog(“旺财”); dog2.displayInfo(); Dog.currentCount(); 堆内存栈内存0 x5010dog数据区Dog.count:?“小黑”“旺财”dog20 x5060Id:100nameId:101name在类中可以使用不包含在任何方法中的静态代码块(static block),当类被JV
23、M载入时,静态代码块被执行,且只被执行一次。静态代码块经常用来初始化类的静态成员变量。public class Student private static String country; private String name; static country = 中国; System.out.println(Student类已经加载); public Student(String name) = name; public void displayInfo() System.out.println(我的名字是: + name + ,国家是: + country); publ
24、ic static void main(String args) /Student stu = new Student(张三); /stu.displayInfo(); 为了便于管理大型软件系统中数目众多的类,解决类命名冲突的问题,Java引入了包(package)。在使用许多类时,类和方法的名称很难决定。有时需要使用与其他类相同的名称。包基本上隐藏了类并避免了名称上的冲突。用package来声明包,package语句必须是java源文件中的第一条语句。(若无这条语句,则放置在无名包下)在package语句中,用.来指明包(目录)的层次。包对应着文件系统的目录层次结构。 如:package com.bjjava; 编译后对应的类文件位于combjjava目录下。package com.demo.test;public class Employee private String name; /姓名 private int age; /年龄 private double salary; /薪水 public Employee(String name, int age, double salary) /构造方法 = name; this.age = age; this.salary = salary; 声明包在当前目录下
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 7分钟婚宴新郎致辞稿9篇
- 财务部员工工作总结报告5篇
- 销售的年度工作总结感悟范本10篇
- 机器轴市场需求与消费特点分析
- 销售个人工作总结感想大全10篇
- 可拆卸衣领市场需求与消费特点分析
- 幼儿园班主任教育工作计划(25篇)
- 17《望天门山》说课稿-2024-2025学年三年级上册语文统编版(五四制)
- 售楼部前台年终总结5篇
- 安全演练简报
- 当代社会政策分析 课件 第二章 就业社会政策
- GB/T 19633.2-2024最终灭菌医疗器械包装第2部分:成型、密封和装配过程的确认的要求
- 信息技术知识点
- 小班幼儿优势分析总结与反思
- 信息化工程分包合同范本
- FZ∕T 71006-2021 山羊绒针织绒线
- 消防培训四懂四会
- 慢性创面的治疗及护理课件
- 高考高中语文必背古诗文72篇-必考古诗词全总结
- 2024年物业行业职业技能竞赛(物业管理员赛项)考试题库500题(含答案)
- MOOC 通信原理-北京邮电大学 中国大学慕课答案
评论
0/150
提交评论