day_07 面向对象

day_07面向对象

1.类和对象

1.1类和对象

什么是对象
在现实世界里面,万物皆对象,客观存在的事物皆对象

面向对象:
你不需要去做某一件事,而是让别人帮你完成

面向过程:
所有的东西都是由你自己来完成

类和对象的关系
现实世界中,类是描述描述一系列具有共同属性以及行为的事物,而对象就是这个描述的具体存在
现实世界里面先有对象,再有类
在Java中,先有类,再有对象;我们在电脑中关注的是事物的信息,然后事物的信息要存在就要先有类型【其实类的先存在是为了开辟内存】
因为类是对象的数据类型

1.2类的定义

什么是类
类是对现实生活中一类具有共同属性和行为的事物描述和抽象

类的特点:

  • 类是对象的基本(数据)类型

1.5什么是对象的行为

行为:对象能够执行的操作

1.6类和对象的关系

类:类是对现实生活中一类具有共同属性和行为的事物描述和抽象
对象:能够看得到摸得着的真实存在的实体

1.7类的定义

类的重要性:是Java的基本组成单位

类:对具有共同属性及行为的一系列的事物描述【类是虚的,只是一段描述信息】
属性:其实就是用来形容(描述)这个物体具备的特征(有些什么东西)
行为:能做一些什么东西,具备什么的功能

类的定义步骤:
1.定义类
2.编写类的成员变量
3.编写类的成员方法

类的组成
属性: 成员变量(变量) 数据类型 变量名;
行为: 成员方法(方法) 把多句代码放在一起,让它具备一定功能

我们现在写的这种类里面没有main方法

一个类中具备属性以及行为是非常多的,我们不可能一一去写,只写我们关注的就行
//JavaBean 封装类

一般方法通用格式:
pubic static 数据类型/void 方法名(数据类型 变量名,数据类型 变量, ){
return 数据;
}

类中方法格式()去掉static:
pubic 数据类型/void 方法名(数据类型 变量名,数据类型 变量, ){
return 数据;
}

1.8对象的使用

我们是在测试类中写main方法,测试类主要的作用就是用来创建对象以及使用对象的属性和方法

创建对象

  • 格式:类名 对象名=new 类名();//地址值
  • 范例:Phone p = new Phone();

使用对象
1.使用成员变量
格式:对象名.变量名
范例:p.brand
2.使用成员方法
格式:对象名.方法名()
范例:p.call();

2.对象内存图

2.1对象内存图(单个对象)

栈内存:方法运行时的内存 包含局部变量、形参
堆内存:开辟内存,new出来的东西都在这
方法区内存:主要用来加载class文件(解析字节码)

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

区别 成员变量 局部变量
定义位置 类中方法外 方法声明上或者方法的内部
内存的位置 堆内存中 栈内存中
生命周期 随着对象的创建而创建,随着对象的消失而消失 随着方法的进栈而创建,随着方法弹栈而消失
默认初始化值 系统默认 需要自定义

4.封装

4.1private关键字

  • 是一个权限修饰符
  • 可以修饰成员

小结:
1.没有private出现的问题?
因为可以直接去给成员变量赋值,所以这个时候我们成员变量是不安全的,因为可以随便赋值

2.private关键字
private修饰的成员只能够在本类中访问,不能在别的类中访问(若没有private,别的类可以p.name="xxx"进行定义)

3.封装的步骤
在封装类中提供get/set方法 用来获取/设置值

get->获取得到
getName
getAge

set->设置
setName
setAge

private的使用格式:

private 数据格式 变量名

注意:
1.成员变量一旦私有(被private修饰)后,其他类就不能直接访问该成员变量,如果要访问,可以通过setXxx来修饰值,getXxx来获取。(Xxx代表变量,首字母大写,如setAge/getAge方法)
2.成员变量私有,然后提供get/set方法是为了提高代码安全性。
3.在开发的时候,我们并不一定在setXxx中做参数的校验
4.成员变量私有和提供配套的getter和setter方法已经成为java设计的一种规范

快捷键:
鼠标右键–>Gennerate–>Getters and Setters–>command+a(全选)–>Enter

4.3this关键字

priviat String name;

private void setName(String name){
//name = name; // 此处两个name均为局部变量,所以无法为成员变量赋值
this.name = name;//用this修饰的变量用于指代成员变量,成功为成员变量赋值
}

this修饰的变量用于指代成员变量
解决局部变量隐藏成员变量

this代表当前调用方法的对象

public class StudentTest {
    
    
    public static void main(String[] args) {
    
    
        Student s = new Student();
        s.setName("老张");
        System.out.println("s-->"+s);
    }
}

public class Student {
    
    
    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
        System.out.println("this-->"+this);
    }

    public int getAge() {
    
    
        return age;
    }

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

    private String name;
    private int age;

    public Student() {
    
    
    }
    
}

输出结果:
在这里插入图片描述
从运行结果我们可以看出this和s所指向的内存地址哈希值一样。

4.4this内存原理

this被哪一个对象的方法调用,this就代表哪个对象

如果成员变量和局部变量同名时候,使用this可以让成员变量覆盖局部变量

this在测试类中不能使用,能在封装类只使用

4.5封装

1.封装概述
是面向对象三大特征之一(封装、继承、多态)
是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内,外界是无法直接操作的

2.封装原则
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的get/set方法进行访问

3.封装的好处
通过方法来控制成员变量的操作,提高代码的安全性
把代码用方法来封装,提高代码的复用性

5.构造方法

5.1构造方法

构造方法是一种特殊的方法
作用:创建对象,在创建对象的同时,完成成员变量的初始化

格式:

public class 类名{
修饰符 类名(参数){
}
}

有参构造方法可以在创建对象时候给成员变量赋值

5.2构造方法的注意事项

1.构造方法的创建

  • 当class中无无参构造方法时,会默认创建一个无参构造方法(编译不会报错)
  • 当class中含有构造方法时,不会创建无参构造方法

建议:不管我们有没有写构造泛方法,都把无参和满参都写上

2.构造方法的重写

标准的封装类:
1.私有所有的属性
2.给所有的属性提供对应 get/set方法
3.给这个类提供无参以及满参构造

快捷键:
鼠标右键—>Generate—>Constructor—>select all(无参构造方法)/command+a+enter(全参构造方法)

Memorial Day is 387 days
I miss you
xiaokeai

猜你喜欢

转载自blog.csdn.net/weixin_42914989/article/details/109214432