深入理解Java面向对象编程

4星 · 超过85%的资源 需积分: 9 5 下载量 114 浏览量 更新于2024-07-26 收藏 218KB DOC 举报
"这是一份来自资深Java开发者的学习笔记,涵盖了Java的面向对象编程概念,强调了面向对象设计的重要性,并提供了关于类、对象、方法、变量等基础知识的讲解。笔记中探讨了面向对象与面向过程的区别,以及面向对象设计的原则,如高内聚和低耦合,还提到了复用性和类的定义格式。" 在这份Java学习笔记中,作者首先介绍了面向对象编程(OOP)相对于面向过程编程的优势。面向对象主要关注对象,而面向过程关注的是步骤和函数。对象是由属性(描述对象的状态)和方法(描述对象的行为)组成的。通过封装,对象的实现细节对外部调用者是隐藏的,这有助于提高代码的维护性和可读性。 笔记中提到了类作为对象的蓝图,是对象的抽象表示。类定义了对象的属性和行为,而对象则是类的实例。在Java中,类的定义格式是`class ClassName { ... }`。实例变量(成员变量)是在类中但不在方法内的变量,它们在对象创建时初始化。局部变量则在方法内部定义,必须先赋值才能使用。实例变量在整个类的作用域内有效,而局部变量仅在其定义的方法或块内有效。 作者还强调了高内聚和低耦合的设计原则,这是高质量软件设计的关键。高内聚意味着类内部的元素紧密相关,而低耦合意味着类与类之间的依赖关系尽可能少。这种设计可以提高代码的复用性和系统的可扩展性。笔记中提到,复用性是OOP的一个核心特性,可以通过复用已有的对象或创建新的对象来实现功能。 在方法的定义中,笔记涵盖了方法的返回值、参数和可能抛出的异常。方法是对象行为的体现,通过方法调用,对象可以执行特定的任务。方法的访问修饰符(如public)决定了它在哪些范围可以被调用,返回值类型定义了方法执行后的结果类型,参数列表用于传递输入数据。 此外,笔记还对比了面向过程和面向对象的思想。面向过程是从算法出发,然后考虑数据结构;而面向对象则是从数据结构出发,再构建算法。面向对象设计允许通过组合简单对象和方法来实现复杂功能,这种方法更接近实际问题的解决方式。 这份Java学习笔记提供了一个深入理解面向对象编程的视角,涵盖了从基础概念到高级设计原则的广泛内容,对于Java初学者和有一定经验的开发者都极具价值。
2013-01-31 上传
JAVA的面向对象编程--------课堂笔记 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物皆对象) 所有的事物都有两个方面: 有什么(属性):用来描述对象。 能够做什么(方法):告诉外界对象有那些功能。 后者以前者为基础。 大的对象的属性也可以是一个对象。 为什么要使用面向对象: 首先,面向对象符合人类看待事物的一般规律。 对象的方法的实现细节是屏蔽的,只有对象方法的实现者了解细节。 方法的定义非常重要。方法有参数,也可能有返回值。 注意区分:对象(本身)、对象的实现者、对象的调用者。 分析对象主要从方法开始。 我们通过类来看待对象,类是对象的抽象。 其次,采用面向对象方法可以使系统各部分各司其职、各尽所能。 对象之间的耦合性一定要低(比如不同硬盘和不同主板之间的关系)。这样才能使每个对象本身做成最好的。 对于对象的要求:高内聚、低耦合,这样容易拼装成为一个系统。 实现高内聚就是要最大限度低提高复用性(复用性好是因为高内聚)。 可复用性是OOP的基础。 比较面向过程的思想和面向对象的思想: 面向过程的思想:由过程、步骤、函数组成,以过程为核心; 面向对象的思想:以对象为中心,先开发类,得到对象,通过对象之间相互通信实现功能。 面向过程是先有算法,后有数据结构。 面向对象是先有数据结构,然后再有算法。 在用面向对象思想开发的过程中,可以复用对象就进行复用,如无法进行复用则开发新的对象。 开发过程是用对个简单的对象的多个简单的方法,来实现复杂的功能 。 从语法上来看,一个类是一个新的数据类型。 在面向对象编程中,除了简单数据类型,就是对象类型。 定义类的格式: class Student{ 代码 } 注意类名中单词的首字母大写。 实例变量:定义在类中但在任何方法之外。(New出来的均有初值) 局部变量:定义在方法之中的变量。 局部变量要先赋值,再进行运算,而实例变量均已经赋初值。这是局部变量和实例变量的一大区别。 实例变量的对象赋值为null。 局部变量不允许范围内定义两个同名变量。实例变量的作用域在本类中完全有效,当被其他的类调用的时候也可能有效。 实例变量和局部变量允许命名冲突。 书写方法的格式: 修饰符 返回值 方法名 调用过程中 方法体 可能出现的例外 public int/void addNumber(参数) throw Excepion {} 例: public int addNumber(int a,int b){ } 注:方法名中的参数int a,int b为局部变量 类方法中的一类特殊方法:构造方法。 构造方法是当用类生成对象时,系统在生成对象的过程中利用的方法。 注意:构造方法在生成对象的时候会被调用,但并不是构造方法生成了对象。 构造方法没有返回值。格式为:public 方法名。 构造方法的方法名与类名相同。 构造方法是在对象生成的过程中自动调用,不可能利用指令去调用。 在一个对象的生成周期中构造方法只用一次,一旦这个对象生成,那么这个构造方法失效。 用类来生成对象的语句: Student s=new Student()。 第一个Student表示这是用Student类进行定义。“Student()”表示调用一个无参数的构造方法。 如果()中有参数,则系统构造对象的过程中调用有参的方法。 此时S称为一个对象变量。 Student s的存储区域存放的是地址:一个对象在硬盘上占有一个连续地址,首地址赋予s空间。 S称为对象Student的引用。 注意:在对象变量中存放的是引用(地址);在简单变量中存放的是数值。 可以构造多个构造方法,但多个构造方法的参数表一定不同,参数顺序不同即属于不同的构造方法: public student(string name,int a){ } public student(int a,string name){ } 为两个不同的构造方法。 如果我们未给系统提供一个构造方法,那么系统会自动提供一个为空的构造方法。 练习:写一个类,定义一个对象,定义两个构造方法:一个有参,一个无参。 (编写一个程序验证对象的传递的值为地址) 注意下面这种形式: static void changename(student stu){stu.setName “LUCY”} 注意生成新的对象与旧对象指向无关,生成新对象生命消亡与旧对象无关。 面向对象方法的重载(overloading)和覆盖(overriding)。 在有些JAVA书籍中将overriding称为重载,overloading称为过载。 Overloading在一个类中可以定义多个同名方法,各个方法的参数表一定不同。但修饰词可能相同,返回值也可能相同。 在程序的编译过程中根据变量类型来找相应的方法。因此也有人认为 overloading是编译时的多态,以后我们还会学到运行时多态。 为什么会存在overloading技术呢?作为应对方法的细节。 利用类型的差异来影响对方法的调用。 吃()可以分为吃肉,吃菜,吃药,在一个类中可以定义多个吃方法。 构造方法也可以实现overloading。例: public void teach(){}; public void teach(int a){}; public void teach(String a){}为三种不同的方法。 Overloading方法是从低向高转。 Byte—short—float—int—long—double。 在构造方法中,this表示本类的其他构造方法: student(){}; student(string n){ this();//表示调用student() } 如果调用student(int a)则为this(int a)。 特别注意:用this调用其他构造方法时,this必须为第一条语句,然后才是其他语句。 This表示当前对象。 Public void printNum(){ Int number=40; System.out.println(this.number); } 此时打印的是实例变量,而非局部变量,即定义在类中而非方法中的变量。 This.number表示实例变量。 谁调用this.number那么谁即为当前(this)对象的number方法。 封装:使对象的属性尽可能私有,对象的方法尽可能的公开。用private表示此成员属性为该类的私有属性。 Public表示该属性(方法)公开; Private表示该属性(方法)为只有本类内部可以访问(类内部可见)。 (想用private还要用set和get方法供其他方法调用,这样可以保证对属性的访问方式统一,并且便于维护访问权限以及属性数据合法性) 如果没有特殊情况,属性一定私有,方法该公开的公开。 如果不指明谁调用方法,则默认为this。 区分实例变量和局部变量时一定要写this。