Java基础——Day10——Object、final、static、模板方法设计模式

Java基础——Day10

0.简要回顾

0.1 包

  1. 使用:域名导致
  2. 访问权限控制
  3. 导包,import,顺序 package 位于第一行,紧接着可以有多个 import 语句,然后才是我们的类,若有多个重名的类,都需要使用的话,需要使用全类名

0.2 封装

  • 好处:不能对属性随意赋值,保护作用---安全
  • 使用:属性私有化、setXxx和getXxx方法,对属性进行操作以及加入必要的逻辑控制

0.3 继承

  • 好处:抽取共性,简化代码;提高代码的扩展性和维护性
  • 用法:定义父类,建立字母关系 extends
  • 特点:①只有一个父类,即只支持单根继承;②可以多层继承

0.4 抽象类

  • 它是一个类,用于继承【抽取共性】
  • 若有些方法,只定义方法签名,具体如何实现,父类不知道,此时需要将此方法定义为抽象方法,若一个类中有抽象方法,该类要定义为抽象类
  • 在框架中,抽象类的使用还是蛮多的
  • 特点:①不能实例化 ②普通类中有什么,它就可以有什么,甚至多于普通类

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

1. Object

1.1 是什么

是所有类的祖宗,即父类。若某个类没有显示通过super去继承,默认父类就是Object

1.2 常用的方法

方法

说明
toString()类似前面写的showInfo(),是带返回值的,返回值类型为String
getClass()可以获取Class信息,在后面的高级部分凡是类容说,目前只需要知道可以用来获取全类名即可 a.getClass().getName()
equals()用于比较引用类型,若没有重写equals,则跟==没有区别
hashCode()一般在重写Equals的同时,hashCode(),理解为在内存中的一个位置

 

 

 

 

 

 

 

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 ());
}
1.2.2 equals()
 
需求:假定我们的学生对象。若stuNo和name都一样的话,我们认为是同一个人。此时我们需要重写equals方法
 
 
equals 与 == 的区别:
 
1: ==,可以比较基本类型和引用类型,对于基本类型比较的是值,引用类型比较的是地址值
2: equals:用于比较引用类型,若没有重写的话,跟==没有区别,根据自己的需求重写之后比较内容。
 

2.final

  1. 变量:就是常量
  2. 方法:最终的方法,子类不能重写,如果你觉得你的这个方法已经非常完善,则可以使用finall
  3. 类:最终类,不能被继承,比如我们的StringMath

3.static

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

3.1 为什么要使用

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

  1. 浪费空间(资源)
  2. 每个都要维护,维护性可能不太好

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

3.2 可以修饰什么

1. 成员变量:类变量

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

    问题:

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

    ②若某个对象修改了类变量的值,大家拿到的都是修改之后的值,一般结合final+public一起使用,即public final static String nation="国籍";

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

2. 方法

    一般用于工具类,可以通过类名调用,比如ArraysMath

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

               非静态方法只能调用非静态方法、静态方法、类变量

3. 修饰代码块

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

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

目前类的成员:

  1. 变量:静态变量【类变量】、非静态变量
  2. 方法:普通方法、静态方法、构造方法
  3. 代码块:普通代码块、静态代码块

4. 模板方法设计模式

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

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

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

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

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

优点:

  • 模板方法模式把不变的内容进行了改装,将可变部分的部分由子类实现。在上个例子中如果我们要添加转账的业务模式,只需要继承业务抽象类就可以了。
  • 抽象父类提供了公共部分代码,便于维护。
  • 行为统一由父类控制,子类只负责某些方法的细节实现,符合开闭原则。

缺点:

  • 如果模块方法中的骨架需要改变时需要修改抽象类,会牵一发动全身。
  • 实现的子类数目的增多会增加阅读代码的难度。

作业:

1. Object equals 使用 :定义一个 Dog 类,属性【 String name String strain int age 】,重写toString方法,重写 equals 方法【若 name strain age 】都一样,我们认为是同一个 Dog 对象,编写一个测试类,进行测试。
 
结果:
 
 
2. static fifinal 的使用 :编写一个 Stu 类,属性【学号 stuNo 、姓名 name 、分数 score 、学校school、 idCounter 】,学校使用 fifinal static 修饰, idCounter 使用 static 修饰,初始值 1001 ,用于为学号自动编号,重写toString 方法,输出内容如下参考格式。定义一个 2 参构造【 String name, double score】,在此构造方法中完成对学号的赋值、 name score 的赋值操作。 定义一个Stu 对象数组,输出学生信息。

结果:

 

3.static在工具类中使用:设计一个工具类MyUtils,该类主要实现如下几个简单功能:①计算1个 int和ndouble的数字之和,带返回值 -- sum方法;②针对任意类型的数组,输出{1#2#3}这种 格式----print,比如Stu[] stu = new Stu[2],则输出 {张三,10#李四,20} Stu(属性 姓名、年龄)

结果:

 

4. 模版方法设计模式 + 类变量
 
 
 
结果:
 

 

 
 
 
 
 
 
 
 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值