java面向对象学习心得总结(从零开始学JAVA-04.JAVA面向对象入门第一季)
java面向对象学习心得总结(从零开始学JAVA-04.JAVA面向对象入门第一季)封装(Encapsulation);三大特征:---------------------------------------------------------面向对象更加符合我们常规的思维方式,稳定性好,可重用性强,易于开发大型软件产品,有良好的可维护性。当然上述例子仅仅只是说明了面向对象的一个特征——封装。除此之外面向对象还有两大特征,我们在具体讲解到的时候再做分析。
今天讲解目录来了:
面向对象思想:
面向过程(PO):一种较早的编程思想,顾名思义该思想是站在过程的角度思考问题,强调的就是功能行为 功能的执行过程 即先干啥 后干啥。而每一个功能我们都使用函数(类似于方法)把这些步骤一步一步实现,使用的时候依次调用函数就可以了。
面向对象的优势和特点:
---------------------------------------------------------
面向对象更加符合我们常规的思维方式,稳定性好,可重用性强,易于开发大型软件产品,有良好的可维护性。
当然上述例子仅仅只是说明了面向对象的一个特征——封装。除此之外面向对象还有两大特征,我们在具体讲解到的时候再做分析。
三大特征:
封装(Encapsulation);
继承(Inheritance);
多态(Polymorphism);
封装是指将对象的实现细节隐藏起来,然后通过公共的方法来向外暴露该对象的功能。
继承是面向对象实现软件复用的重要手段,当子类继承父类后,子类是一种特殊的父类,能直接或间接获得父类里的成员。
多态是可以直接把子类对象赋给父类变量,但是运行时依然表现出子类的行为特征,这意味着同一类型的对象在运行时可能表现出不同的行为特征。
注意:
千万不要误解为面向对象一定就优于面向过程的设计.
面向对象是基于面向过程的 永远不可能取代面向过程.
对象和类的关系:
你在街上看到一个美女,就可以把这个美女看成一个对象,那么该对象有两方面的定义:状态和行为。
美女有状态,如身高,年龄,皮肤颜色等等;美女还有行为,如走路,说话,抛媚眼等等。
作为基本定义,对象(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修饰.
学习大纲: