7.面向对象

MODULE 7 面向对象

1.知道为啥使用面向对象思想编程

2.知道怎么使用面向对象思想编程

3.知道什么时候使用面向对象思想编程

4.会利用代码去描述世间万物的分类

5.会在一个类中访问另一个类中的成员 -> new对象

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

一、类和对象

(一)面向对象的介绍

1.面向过程:自己的事情自己干,代表语言c语言

2.面向过程:自己的事情别人去干,代表语言java语言

3.为啥要使用面向对象思想:懒

很多功能别人都给我们实现好了,我们只需要直接拿过来使用即可,简化了我 们自己的编写过程,减少了我们的代码量

4.什么时候使用面向对象思想编程:

调用别人的功能时

在一个类中想使用别的类中的成员时,就使用面向对象思想编程

至于我们使用的功能怎么去实现的,我们不关心,我们只要知道怎么使用即可

5.怎么使用面向对象思想编程:

(1)new一个 -> 点代表调用

(2)特殊:如果调用的成员带static关键字,我们不需要new,我们直接类 名点即可

(二)类和对象

1.类(实体类)class

(1)测试类:待main方法的类,主要是运行代码的

(2)实体类:是一类事物的抽象表现形式

组成部分:

A.属性(成员变量):这一类事物有啥

(a)定义位置:类中方法外

(b)作用范围:作用于当前位置

(c)定义格式:数据类型 变量名

(d)默认值:

整数:0

小数:0.0

字符:’\u0000’

布尔:false

引用:null

B.行为(成员方法):这一类事物都能干啥

将module6中方法的static去掉,其他都一样

2.对象

(1)概述:一类事物的具体表现

(2)使用:

A.导包:import 包名.类名

如果两个类在同一个包下,想要使用对方的成员不需要导包

不在同一个包下,需要导包

特殊包:java.lang -> 使用lang包下的类不需要导包 -> String

友提:在学习四种权限修饰符之前,尽量让两个类在同一个包 下

B.创建对象:想要使用哪个类中的成员,就new哪个类的对象

类名 对象名 = new 类名() -> 比如Person p = new Person()

C.调用成员(成员变量,成员方法) -> 想要使用哪个类中的成 员,就用哪个类的对象去点那个成员

对象名.成员变量名 = 值

对象名.方法名() -> 调用的是无参无返回值方法

对象名.方法名(实参) -> 调用的是有参无返回值方法

数据类型 变量名 = 对象名.方法名() -> 调用的是无参有 返回值方法

数据类型 变量名 = 对象名.方法名(实参) -> 调用的是有 参有返回值方法

(三)匿名对象的使用

1.int i = 10

(1)int:是数据类型

(2)i:变量名

(3)等号右边的10:真正的数据

2.Person p = new Person()

(1)等号左边的Person:对象的类型,好比是int

(2)p:对象名

(3)等号右边的new Person():真正的数据,是一个Person对象,将这个 对象真正创建出来了

3.所谓的匿名对象:其实就是没有等号左边的部分,只有等号右边的部分(对象)

4.使用:

new 对象().成员

5.注意:

(1)如果我们只想单纯的调用一个方法,让方法执行,我们可以考虑使用匿 名对象

(2)但是如果涉及到赋值,千万不要使用匿名对象

(四)一个对象的内存图

(五)两个对象的内存图

phone1和phone2都是新new出来的对象,所以在堆内存中开辟了两个不同的空 间,修改自己空间中的数据不会影响其他空间中的数据

(六)两个对象指向同一空间内存图

phone2是phone1给的,phone1在内存中保存的是地址值,所以此时phone2和 phone1地址值一样,操作同一片空间中的数据,所以修改一个对象的数据会影响 另一个对象

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

1.定义位置不同(重点)

(1)成员变量:类中方法外

(2)局部变量:定义在方法之中或者参数位置

2.初始化值不同(重点)

(1)成员变量:有默认值的,所以不用先手动赋值,就可以直接使用

(2)局部变量:是没有默认值的,所以需要先手动赋值,再使用

3.作用范围不同(重点)

(1)成员变量:作用于整个类

(2)局部变量:只作用于自己所在的方法,其他方法使用不了

4.内存位置不同

(1)成员变量:在堆中,跟着对象走

(2)局部变量:在栈中,跟着方法走

5.生命周期不同

(1)成员变量:随着对象的创建而产生,随着对象的消失而消失

(2)局部变量:随方法的调用而产生,随着方法的调用完毕而消失

package com.shujia.d_object_neicun;

public class Person {

String name;// 成员变量

public void eat(){

int i = 10;// 局部变量

System.out.println(i);

System.out.println(name);// 成员变量不用手动赋值可以直使用,因为 有默认值

}

public void drink(){

int j;

System.out.println(j);// 局部变量没有默认值,所以需要手动赋值再 使用

System.out.println(name);

System.out.println(i);// i是eat方法的局部变量,在drink中使用 不了

}

}

三、练习

自定义类型(引用数据类型)

这种数据类型操作之前必须要赋值

需要new对象赋值(String比较特殊,可以直接=赋值)

posted @ 2024-09-05 19:47  dededea  阅读(7)  评论(0编辑  收藏  举报