首页 > 其他分享 >面向对象

面向对象

时间:2024-03-09 17:11:34浏览次数:27  
标签:name 构造方法 age 面向对象 Student public String

day07 总结笔记

01-面向对象介绍

  • 面向对象并非是一个技术, 而是一种编程的思想

    • 这种思想可以指导我们以什么思路解决问题, 以什么思路来组织代码

  • 问题 : 为什么要学习这种思想 ?

因为这套思想, 来源于生活, 生活中解决问题, 就是一系列的对象, 在一起打交道, 从而将问题解决.
所以我们希望写代码解决问题的时候, 也能按照生活中的这种思想
这样的话, 编程就会更加贴切于生活, 程序也会更加便于让人理解.
   
举例1: 解决随机数的问题 ---> Random对象
举例2: 解决键盘录入的问题 ---> Scanner对象
举例3: 封装学生数据 ---> Student对象
  • 面向对象我们学什么 ?

    • 学习自己如何设计对象

    • 学习已有的对象如何使用 (API章节)

  • 万物皆对象

    • 生活中的任何一种事物, 都可以通过代码, 将其描述为对象

     

02-类和对象

  • 前提 : Java中想要创建对象, 必须现有类的存在

  • 类的介绍 :

    • 一组相关属性和行为的集合, 将其理解为是对象的一张设计图

  • 对象的介绍 :

    • 对象是根据类 (设计图), 创建出来的实体

  • 类和对象的关系 :

    • 依赖关系 : 需要根据类, 创建对象

    • 数量关系 : 根据一个类, 可以创建出多个对象

  • 类的组成 :

属性 : 在代码中使用成员变量表示, 成员变量跟之前定义变量的格式一样, 只不过位置发生了改变 (类中方法外)

行为 : 在代码中使用成员方法表示, 成员方法跟之前定义方法的格式一样, 只不过去掉了 static 关键字
  • 类的设计

    • 知道什么设计为属性, 什么设计为行为

- 描述事物的一些[名词], 设计为属性
- 描述事物的一些[动词], 设计为行为

举例1: 我有一个{学生}叫做<张三>, 今年<23岁>, <180的身高>, 平时没什么特殊爱好, 就喜欢(吃饭)和(学习).
举例2: 前阵子我买了一台<白色>的<海尔>{洗衣机}, 花了<1999块钱>, (洗衣服)和(甩干)确实方便.
public class Student {
// 属性: 姓名, 年龄
String name;
int age;

// 行为: 吃饭, 学习
public void eat(){
System.out.println("吃饭");
}

public void study(){
System.out.println("学习");
}
}
  • 对象的创建和使用

    • 思路 : 当对象创建完毕后, 调用内部的成员, 都是拿着对象名 . 出来的

创建对象的格式 : 类名 对象名 = new 类名();

Student stu = new Student();
System.out.println(stu); // com.itheima.oop.Student@233ac477

使用对象成员变量的格式 : 对象名.变量名;

stu.name = "张三";
stu.age = 23;

System.out.println(stu.name);
System.out.println(stu.age);

使用对象成员方法的格式 : 对象名.方法名();

stu.eat();
stu.study();
  • 细节补充 :

1. 我们在定义类的时候, 成员变量通常不赋值.
(等对象创建完毕后, 再给成员变量赋值)

2. 成员变量没有赋值, 也可以直接使用, 使用的是默认值

 

03-对象的内存图

  • 务必打开 ppt 将内部流程梳理清楚

    • 目标 : 今后编写了创建对象的代码, 脑海中就要有堆的内存图

    Student stu = new Student();

     

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

  • 类中位置不同 :

    • 成员变量 : 方法外

    • 局部变量 : 方法内

  • 初始化值不同 :

    • 成员变量 : 有默认初始化值

    • 局部变量 : 没有默认初始化值, 使用之前必须完成赋值

  • 内存位置不同 :

    • 成员变量 : 堆内存

    • 局部变量 : 栈内存

  • 生命周期不同 :

    • 成员变量 : 随着对象的创建而存在, 随着对象的消失而消失

    • 局部变量 : 随着方法的调用而存在, 随着方法的运行结束而消失

  • 作用域 :

    • 都在自己所属的大括号中有效

     

05-this 关键字

  • 情况 : 当局部变量和成员变量重名

    • Java会根据就近原则, 优先使用局部变量

  • 问题 : 非要使用成员变量, 怎么办 ?

  • 回答 : 使用this关键字进行区分

class Student {
int num = 10;

public void show(){
int num = 20;
System.out.println(num); // 20
System.out.println(this.num); // 10
}
}
  • this可以解决的问题 : 区分局部变量和成员变量的重名问题

  • this的作用 :

this可以调用自己本类的成员

this.本类成员变量;
this.本类成员方法();
-------------------------------------------------

省略规则 :

this.本类成员方法() : this.可以直接省略
this.本类成员变量 : 如果局部变量和成员变量没有重名, this.可以省略不写
class Student {
int num = 10;

public void show(){
System.out.println(this.num); // 10
this.print();
}

public void print(){
...
}
}

 

06-构造方法

  • 介绍 : 构造方法又名构造器

    • 构建, 创造一个对象要调用的方法

    • 简单记 : 构造方法就是用于创建对象的方法

  • 格式 :

1. 方法名与类名相同, 大小写也要一致
2. 没有返回值类型, 连 void 都没有
3. 没有具体的返回值 (不能通过 return 语句带回结果数据)
public class Student {
public Student(){
System.out.println("我是Student类的空参数构造方法");
}
}
  • 构造方法的执行时机 :

    • 在创建对象的时候, 被调用执行

    • 每创建一次对象, 就会执行一次构造方法

  • 构造方法的作用 :

    • 本质作用 : 用来创建对象

    • 结合执行时机 : 在创建对象的时候, 给成员变量初始化

public class Student {

String name;
int age;

public Student(String name, int age){
this.name = name;
this.age = age;
}
}


Student stu = new Student("张三", 23);
  • 构造方法的注意事项 :

    • 如果一个类中没写构造方法, 系统将会给出一个 [默认的] [无参数的] 构造方法

    • 如果手动编写了构造方法, 系统就不会给出那个默认的无参构造了

      • 建议 : 无参构造, 带参构造, 全部手动给出.

    • 构造方法不允许手动调用

      • stu.Student(); 错误调用

       

07-封装思想 (很重要)

  • 面向对象有三大特征 :

    • 封装

    • 继承

    • 多态

  • 封装思想介绍 :

    • 隐藏实现细节, 仅对外暴露公共的访问方式

      • 结合插线板理解

  • 封装在代码中常见的体现 :

    • 将属性抽取到类中, 是对数据做了封装

    使用封装前 : 维护一个用户信息, 定义了5个变量, 数据过于零散

    String id = "001";
    String name = "张三";
    int age = 23;
    String tel = "156****1234";
    String address = "北京";

    ----------------------------------------------------------

    使用封装后 : 5个零散的数据, 就被封装到了一个整体的对象中

    public class User {
    String id;
    String name;
    int age;
    String tel;
    String address;

    // 假设我写了带参数构造方法
    }

    User u1 = new User("001","张三",23,"156****1234", "北京");
    User u2 = new User("002","李四",23,"156****1244", "北京");
    • 将代码抽取到方法中, 是对代码功能进行了封装

    程序员A : 编写了一个遍历打印数组的方法

    public void printArray(int[] arr){
    ...
    }


    程序员B : 无需关心方法内部实现, 只要知道怎么调用即可.


    以上过程, 就是程序员A, 将遍历打印数组这个功能代码, 封装到了printArray方法中.

     

08-权限修饰符

  • private : 同一个类中

  • (default) : 同一个类中, 同一个包中

  • protected : 就业班

  • public : 任意位置

 

09-标准 JavaBean (必掌握)

  • 所有成员变量 private 私有

  • 提供空参\带参构造方法

  • 对于私有的成员变量, 提供对应的setXxx和getXxx方法

package com.itheima.test;

/*
标准 JavaBean :

1. 成员变量全部private私有

2. 提供空参\带参构造方法

3. 提供对应的setXxx和getXxx方法
*/
public class Student {
private String name;
private int age;

public Student() {

}

public Student(String name, int age) {
this.name = name;
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

}
package com.itheima.test;

public class StudentTest {
public static void main(String[] args) {
// 1. 空参构造创建对象, 通过setXxx方法完成赋值
Student stu1 = new Student();
stu1.setName("张三");
stu1.setAge(23);
System.out.println(stu1.getName() + "---" + stu1.getAge());

// 2. 带参构造方法创建对象, 在创建的时候直接赋值
Student stu2 = new Student("李四", 24);
System.out.println(stu2.getName() + "---" + stu2.getAge());

// 重点强调: getXxx方法, 能够得到的是真实的数据, 使用方式, 不要局限在打印语句上
for(int i = 1; i <= stu2.getAge(); i++){
System.out.println("祝福" + stu2.getName() + "生日快乐!");
}

}
}
 

标签:name,构造方法,age,面向对象,Student,public,String
From: https://www.cnblogs.com/linzel/p/18062979

相关文章

  • python面向对象(一)
    面向对象(ObjectOrientedProgram)在Python中,所有的数据(包括数字和字符串)实际都是对象,同一类型的对象都有相同的类型。我们可以使用type()函数来获取关于对象的类型信息。什么是类,什么是对象?在Python中,使用类来定义同一种类型的对象。类(class)是广义的数据类型,能够定义复......
  • java基础 韩顺平老师的 面向对象(基础) 自己记的部分笔记
    194,对象内存布局基本数据类型放在堆里面,字符串类型放在方法区。栈:一般存放基本数据类型(局部变量)堆:存放对象(Catcat,数组等)方法区:常量池(常量,比如字符串),类加载信息 196,属性注意细节1,属性可以是基本数据类型,也可以是引用类型(对象,数组)2,属性的定义语法同变量,示例:访问修饰符属......
  • Java面向对象之封装性
    封装性我要用洗衣机,只需按开关即可,无需了解洗衣机的内部结构。以上这句话可能大家在搜索学习封装性的时候可能都听过,可是这句话严重误导了我。可能是由于面向过程的学习太过深刻,我联想到了函数,函数不就是把洗衣服的过程全部“封装”起来了吗?我只需要调用函数方法就可以了呀,确......
  • 第六章 面向对象进阶
    一,分包思想1、分包思想概述(理解)如果将所有的类文件都放在同一个包下,不利于管理和后期维护,所以,对于不同功能的类文件,可以放在不同的包下进行管理2、包的概述(记忆)包本质上就是文件夹创建包多级包之间使用"."进行分割多级包的定义规范:公司的网站地址翻转(去掉w......
  • Java面向对象
    面向过程&面向对象面向过程:步骤简单清晰,第一步->第二步->....面向过程适合处理一些较为简单的问题面向对象:分类的思维模式面向对象适合处理复杂的问题对于描述复杂的事物,使用面向对象的思维去宏观上把握、整体上分析,使用面向过程的思维去处理围观操作什么是面向......
  • 9.Python3 面向对象
    Python3面向对象1.类定义Python中定义一个类使用class关键字实现,其基本语法格式如下:classClassName:<statement-1>...<statement-N>类实例化后,可以使用其属性,创建一个类之后,可以通过类名访问其属性。无论是属性还是方法,对于类来说,它们都不是......
  • C# 面向对象
    .NETFramework是一个平台,它类似于Jave的虚拟机,.NET程序是运行在.NETFramwork之上的。.NET框架结构核心包括:.NET基础类库(BaseClassLibrary)和通用语言开发环境(CommonLanguageRuntime).NET基础库由“命名空间(Namespace)”和“类(Class)”组成。4.C#语言的特点:语法简洁(C#源自......
  • JAVA面向对象基础:封装,实体JavaBean
     封装: 封装设计对象规范:合理隐藏,合理暴露 即类中使用的public与private关键字合理使用(只暴露对对象数据操作的方法,不暴露数据,故在对象中用private来封装数据,用public来封装方法)将成员变量保护起来,将get与set方法暴露出来供相关操作。将需要外界访问的成员方法用public,不......
  • JAVA面向对象基础:this关键字
    this;this就是一个变量,可以用在方法中,来拿到拿到当前对象   this的应用场景:this主要用来解决变量名称冲突问题的。   this真正解析: ......
  • JAVA面向对象-第二弹
    Java中,所有的类,都默认直接或者间接继承object封装◆该露的露,该藏的藏◆我们程序设计要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。封装(数据的隐藏)◆通常,应禁止直接访问一个对象中数据的实际表示,而应......