Java基础 4( 面向对象上)

面向对象

1面向对象思想引入

前面,我们需要实现某种需求时,往往会定义方法,然而方法会越来多,这时候就会考虑封装这些方法,我们知道类可以存放方法,故可以用类封装这些方法,需要时,我们便调用这些类中的方法.这就是面向对象的编程方法.

2. 面向过程

假设有一个需求:求数组中的最大值;

定义一个数组,静态初始化---->定义一个参照物---->遍历....

给一个需求,对需求分析,然后一步一步进行操作,最终得到某一个结果,整个过程都是自己在完成....

3.面向对象思想概述

面向对象是基于面向过程的编程思想

面向对象特征:

1) 面向对象让我们从执行者变成指挥者

2) 面向对象事情变得更简单

3) 面向对象更符合我们的生活习惯

 

举例:

面向过程  :付款  付钱 --->商家确认钞票真伪--->找零---->把钱放入钱包

面向对象  :      支付宝 ---->扫码付款

 

 

4.面向对象开发,设计,特征

 

  面向对象开发

就是不断的创建对象,使用对象,指挥对象做事情。

面向对象设计

其实就是在管理和维护对象之间的关系。

面向对象特征

封装(encapsulation)

继承(inheritance)

多态(polymorphism)

 

5.类与对象的关系

我们学习编程语言,就是为了模拟现实世界的事物,实现信息化。

比如:去超市买东西的计费系统,去银行办业务的系统。

我们如何表示一个现实世界事物呢:

属性 就是该事物的描述信息

行为 就是该事物能够做什么

举例:学生事物

我们学习的Java语言最基本单位是类,所以,我们就应该把事物用一个类来体现。

 

 

 

6.类的定义

现实世界的事物

属性 人的身高,体重等

行为 人可以学习,吃饭等

 

Java中用class描述事物也是如此

成员变量 就是事物的属性

成员方法 就是事物的行为

定义类其实就是定义类的成员(成员变量和成员方法)

7.类与对象案例

如何定义

按照事物到类的过程一步步分析

如何使用

创建对象:

类名 对象名 = new 类名();

对象名.成员变量

对象名.成员方法

代码如下

首先创建一个舍友类

 Java基础 4( 面向对象上)

 

然后创建一个学生测试类,在这里面调用舍友类的成员变量和成员方法

 

输出结果

 Java基础 4( 面向对象上)


Java基础 4( 面向对象上)

8. 对象内存

定义一个phone

 Java基础 4( 面向对象上)

 

一个对象的调用内存图解(内含代码)

 Java基础 4( 面向对象上)

 

 

 

//创建对象的过程

1) 先通过测试类李曼的main主程序进行加载Phone

2) Phone p 先在栈内存开辟内存空间,创建一个phone对象,需要在队内存申请堆内存空间

3) 通过无参构造方法给Phone类对象进行默认初始化

4) 通过给成员变量赋值的形式,给对象进行显示初始化

5) 显示初始化完毕,整个对象创建完毕折后,给对象进行内存空间的地址值分配

6) 通过地址值找到对应对象.

 

两个对象的调用内存图解(内含代码)

 Java基础 4( 面向对象上)

和一个对象调用不同的是 再堆内存中又创建了一个 new Phone()

 

三对象的调用内存图解(内含代码)

 Java基础 4( 面向对象上)

 

这里面第三个对象调用的是第一个对象中的堆内存

 

当第三个对象进行赋值时不会创建一个新的new Phone,而是会在 第一个对象的堆中进行读写操作,相当于多个引用指向同一个内存

 

无论是调用p.price或是p3.price 两者输出结果是一样的 从p3.price中的赋值会在堆内存中替换原有的值 ,类似于这样的成员变量或者方法在被多个对象引用时也是一样的..

 

 

9.成员变量和局部变量的区别

成员变量和局部变量的区别

 1)在类中位置不同

 成员变量:类中,方法外

局部变量:方法声明上,或者再方法定义中

2)在内存中的位置不同:

 成员变量:堆内存

局部变量:栈内存

 3)生命周期不同:

 成员变量:成员变量是随着类的加载而加载,随着类的消失而消失

局部变量:随着方法的调用而存在,随着方法调用完毕而消失

 4)初始化值不同

 成员变量:初始化由系统默认初始化,

     对于成员变量,可以不给初始化值,由系统给,然后显示初始化;

     局部变量:定义一个局部变量,必须进行初始化,如果不初始化,无法使用(在使用之前进行初始化)

 

 

注意:在一个定义中 不能随意定义为一个成员变量,尽量定义为一个局部变量,为了从内存角度考虑(如果该变量是该类的属性则要定义为成员变量)

10.匿名对象

匿名对象:就是创建时没有名字的对象

 

例如: Student s = new Student();

Student s 相当于给 new Student()取了名字;

匿名对象在用的时候直接 new Student(); 不取名字.

 

在开发中经常会使用匿名对象

匿名对象在使用过程中一般使用一次, 因为每使用一次匿名对象,相当于在堆中又创建了一个 new Student();会造成内存溢出现象

11.形式参数

(针对值有效)

形式参数的问题:

  1)如果是基本数据类型,形参的改变对实际值几乎没有影响

public int sum(int a,int b) { //形式参数是基本类型  :

return a+b ;

}

}

//在上面的形参改变对最后的输出结果没有任何影响

  2)如果是引用数据类型,形参的改变会影响结果

代码如下:

 Java基础 4( 面向对象上)

 Java基础 4( 面向对象上)

 

12.private关键字

private关键字

1) 是一个权限修饰符

2) 可以修饰成员(成员变量或者成员方法)

3) private修饰的成员只有在本类中才能被访问

private:体现的也是一种封装思想

封装:

标准类的写法,将成员变量全部私有化,private修饰的成员变量只能在本类中访问,可以通过公共的访问方法去访问成员变量

 Java基础 4( 面向对象上)

 

13.this关键字

this:代表所在类的对象引用

重点:方法被哪个对象调用时.this就代表那个对象

代码如下

 Java基础 4( 面向对象上)

// 若是有对象调用该类 例如 th t = new th(); 则调用th.setName方法时,其中的

This.name = t.name (,其实意思上是这个意思.这个t.name是私有变量,无法正常调用)

所以this name 意义上是(成员变量中的name).

 

什么时候使用this?

局部变量隐藏成员变量的时候;

 

14. 构造方法

构造方法的作用:

     就是给对象进行初始化.

构造方法也属于一类的组成

构造方法和普通方法的区别:

1.构造函数的命名必须和类名完全相同;在java中普通函数可以和构造函数同名,但是必须带有返回值。
2.构造函数的功能主要用于在类的对象创建时定义初始化的状态.它没有返回值,也不能用void来修饰.这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择.而其他方法都有返回值.即使是void返回值,尽管方法体本身不会自动返回什么,但仍然可以让它返回一些东西,而这些东西可能是不安全的.
3.构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用,一般方法在程序执行到它的时候被调用.
4.当定义一个类的时候,通常情况下都会显示该类的构造函数,并在函数中指定初始化的工作也可省略,不过Java编译器会提供一个默认的构造函数.此默认构造函数是不带参数的.而一般方法不存在这一特点

构造方法和创建对象的区别:

对象可以说是一个类的实例化,类你可以一个模板,而构造方法就是这个模板提供的入口,你通过这个入口能new一个 对象举个例子:

例如:Test是一个类,那么 Test t = new Test();这个语句叫做类的实例化,即tTest类的一个实例,这个t就是一个Test类型的对象,在这个实例化过程中,也就是new Test();系统会自动调用Test类中的构造方法,如果你在定义Test类的时候写了无参构造方法Test(),那么就调用这个方法,如果你没写构造方法系统会默认有一个无参构造方法,如果你写了有参构造,那么new Test();会报错,必须写成:new Test(参数);构造方法的作用就是规定在创建这个实例的时候想做的事,比如你可以在这里给Test类的私有变量赋值

 


构造方法:

1. 方法名和类名相同

2. 构造方法.void都没有

注意事项

1. 若是没有写无参构造,系统会默认提供无参构造

2. 如果我们写了无参构造或者有参构造,系统不会再提供无参构造,定义一个类时,永远给出一个无参构造.

3. 构造方法是可以重载的.(可以通过定义不同类型 或者不同参数个数的方法)

 给成员变量有两种方式:

1)set()get()公共的访问方法

2)可以通过有参构造进行赋值

15. 成员方法的分类

成员方法的分类

1. 按返回值划分,

void形式:没有具体返回值.

void形式:无具体返回值

2. 参数分类;

1)空参

2)无参

代码如下

Java基础 4( 面向对象上)

 

16.static关键字

 定义一个人类

 成员变量:姓名   年龄 国籍

创建了三个Person对象,每一个对象的国籍都是中国,值是重复的,这样的话在堆内存中比

浪费内存空间,不好

  

针对这种情况,多个对象对同一个变量进行共享,这个时候Java提供了一个关键字---static:  静态的(共享的)

在方法区中:开辟一个静态区域: 都是静态标记

 

关于static关键字:

1)静态随着类的加载而加载

2)static优先于对象存在

回想:main  public static void main(..){...}

3)static共享数据,可以被多个对象进行共享

举例:饮水机(staticd:共享的)

 水杯(不能共享的...)

4)如果数据被静态修饰的,它可以被类名直接调用

被静态修饰的方法:类名.方法名()被静态修饰的变量:类名.变量名;

一个类中可有静态变量,也可以有非静态

可以有静态成员方法,也可以非静态的成员方法

静态的方法只能访问静态变量,或者是静态的方

非静态的方法,既可以访问静态变量也可以非静态的变量...

 

17. 如何制作文档说明书

如何制作一个文档说明书

 1)创建一个数组,静态初始化

2)创建一个工具类,ArrayTool(你可以做一个其他功能的工具类),提供一些静态功能

遍历,最值,查找

3)ArrayTool,每类,方法加上文档注释

 4)打开dos控制台:

 找到当前路径:

javadoc -d(目录名我这里写了bbc) -author -version ArrayTool(文件名名).java

  最后生成结果如下

 Java基础 4( 面向对象上)

Java基础 4( 面向对象上)

 

点开bbc文件夹

 Java基础 4( 面向对象上)

 

打开index.html文件 是一个简单的文档说明