Java基础 4( 面向对象上)

本文介绍了面向对象编程的基本概念,包括面向对象与面向过程的区别、面向对象的三大特性(封装、继承、多态)、类与对象的关系及使用方法,并探讨了成员变量与局部变量的区别、构造方法的作用等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面向对象

1面向对象思想引入

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

2. 面向过程

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

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

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

3.面向对象思想概述

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

面向对象特征:

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

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

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

 

举例:

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

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

 

 

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

 

  面向对象开发

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

面向对象设计

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

面向对象特征

封装(encapsulation)

继承(inheritance)

多态(polymorphism)

 

5.类与对象的关系

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

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

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

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

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

举例:学生事物

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

 

 

 

6.类的定义

现实世界的事物

属性 人的身高,体重等

行为 人可以学习,吃饭等

 

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

成员变量 就是事物的属性

成员方法 就是事物的行为

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

7.类与对象案例

如何定义

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

如何使用

创建对象:

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

对象名.成员变量

对象名.成员方法

代码如下

首先创建一个舍友类

 

 

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

 

输出结果

 


8. 对象内存

定义一个phone

 

 

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

 

 

 

 

//创建对象的过程

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

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

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

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

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

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

 

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

 

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

 

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

 

 

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

 

当第三个对象进行赋值时不会创建一个新的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)如果是引用数据类型,形参的改变会影响结果

代码如下:

 

 

 

12.private关键字

private关键字

1) 是一个权限修饰符

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

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

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

封装:

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

 

 

13.this关键字

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

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

代码如下

 

// 若是有对象调用该类 例如 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)无参

代码如下


 

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

  最后生成结果如下

 


 

点开bbc文件夹

 

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值