笔记10

                                  Java基础——Day10

简要回顾:

1. 包

①使用:域名倒置

②访问权限控制

③导包, import ,顺序 package 位于第一行,紧接着可以有多个 import 语句,然后才是我们的类

若有多个重名的类,都需要使用的话,需要使用全类名

2. 封装

好处:不能对属性随意赋值,保护作用----安全

使用:属性私有化、setXxx和getXxx方法,对属性进行操作以及加入必要的逻辑控制

3. 继承

好处:抽取共性,简化代码;提高代码的扩展性和维护性

用法:定义父类,建立子父关系 extends

特点:①只有一个直接父类,即只支持单根继承;②可以多层继承

方法重写/覆盖 vs 重载

super vs this

用法一样,在哪个地方使用

4. 抽象类

它是一个类,用于继承【抽取共性】

若有些方法,只定义方法签名,具体如何实现,父类不知道,此时需要将此方法定义为抽象 方法,若一个类中有抽象方法,该类要定义为抽象类

在框架中,抽象类用的还是的蛮多的

特点:

不能实例化

普通类中有什么,它就可以有什么,甚至多于普通类

5. ctrl + p :可以查看方法有哪些参数

今日内容:

1. Object

2. static

3. final

4. 抽象类:模版方法设计模式

1.Object

1.1 是什么

是所有类的祖宗类,即父类。若某个类没有显示通过super去继承,默认父类就是Object Class Object is the root of the class hierarchy. Every class has Object as a superclass. All objects, including arrays, implement the methods of this class

1.2 常用的方法

1.2.1 toString

System.out.println(admin);

System.out.println(admin.toString());

//上面两行代码等效

我们后面就不在写showInfo,全部换成 toString()

//Object中的源码显示的内容,这里就明确了为什么我们打印对象名称的时候,显示的是一个地址值 public String toString() {

return getClass().getName() + "@" + Integer.toHexString(hashCode());

}

为什么字符串打印的是内容?因为字符串重写了 toString() 方法

/**

* This object (which is already a string!) is itself returned.

*

* @return the string itself.

*/

public String toString() {

return this;

}

1.2.2 equals

//Object源码

public boolean equals(Object obj) {

return (this == obj);

}

//String重写后的源码

public boolean equals(Object anObject) {

if (this == anObject) {

return true;

}

if (anObject instanceof String) {

String anotherString = (String)anObject;

int n = value.length;

if (n == anotherString.value.length) {

char v1[] = value;

char v2[] = anotherString.value;

int i = 0;

while (n-- != 0) {

if (v1[i] != v2[i])

return false;

i++;

}

return true;

}

}

return false;

}

需求:假定我们的学生对象,若stuNo和name都一样的话,我们认为是同一个人。此时我们需要重写 equals方法

equals与==的区别

1. ==,可以比较基本类型和引用类型,对于基本类型比较是指,引用类型比较是地址值

2. equals:用于比较引用类型,若没有重写的话,跟==没有区别,根据自己的需求重写之后, 比较内容

2.final

1. 变量:就是常量

2. 方法:最终的方法,子类不能重写,如果你觉得你的这个方法已经非常非常完善

3. 类:最终类,不能被继承,比如我们的 String 、 Math

3.static

静态是跟着类的模版信息,一并加载出来;而非静态,当成是对象这块的使用

3.1 为什么要使用

有些成员变量,它的值都是一样的,若在多个对象中进行维护,没有问题,此时可能有如下几个问题:

1. 浪费空间(资源)

2. 每个都要维护,维护性可能不太好

我们能否对其统一维护,只保存一份(类似大家共用的饮水机一样),此时我们可以使用 static 进行 修饰

3.2 可以修饰什么

1. 成员变量:类变量

静态修饰的成员变量跟类的模板信息一样,在方法区中维护一份

问题:

①在类变量的时候,虽然使用对象名也可以调用,IDEA就不建议,你使用对象调用的时候,可能 出问题,即可能不安全,IDEA直接推荐是也是通过类名调用

② 一只老鼠坏一锅汤 :若某个对象修改了类变量的值,大家拿到的都是修改后的值,一般结合 final + public 一起使用,即 public final static String natition = "国籍"; ,我们称之为 全 局常量

作用:用于共享数据,在实际中用的比较多的地方,比如用于定义写系统的参数配置【比如数据库 的连接、比如分页参数。。。。。】

2. 方法 一般用于工具类中,可以通过类名调用,比如 Arrays 、 Math

注意:静态方法只能调用静态方法,类变量

非静态方法中可以调用非静态方法、静态方法、类变量

3. 修饰代码块

静态代码块、普通代码块、构造方法的执行顺序

静态先行,只行一次,紧接着普通代码块,最后构造方法,而且普通代码块、构造方法,创建 几个对象,就执行几次。静态代码块使用的还是蛮多的!!!

需求:村委会搞选举,所有的选民都可以投一票,假定最大值为100票,若投票次数达到100,则不再 投票。设计一个类Voter(name),MAX_COUNT=100

目前类的成员:

1. 变量:静态变量[类变量] 、非静态变量

2. 方法:普通方法、静态方法、构造方法

3. 代码块:普通代码块、静态代码块

4.模板方法设计模式

小参考:https://www.cnblogs.com/throwable/p/9315318.html

模板:就是实现定义好了一些东西,直接拿过来,有些需要改动,有些不需要改动。

设计模式:可以看成是隐性知识,即可以看成是一种经验。好处:可以对我们的代码进行优化,然后一 种更加高效、逼格更高的方式体现出来。

在Java中有23种设计模式,每个模式都有自己的应用场景。

比如:我们要计算某个代码逻辑执行的时间。

优点:

模板方法模式把不变的内容进行了封装,将可变部分的部分由子类实现。在上个例子中如果我们要 添加转帐的业务模式,只需要继承业务抽象类就可以了。

抽象父类提取了公共部分代码,便于维护。

行为统一由父类控制,子类只负责某些方法的细节实现,符合开闭原则。

缺点:

如果模板方法中的骨架需要改变时需要修改抽象类,会牵一发动全身。

实现的子类数目的增多会增加阅读代码的难度。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值