《面向对象.ppt》由会员分享,可在线阅读,更多相关《面向对象.ppt(31页珍藏版)》请在三一文库上搜索。
1、成都传智播客教育 讲师:任小龙,Java 面向对象1,讲师:任小龙(Will) Email:,成都传智播客教育 讲师:任小龙,今日任务,认识面向对象 类和对象 构造器 static修饰符 成员变量和局部变量 封装,面向对象, 春暖花开.,成都传智播客教育 讲师:任小龙,面向对象 春暖花开,一种编程思想,一个很抽象的概念,它相对面向过程而言。 过程与对象都是一种解决问题的思想。 面向过程:强调的是功能行为,一种过程,先干啥,再干啥;用函数把这些步骤一步一步实现,使用的时候依次调用函数就可以了。 面向过程最大的问题在于随着系统的膨胀,面向过程将无法应付,最终导致系统的崩溃,面向对象的提出正是
2、试图解决这一软件危机。 面向对象:将功能封装到对象里,强调的是具备某功能的对象; 计算机语言为了更好的去描述现实生活中的事物,也一样会按照生活中的思考方式来定义,这样人们使用起来才会更方便。 面向对象的三个特征: 封装(Encapsulation); 继承(Inheritance); 多态(Polymorphism)。,成都传智播客教育 讲师:任小龙,类与对象之间的关系,类是对生活中某一类事物的描述(一种抽象概念),对象是该类事物实实在在存在的个体。(对象=实例),哥就是传说中的手机, 我的英文名叫CellPhone。 哥只是个概念,你抓不到我!,偶们才是亲口中说的手机哦!,成都传智播客教育
3、 讲师:任小龙,类的定义,字段:类或对象所包含的数据,对类状态的一种描述; 方法:类或对象的特征或行为,修饰符 class 类名 0n个字段; 0n个方法 ,定义类,成都传智播客教育 讲师:任小龙,类的定义,定义类,其实就是在定义类中的成员。,class CellPhone String brand = “google“; String color = “red“; double price; public void showInfo() System.out.println( brand+ “手机是“+color+“色的“+“价值“+price); ,成都传智播客教育 讲师:任小龙,对
4、象的定义、创建以及使用,格式: 类名 对象名称 = new 类名(); /其实是两步操作 类名 对象名称 ; /声明对象 对象名称 = new 类名(); /实例化对象 例: CellPhone iphone = new CellPhone(); 通过“对象名.对象成员”的方式来操作对象中的内容。 思考:对象在内存是如何存在的?,我们的语言: 对象 等同于 实例 成员变量 等同于 字段,匿名对象,当不定义变量来引用对象时,此时对象没有名字,称为匿名对象。如:new CellPhone(); 匿名对象只在堆内存中开辟空间,并不存在在栈内存对它的引用。因为没有被任何变量所引用,匿名对象在使用一次之
5、后即成为垃圾,也就是说只能使用一次。 通常当某一个对象只被使用一次的时候,就可以使用匿名对象。,成都传智播客教育 讲师:任小龙,对象的引用,CellPhone phone = new CellPhone(); 1. 创建了一个CellPhone 的实例(对象), 2. 把这个CellPhone 实例赋给 phone 变量。 phone.brand=“Android“; 引用变量指向对象,也就是说引用型变量存放的仅仅是一个引用地址;,成都传智播客教育 讲师:任小龙,内存分析,phone,brand=“Google“,price=0.0,CellPhone phone = new CellPh
6、one(); CellPhone 山寨机= phone;,山寨机,CellPhone对象,对象的生命周期,从new开始到该对象不被什么变量引用的时候(如phone = null)之间的时期就是对象的生命周期,一旦一个对象不被任何变量所引用时,该对象就是垃圾,就等着Java的垃圾回收器(GC)来清理。 注意:并不是垃圾一旦产生GC就会清理,这完全取决于JVM的调度,程序员无法控制。,成都传智播客教育 讲师:任小龙,引用数据类型数组分析,学生是一个类,学生这个类有一个字段叫名字,有一个方法是交学费。每一个学生都是通过学生这个类new出来的一个对象。我现在创建一个数组,这个数组里面依次放的是没有交
7、学费的学生的对象,我再分别调用数组里的这些学生的交学费方法。,成都传智播客教育 讲师:任小龙,引用数据类型数组分析,unFees,s1,s2,unFees1,name=“Will“;,unFees0,name=“Lucy“;,成都传智播客教育 讲师:任小龙,构造器,一旦创建对象就会调用与之对应的构造器(又称构造方法),构造器的作用:可用于创建对象和对对象初始化操作。如:CellPhone cp = new CellPhone(); 特点: 方法名与类名相同 不用定义返回值类型 不需要写return语句 注意: 默认构造方法的特点。 多个构造方法是以重载的形式存在的。,构造器 = 构造方法,
8、成都传智播客教育 讲师:任小龙,构造器,构造器初始化 为对象分配内存; 执行字段的显示初始化; 执行构造器; 由new运算符返回对象的引用;,setter方法和构造方法都可以用来初始化字段的值,那么什么时候用构造方法什么时候用setter? 当字段的值是和类的对象紧密相关不可分割的时候,用构造方法,就是说我要有这个实例,就必须有这个字段值,就用构造方法。 需要初始化的字段值不太多的时候可以用构造方法,如果字段值太多,构造方法的参数列表太。了。 其他时候都可以用setter方法。,成都传智播客教育 讲师:任小龙,static关键字,特点: 随着类的加载而加载 优先于对象存在 被所有对象所共享
9、 可以直接被类名调用 使用注意: 静态方法只能访问静态成员 但是非静态成员可以访问静态成员; 静态方法中不可以使用this,super关键字 主方法(main)是静态的 public static void main(String agrs),成都传智播客教育 讲师:任小龙,static关键字的使用,可修饰字段,方法。 用static 修饰的成员表示它属于这个类共有,而不是属于该类的单个实例。 static 修饰的字段 = 类字段 static 修饰的方法 = 类方法 没使用static修饰的字段和方法,成员属于类的单个实例, 不属于类。 没有static 修饰的字段 = 实例字段 没有st
10、atic 修饰的方法 = 实例方法,成都传智播客教育 讲师:任小龙,访问字段和方法,类和实例访问字段和方法的语法: 访问类成员: 类.字段 类.方法 访问实例成员: 实例.字段 实例.方法 static 修饰的字段和方法,既可以通过类调用,也可以使用实例调用; 没static 修饰的字段和方法,只能使用实例来调用,成都传智播客教育 讲师:任小龙,静态字段初始化和内存分析,num = 999,第1个对象:name=“Will“,第2个对象:name=“Lucy“,p1,p2,人类有一个静态字段:人类数量(num),人类,成都传智播客教育 讲师:任小龙,成员变量&局部变量,Java中根据定义
11、变量的位置不同,把变量分成2种: 成员变量:直接定义在类里的变量,又称为全局变量或字段。 局部变量:变量除了成员变量就是局部变量。根据定义的位置不同有3种表现形式:方法形参,方法内变量,代码块变量。 变量作用域: 指的是变量的存在范围,只有在这个范围内,程序代码才能访问它。当一个变量被定义时,它的作用域就确定了: 成员变量:在类中声明,作用域是整个类; 局部变量:作用域是定义开始到定义所在的花括号结束; 局部变量没有初始值,所以使用前要显示的初始化。 成员变量的初始值和动态创建数组里的元素的初始值是一样的;,在同一范围内不允许两个局部变量发生命名冲突 局部变量必须显示初始化,变量隐藏,在同一个
12、作用域内不允许定义同名的多个变量。 若当成员变量和局部变量同名,则局部变量会隐藏成员变量,可使用this避免二义性。,变量生命周期,变量的作用域决定了变量的生命周期,说明作用域不同,生命周期就不一样。变量的生命周期指的是一个变量被创建并分配内存空间开始,到该变量被销毁并清除其所占内存空间的过程。 类变量在内存中只有一个,JVM在加载类的过程中为其分配内存,静态变量位于方法区,被类的所有实例共享。 类变量的生命周期取决于类的生命周期,加载类时静态变量就被创建并分配内存,当卸载类时静态变量被销毁并撤销所占内存。 每当创建类的实例时,JVM就会为实例变量分配一次内存,实例变量被创建也并分配内存,实例
13、变量位于堆内存中。 实例变量的生命周期取决于实例的生命周期,当创建实例时,实例变量被创建并分配内存,当销毁实例的时候,实例变量被销毁会并撤销所占内存。 当JVM调用一个方法时,会为该方法中的局部变量分配内存。当结束调用该方法时,会结束方法中的局部变量的生命周期。,局部变量的初始化和中运行机制,局部变量定义后,必须显示初始化后才能使用,因为系统不会为局部变量执行初始化操作。这就意味着,定义局部变量后,系统并未为这个变量分配内存空间。直到程序为这个变量赋值时,系统才会为局部变量分配内存,并将初始值保存到该内存中。 局部变量不属于任何类或实例,因此它总是保存在其所在方法的栈内存中。 基本数据局部变量
14、:直接把这个变量的值保存到该变量所对应的内存中。 引用数据局部变量:这个变量内存中存的是地址,通过该地址引用到该变量实际引用堆里的的对象。 栈内存中的变量无需系统垃圾回收,其往往随方法或代码块的运行结束而结束。,成都传智播客教育 讲师:任小龙,面向对象 之 封装,封装的两个含义: 1.把对象的状态和行为看成一个统一的整体,将二者存放在一个独立的模块中(类); 2.“信息隐藏“, 把不需要让外界知道的信息隐藏起来,尽可能隐藏对象功能实现细节,字段; 封装机制在程序中的体现是:把描述对象的状态用字段表示,描述对象的行为用方法表示,把字段和方法定义在一个类中,并保证外界不能任意更改其内部的字段值,
15、也不允许任意调动其内部的功能方法。 程序中的一种体现:通常将类中的成员变量私有化(private),通过对外提供方法(setXxx,getXxx),可对该变量(xxx)进行访问。 boolean 类型的变量没有getXX,只有 isXX;,成都传智播客教育 讲师:任小龙,this关键字,特点:this表示当前对象。 当前对象 当前正在调用实例成员的对象 换言之:谁调用了方法,谁就是当前对象。 什么时候使用this关键字呢? 方法间的相互调用; this.字段; 构造器中相互调用,但是此时this(参数)必须写在构造方法第一行。 this不能用在static修饰的方法里和static修饰的代码
16、块里;,成都传智播客教育 讲师:任小龙,package,package的引入,提供类的多层命名空间,从而能更好的管理代码结构,也能避免类名冲突。 编译:javac -d . HelloWorld.java 运行:java cd.itcast.demo.HelloWorld package必须写在文件的开头,必须写在import和类声明之前。 java允许将一组功能相同的类放在同一个package下。 企业开发的命名规则 域名反过来写 cn.itcast.cd.erp.crm.domain erp是项目名,crm是erp项目中的模块名,domain是crm中的一层组件名; 包名的书写:全用小写
17、字母,避免使用与系统发生冲突的名字,如不能定义java.lang、java.swing等。,成都传智播客教育 讲师:任小龙,import,访问带有package的类 导入类,更好的翻译是“寻找”类: import pkg.subpkg.className 寻找某个包下被使用到的全部类: import pkg.sunpkg.*; * 只能表示类名,不能表示包名 同一个类中出现多个相同的类名处理 java.util.Date 和 java.sql.Date 类的全限定名:该类的包名.子包名类名 String类的权限定名: java.lang.String,JVM会自动寻找java.lang下的所
18、有被使用到的类: 所以不需要我们去手工寻找;但JVM不能导入java.lang子包下的类。,成都传智播客教育 讲师:任小龙,java 常用包介绍,java.lang : 语言核心类,系统自动导入 只要搞java,天天都会用这个包。 java.util : java 工具类、集合框架类和接口 以后要学习时间,日历,集合等就得用到这个包。 : 网络编程接口和类 以后要写和网络相关的应用就要用这个包。 java.io : 流的接口和类 以后要写读写文件或者图片等这些就要用这个包。 java.text : java格式化相关类 以后我们要做软件国际化就要用这个 java.sql : jdbc相关接
19、口和类 以后操作java连接数据库就要使用到这个包 java.awt : 抽象窗口工具集相关接口和类 搞一个类似于QQ一样的软件,界面就得使用这个包下的类; javax.swing :图形用户界面相关接口和类(可跨平台),成都传智播客教育 讲师:任小龙,访问修饰符,private 类访问权限:本类内部可以访问,不能继承到子类; default 什么都不写,包访问权限:本类内部可以访问,同包其他类也可以访问,同包可继承; protected 子类访问权限:本类内部可以访问,不同包的子类也可以访问,同包其他类也可以访问,能继承到子类; public 公共访问权限:任何地方都可以访问,能继承到子类;,成都传智播客教育 讲师:任小龙,类的设计分析,分析思路: 根据要求写出类所包含的字段; 所有的字段都必须私有化; 封装之后的字段可通过setter和getter设值和取得; 按需求可添加若干构造方法; 根据需求可添加相应的方法; 类中的所有方法都不要直接处理(输出打印),而是交给调用者去处理。,设计:Student类,有名字和成绩字段,打印名字和成绩的一个方法print。 设计并测试代码。,
链接地址:https://www.31doc.com/p-3223477.html