JAVA程序员笔记 第008篇—面向对象(二)权限修饰符、类加载

23 篇文章 0 订阅
20 篇文章 0 订阅

权限修饰符

用权限修饰符修饰的属性、方法等、需要视权限修饰符的权限(适用范围)来使用
以后的编程中,将封装好的例如属性类,方法类分别封装到一起,养成习惯。
在这里插入图片描述

  • 在属性类中,首先提供一个无参的构造方法,以便创建该类的对象。(同时也可以提供一个有参的构造方法,方便在声明对象同时赋值的需求)
  • 将所有属性的权限规范为private,然后 提供对应的公开的(get,set)方法,从而使我们可以在属性类之外,通过调用属性所对应的方法来控制属性。该方法。

在测试类中,我们可以通过在属性类中的无参或有参构造,声明对象,但是通过有参构造声明,需要同时给属性赋值。同时声明get方法,专门用来获取属性的值,和set专门用来给属性赋值。
在JAVA中,方法应做到“各司其职”

property属性
指的是 geter/seter 方法
去掉get 或者 set 然后首字母 变小写,这样的属性称为 property属性

重写toString方法

JAVA中,打印对象就是打印这个对象的toString方法,所以我们将其重写成更易读的形式。

public String toString(){
	return String.format("Person{name = %s,age = %d,sex = %s,"张三",22,""}")
}
重写equals方法
public boolean equals(Object obj) {
        /*
         *  自己编译一段代码,用来比较两个对象是否内容相等
         */
        // 如果 传入的对象 和 this 地址相等
        if (this == obj) return true;

        // 如果 两个对象地址不相等, 判断 obj 是否 为空
        if (obj == null) return false;

        // 比较两个对象的 类型是否 相等

        // 获取 一个 对象的 类型,通过 对象的 getClass() 方法
        if (this.getClass() != obj.getClass()) return false;

        // 如果 两个对象是同种类型, 那么 进行属性值的比较
        Person p = (Person) obj;

        // 比较两个人的 名字 是否相等

        // Objects.equals(a, b) ;  // 比较两个对象的内容是否相同的工具类,解决了可能会产生空指针的问题

        if (!Objects.equals(this.name, p.name)) return false;

        // 如果名字相同, 继续比较 年龄
        if (this.age != p.age) return false;

        // 如果年龄 也相等, 继续比较 性别
        if (!Objects.equals(this.sex, p.sex)) return false;

        // 如果 性别 相等, 继续比较 手机号
        if (!Objects.equals(this.tel, p.tel)) return false;

        return true;
    }

static

static(静态)修饰符
static可以修饰 属性、方法、代码块、内部类、构造器

1.static修饰属性

属性是否使用static修饰,又分为:静态属性、非静态属性(实例变量)
实例变量:创建了类的多个对象,每个对象都独立的拥一套 类中的非静态属性。当修改其中一个对象
中的非静态属性时,不会导致其他对象中同样的属性值的修改。

静态变量:创建了类的多个对象,多个对象共享同一个静态变量。当通过某一个对象修改静态变量时,会导致其他对象调用此静态变量时,是修改过了的。

static修饰属性的其他说明:
静态变量随着类的加载而加载。可以通过 “类. 静态变量” 的方式进行调用
静态变量的加载 早于 对象的创建(详情见类加载过程 知识点)
由于类只加载一次,所以静态变量在内存中也只会存在一份在方法区的静态域中。

类变量实例变量
yesno
对象yesyes

静态变量在内存中的解析:
图片转自bilibili up主:尚硅谷
在这里插入图片描述静态属性举例: System.out、Math.PI

2.static修饰方法

静态方法随着类的加载,被压入方法区,可以通过"类.静态方法"调用

静态方法非静态方法
yesno
对象yesyes

静态方法中,只能调用静态的方法或属性
非静态方法中,既可以调用非静态的方法或属性,也可以调用静态的方法或属性

因为静态方法的产生发生在类加载的过程中,此时还没有对象产生。而成员方法和属性,需要通过对象来调用。
所以静态方法只能调用静态方法,(此时只有静态方法)而非静态方法可以调静态和非静态方法(此时两种方法都有)

  • 注意:
    静态方法内,不能使用this和super关键字
    关于静态属性和静态方法的使用,需要从生命周期的角度去理解

3.判断 属性和方法 什么时候应该用static关键字:

属性:

属性可以被多个对象共享,不会随着对象的不同而不同
类中的常量也常常声明为static

方法:

操作静态属性的方法,通常设置为static的
工具类中的方法,习惯上声明为static。例如;Math,Arrays等

★类加载:

JVM‘第一次’ 读取一个类的时候,会将 .class(字节码文件)读入到内存,这个过程称为 类加载
一个 类 最多只能发生 一次 类加载,类加载的产物是 类对象,用Class类型来表示(不同于 类的对象 不要将二者混淆)

类加载的过程

1.分配空间
2.加载 静态属性 , 如果有赋值语句,同时完成赋值操作
3.加载 静态代码块, 并执行代码块中的语句
4.如果有 静态属性 没有赋值,此时 完成对静态属性的赋值(JVM给他们赋初值)
5.将 类中的 静态方法,全部压入内存(此时方法是不会执行的)

  • 类加载中不能使用this关键字,因为this既对象的属性,在类加载时,对象还未产生。

静态属性:
静态属性 被类的 所有对象 共享,任何一个对象如果对静态属性进行修改,那么所有的对象看到的都是 修改过后的数据。一般统计网站的访问量

os:把静态属性类比成一个房子,类的对象 若对静态属性进行修改,类的其他对象再调用时,等到的就是修改过后的房子
而成员属性,是对象声明时,自己就有了一个属于自己的房子,每个对象在使用时,都是自己的房子。(比如:张三的"房子",李四的"房子",房子不同,房子是你的房子,但是这些房子的都是"房子",通俗意义上的"房子",这个"房子"相当于静态属性,张三李四各自的房子,是成员属性)

静态方法:
static修饰的方法 多用于工具类的编写

静态代码块:
做数据的 一次性初始化工作

静态属性、方法:
可以使用 类 or 对象 来调用,但推荐使用 类 来调用

空对象引用:
可以调用 静态方法 和 静态属性,而不产生 空指针异常
而 null 不能调用静态属性和静态方法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值