类与对象、封装、构造方法

类与对象、封装、构造方法

第一章 面向对象思想

1.1面向对象思想概述

在编程的世界中,有两种主流的思想:

面向过程:当需要实现一个功能的时候,每一个步骤都要自己亲力亲为,处理每一个细节。

面向对象:当需要实现一个功能的时候,不关心具体的步骤,而是找一个已经具有该功能的人,来帮我做事儿。

(也就是自己不做,找人帮我做事儿,偷懒儿。)

1.2类和对象

定义好了一个类之后,通常情况下不能直接使用它。如果希望使用,需要创建一个对象。

也就是根据手机设计图,创造一个真正的手机。

如何使用自定义的类。

  1. 导包:需要使用的类在什么位置。

import 包路径.类名称;

备注:

A.如果需要使用的类,和当前类,在同一个包里面,那么可以省略导包。

B.如果需要使用的类,位于java.lang包下,那么就可以不导包。
  1. 创建,格式:

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

Student stu = new Student();

1.3类的定义

定义一个类,用来模拟现实当中学生事物。

属性:姓名、年龄

行为:吃饭、睡觉、学习

对应到类当中:

成员变量(属性):

String name;

int age;

成员方法(行为):

public void eat() {}

public void sleep() {}

public void study() {}
  1. 如果一个变量直接定义在类当中,在方法外,那么这就是一个成员变量。(移动位置了)

  2. 如果一个方法定义的时候没有static,那么这就是一个成员方法。(去掉static)

1.4对象的使用

如何使用自定义的类。

  1. 导包:需要使用的类在什么位置。

    import 包路径.类名称;

    备注:

    A.如果需要使用的类,和当前类,在同一个包里面,那么可以省略导包。

    B.如果需要使用的类,位于java.lang包下,那么就可以不导包。

  2. 创建,格式:

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

    Student stu = new Student();

  3. 使用,两种方式:

    使用成员变量:对象名.成员变量名

    使用成员方法:对象名.成员方法名(参数)

1.5类与对象练习

定义一个类,用来模拟手机事物:

属性:品牌、价格、颜色

行为:打电话、发短信

对应到类当中:

成员变量(属性):

String brand;

double price;

String color;

成员方法(行为):

public void call(String who) {}

public void sendMessage() {}
1.6对象内存图
一个对象的内存图

这里写图片描述

两个对象的内存图!这里写图片描述
两个对象名指向同一块堆内存这里写图片描述
使用自定义的类作为参数类型

这里写图片描述

使用自定义的类作为返回值类型这里写图片描述
1.7成员变量和局部变量区别

任何数据类型,都可以作为方法的参数类型。

当基本类型作为方法参数的时候,传递的是一个【数据值】。

当引用类型作为方法参数的时候,传递的是一个【地址值】。

如果两个人的地址值相同,那么根本操作的就是同一个对象。

此前学习的都叫做局部变量。

今天新学的叫做成员变量。

二者有什么区别?

  1. 代码当中的位置不同。【重点】

局部变量:定义在方法{}当中,或者是方法的参数。

成员变量:直接定义在类当中,在方法外。

  1. 内存当中的位置也不同。(了解)

局部变量:栈内存。

成员变量:堆内存。

  1. 生命周期也不同。(了解)

局部变量:随着方法进栈而出现,随着方法出栈而消失。

成员变量:随着对象创建而出现,随着对象被回收而消失。(一般更长)

  1. 默认值不同。【重点】

局部变量:没有默认值,如果不赋值,不能用。

成员变量:如果没有赋值,那么会有一个默认值。

  1. 作用域不同。(了解)

局部变量:只有当前方法内部才可以用。

成员变量:只要是当前类里面,就能用。

第二章 封装

2.1封装概述
概述

面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外部无法直接操作和修改。封装可以被人为是一个保护屏障,防止该类代码和数据被其他类随意访问。要访问该类的数据,必须通过指定的方式。适当的封装可以让代码更容易理解与维护,也加强了代码的安全性。

原则

将属性隐藏起来,若需要访问某个属性,提供公共方法对其访问。

2.2封装的步骤

使用private关键字来修饰成员变量。

对需要访问的成员变量,提供对应的一对getXxx方法、setXxx方法。

2.3封装的操作–private关键字

问题描述:我们定义了Person类,指定了其中成员变量的含义,但是却无法阻止不合理的数据被设置进来。不安全。

解决方案:对需要保护的成员变量使用private关键字进行修饰。

private 数据类型 成员变量名称;

加上之后:本类当中的使用不受影响,但是超出了本类范围,外面就不能直接使用了。

为private成员变量编写一对儿Getter Setter方法:

Getter方法的定义:一种成员方法,有返回值,没有参数,名字叫做getXxx,后面是对应的成员变量名称。

Setter方法的定义:一种成员方法,没有返回值,有参数,名字叫做setXxx,后面是对应的成员变量名称。

特别注意

定义一个学生类,里面有姓名、年龄、性别。要求使用private关键字。

对于基本数据类型boolean来说,setXxx方法规则不变,但是getXxx必须换成isXxx的形式。

2.4封装优化1–this关键字

问题描述:

局部变量和成员变量出现了重名现象,编译照样没有错误,但是运行的时候,根据就近原则,使用的是局部变量。区分不开。

解决方案:

使用一种简单的格式,就可以区分:

this.成员变量

this代表当前对象,“通过谁调用的方法,谁就是this。”

2.5封装优化2–构造方法

构造方法是一种特殊的方法,专门用来创建对象的。

当我们通过new关键字创建对象的时候,其实就是在调用构造方法。

构造方法:

public 类名称(参数类型 参数名称) {

// ...

}

注意事项:

  1. 构造方法的名称必须和所在的类名称完全一样,就连大小写也要完全一样。

  2. 构造方法根本不写返回值类型,就连void都不写。

  3. 构造方法当中不能return一个具体数值。

  4. 如果没有定义任何构造方法,那么编译器将会默认赠送一个无参数、什么都不做的构造方法。

  5. 一旦自己定义了至少一个构造方法,那么编译器将根本不再赠送。

  6. 构造方法也是可以重载的。

重载(Overload):方法名称一样,但是参数列表不一样。

如何定义一个标准的XXX类?
  1. 所有的成员变量都使用private私有化。

  2. 编写一个无参数的构造方法。

  3. 编写一个全参数的构造方法。

  4. 为每一个成员变量编写一对儿Getter Setter方法。

2.6–Javabean
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值