今天讲解目录来了: 面向对象思想: 面向过程(PO):一种较早的编程思想,顾名思义该思想是站在过程的角度思考问题,强调的就是功能行为,功能的执行过程,即先干啥,后干啥。而每一个功能我们都使用函数(类似于方法)把这些步骤一步一步实现,使用的时候依次调用函数就可以了。 说人话:提倡和注重的:每一个功能都使用函数来完成,在使用某一个功能的时候,就挨着挨着调用函数即可. 案例:设计购物、做饭、吃饭,洗碗、以及写代码的程序。 面向过程最大的问题在于随着系统的膨胀,面向过程将无法应付,最终导致系统的崩溃。为了解决这一种软件危机,我们提出面向对象思想。 面向对象(OO):一种基于面向过程的新的编程思想,顾名思义该思想是站在对象的角度思考问题,我们把多个功能合理的放到不同对象里,强调的是具备某些功能的对象。 具备某种功能的实体,称为对象. 面向对象的优势和特点: --------------------------------------------------------- 面向对象更加符合我们常规的思维方式,稳定性好,可重用性强,易于开发大型软件产品,有良好的可维护性。 当然上述例子仅仅只是说明了面向对象的一个特征——封装。除此之外面向对象还有两大特征,我们在具体讲解到的时候再做分析。 三大特征:
封装是指将对象的实现细节隐藏起来,然后通过公共的方法来向外暴露该对象的功能。 继承是面向对象实现软件复用的重要手段,当子类继承父类后,子类是一种特殊的父类,能直接或间接获得父类里的成员。 多态是可以直接把子类对象赋给父类变量,但是运行时依然表现出子类的行为特征,这意味着同一类型的对象在运行时可能表现出不同的行为特征。 注意: 千万不要误解为面向对象一定就优于面向过程的设计. 面向对象是基于面向过程的,永远不可能取代面向过程. 对象和类的关系: 你在街上看到一个美女,就可以把这个美女看成一个对象,那么该对象有两方面的定义:状态和行为。 美女有状态,如身高,年龄,皮肤颜色等等;美女还有行为,如走路,说话,抛媚眼等等。 作为基本定义,对象(object)可以定义成包含数据(状态)和行为的一个实体,对象也称为实例(instance)。 ----------------------------------------------------------------------------------------------------- 对象: 对象是人们要进行研究任何事物,一切事物都可以认为是对象。 对象具有状态和行为: 对象具有状态,比如姓名,年龄,性别等。 对象还有行为,比如吃饭,睡觉,写代码等。 ----------------------------------------------------------------------------------------------------- 类(类型): 具有相同特性(数据元素)和行为(功能)的多个对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象,类实际上就是一种数据类型。 类具有特性,对象的状态,用成员变量来描述。 类具有功能,对象的行为,用方法来描述。 ----------------------------------------------------------------------------------------------------- 什么是类:类是对象的类型/模板。创建一个对象,就是使用一个类作为构建该对象的基础。 ----------------------------------------------------------------------------------------------------- 在编程的世界:是先有类,再有对象,对象是根据类创建出来的. 类的定义 案例:分析出对象和类,以及对象具备的状态和行为。 --------------------------------------------------------------- 春哥,现年31岁,身高175cm,体重55kg,会跳舞,会唱歌; 凤姐,现年30岁,身高145cm,体重48kg,会跳舞,会唱歌; --------------------------------------------------------------- 名词解析法: 名词:对象/对象的状态 动词:对象的功能/行为 --------------------------------------------------------------- 人类: 状态: 名字 年龄 身高 体重 行为: 唱歌 跳舞 --------------------------------------------------------------- 在程序中,对象的状态使用成员变量表示,对象的行为使用方法表示.. 类的定义: class 类名 { 0 ~ N个成员变量(字段(Field)); 0 ~ N个方法 } 注意: 1:若类使用public修饰,则当前所在的文件名必须和类名相同. 在以后的开发中,都是一个文件一个类,都建议使用public修饰. 2:类型必须符合标识符的命名规范(使用名词,首字母大写.). 对象基本操作: 对象的创建和使用: 在程序中,必须先有类,再有对象(先得有模板,再有根据模板制造出来的个体). 1):创建对象 :类 对象名 = new 类名(); 2):对象调用方法:对象名.方法名([实参]); 3):对象操作字段 赋值: 对象名.变量 = 值; 取值: 变量 = 对象名.变量; 4):打印对象: 默认输出:Servant@659e0bfd,对象的类型@十六进制的hashCode, 和数组一样,看不到对象中的数据,期待我们讲解Object类. 5):比较对象: 每次new,都会在堆内存开辟新的内存空间. 而"==",在比较引用类型的时候,比较的是引用的内存地址值. 6):对象的生命周期. 从使用new在堆中开辟内存开始,到垃圾回收期回收之间. 垃圾:内存中的某一块空间没有被某一个变量所引用. 垃圾产生时,不一定运行GC,GC是自行调度,程序员控制不了. 7):匿名对象. 没有名字的对象,就是创建对象时,没有赋给一个变量. new Servant();创建一个匿名对象 只在堆中开辟内存空间,不会被栈中的变量所引用. 特点:匿名对象只能使用一次,就是刚刚创建的这一次. 对象的实例化过程: 构造器: 我们在创建Student对象,代码如下: Student s1 = new Student(); 其实我们在创建对象的时候,都是调用构造方法,构造函数/构造器/构造子. -------------------------- 构造器:主要用于创建对象并返回对象和初始化对象数据. -------------------------- 构造器的特点: 类都有一个默认构造器,当不显示的定义构造器的时候,编译器会在编译的时候,提供一个默认构造器. 1):构造器的名字必须和当前所在类的类名相同. 2):不需要定义返回值类型,更加不能使用void作为返回.构造器的目的在于创建和返回当前类的对象,即使要编写返回类型,也应该是当前类名,如:Student Student(){},既然和当前类名相同,就规定统统省略. 3):构造器中不需要使用return来返回当前构造的对象. ----------------------------- 1):无参数,无方法体. 2):构造器的访问修饰符和当前类的修饰符相同(是否有public). 3):一旦在类中显示地提供了构造器,则默认的构造器就不再提供了. 推论: 一个类至少有一个构造器(即使没有自定义,编译器也会创建一个默认的). ----------------------------------------- public class Student{ 默认的构造器 public Student(){} } --------------- class Student{ 默认的构造器 Student(){} } ------------------------------------------------------- 方法的重载:在同一个类中,方法同名,但是参数列表不同. 解决了相同的功能方法,因为参数列表不同,而带来参数名不同的问题. 构造器重载: 不同类的构造器是不相同的. 对于构造器重载来说,肯定是在同一个类中,并且构造器都是和类名相同. 所以在同一个类中的多个构造器就必须参数列表不同(参数类型,参数个数,参数顺序). ------------------------------------------------------- Student(){} Student(String name){} Student(String name,int age){} 上述的构造器就是重载关系. ------------------------------------------------------- static修饰符: 类是用来描述多个对象共同的状态和行为的,就拿人的姓名. 看右图,春哥和凤姐这个两个对象,都有拥有姓名,年龄身高和体重等状态,但是不同对象的状态值却不一样.此时发现,我们所描述的信息是针对于某一个具体对象的,对象不同,那么名字是可能不一样的. --------------------------------------------------------------- 现在,我想描述一类事物的状态和行为,比如:人类,有总人数的状态,有毁灭的行为. 可能有人认为,毁灭是一个行为,那么可以在Person类中,定义一个方法(destory),若想毁灭人类,则调用该方法即可.但是新的问题又来了?到底谁来调用destory方法? 春哥.destory(); 凤姐.destory(); 都不对的,因为他们只能表示自己,不能表示人类. ---------------------------------------------------------------- 我们平时在类中定义的成员变量和方法,都是对象的状态和行为. 那如何表示,一类事物的状态和行为呢?不是某一个个体(对象)的. 此时,为了解决该问题,咱们得学习一个修饰符:static. ----------------------------------------------------------------- static可以修饰成员变量(字段),可以修饰方法等,就表明该字段或该方法属于类,而不属于某一个对象. ----------------------------------------------------------------- 类成员(static修饰成员)的特点: 1):随着类被加载进JVM而同时也最初始化和在内存中分配空间. 2):优先于对象存在.(对象是通过new出来的.) 3):被该类的所有对象所共享. 该状态/行为是整个人类的,那么每一个人都是拥有该状态/行为的. 4):直接使用类名调用即可. 人类毁灭: Person.destory(); 类成员和实例成员的访问: ------------------------------------------------ 类 成员:使用static修饰的成员变量/方法,属于类,所以可以直接使用类名访问. 实例成员:没有使用static修饰的成员变量/方法,属于对象.必须使用对象来访问. ---------------------------------------------------------------------------------- 访问规则: 1):静态方法只能访问静态的成员变量/方法,不能访问非静态的成员变量/方法(属于对象). 静态成员优先于对象存在. 2):非静态方法可以访问非静态成员变量/方法,也可以访问静态的成员变量/方法. 因为底层使用对象访问的. 3):对象可以访问静态成员,但是不推荐,因为底层依然使用类名在调用. 4):类可以访问静态成员,类不能访问非静态成员(成员变量/方法). ----------------------------------------------------------------------------------- 一般的,在开发中类成员如何使用: 一般的,在开发中工具类的工具方法都使用static修饰,如此的好处,直接使用工具类名.方法就可以调用,使用更加简单. 数组的工具类:java.util.Arrays中的工具方法. 一般的,若静态方法需要访问一个成员变量,此时才把成员变量使用static修饰. 学习大纲: 学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:559743457【长按复制】 我们一起学Java! |
|