Java基础——Day10
0.简要回顾
0.1 包
- 使用:域名导致
- 访问权限控制
- 导包,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 ());}
equals 与 == 的区别:1: ==,可以比较基本类型和引用类型,对于基本类型比较的是值,引用类型比较的是地址值2: equals:用于比较引用类型,若没有重写的话,跟==没有区别,根据自己的需求重写之后比较内容。
2.final
- 变量:就是常量
- 方法:最终的方法,子类不能重写,如果你觉得你的这个方法已经非常完善,则可以使用finall
- 类:最终类,不能被继承,比如我们的String、Math
3.static
静态是跟着类的模板信息,一并加载出来;而非静态,当成是对象这块的使用
3.1 为什么要使用
有些成员变量,它的值都是一样的,若在多个对象中进行维护,没有问题,但是此时可能存在如下问题:
- 浪费空间(资源)
- 每个都要维护,维护性可能不太好
我们能否对其维护,只保存一份(类似大家公用的饮水机一样),此时我们可以使用static进行修饰
3.2 可以修饰什么
1. 成员变量:类变量
静态修饰的成员变量跟类的模板信息一样,在方法中维护一份
问题:
①在类变量的时候,虽然使用对象名也可以调用,但是IDEA不建议,你使用对象调用的时候,可能会出问题,即可能不安全,IDEA直接推荐的也是通过类名调用
②若某个对象修改了类变量的值,大家拿到的都是修改之后的值,一般结合final+public一起使用,即public final static String nation="国籍";
作用:用于数据共享,在实际中用的比较多的地方,比如用于定义写系统的参数配置【比如数据库的连接、比如分页参数。。。。。。】
2. 方法
一般用于工具类,可以通过类名调用,比如Arrays、Math
注意:静态方法只能调用静态方法,类变量
非静态方法只能调用非静态方法、静态方法、类变量
3. 修饰代码块
静态代码块、普通代码块、构造方法的执行顺序
静态先行,只行一次,紧接着普通代码块,而且普通代码块、构造方法、创建几个对象就执行几次。静态代码块的使用还是蛮多的!!!
目前类的成员:
- 变量:静态变量【类变量】、非静态变量
- 方法:普通方法、静态方法、构造方法
- 代码块:普通代码块、静态代码块
4. 模板方法设计模式
参考:https://www.cnblogs.com/throwable/p/9315318.html
模板:就是实现定义好了一些东西,直接拿过来,有些需要改动,有些不需要改动。
设计模式:可以看成是隐形知识,即可以看成是一种惊讶。好处:我们可以对代码进行优化,然后一种更加高效、逼格更高的方式体现出来。
在Java中有23中设计模式,每个模式都有自己的应用场景。
比如:我们要计算某个代码逻辑执行的时间。
优点:
- 模板方法模式把不变的内容进行了改装,将可变部分的部分由子类实现。在上个例子中如果我们要添加转账的业务模式,只需要继承业务抽象类就可以了。
- 抽象父类提供了公共部分代码,便于维护。
- 行为统一由父类控制,子类只负责某些方法的细节实现,符合开闭原则。
缺点:
- 如果模块方法中的骨架需要改变时需要修改抽象类,会牵一发动全身。
- 实现的子类数目的增多会增加阅读代码的难度。
作业:
结果:
3.static在工具类中使用:设计一个工具类MyUtils,该类主要实现如下几个简单功能:①计算1个 int和n个double的数字之和,带返回值 -- sum方法;②针对任意类型的数组,输出{1#2#3}这种 格式----》print,比如Stu[] stu = new Stu[2],则输出 {张三,10#李四,20} ,Stu(属性 姓名、年龄)
结果: