Android成长系列~Java基础一

**Android成长系列 Java篇 **

  1. Android成长系列~Java基础一

博客创建时间:2022.04.01
博客更新时间:2022.04.02

以Android studio build=7.0.0,SdkVersion 31来分析讲解。如图文和网上其他资料不一致,可能是别的资料版本较低而已


前言

Java基础是Android开发成长阶梯,基础越牢固高楼才能建的越高。该博客将是自身知识体系的基石部分,不断地学习总结才能构建自身心中的那颗Android技能树。

java中==和equals和hashCode的区别?

1. ==
1)在8种基本数据类型中,使用比较的是值
2)在引用类型中使用
,比较的是内存中的存放地址

2. equals
1)如果equals()方法没有重写,都是调用Object类的equals方法,比较的是内存地址
2)如果重写了equals()方法,则根据重写设定的条件判断

3. hashCode
通过hash算法获取到的对应物理地址值,hashCode()与equals()需要同步进行重写与否,否则报错。(一般判断两个类equals,其实暗藏一个条件就是hashCode也需要相等)

为什么equal 与hashcode 方法需要同步重写?
如在一个HashMap中两个元素A、B,若果A.equal(B),那么两者的HashCode必定相同,不然不会判定为equal。 所以equal与hashCode方法需要同步重写

内部类及其作用

将一个类定义在一个类或者一个方法里面,这样的类称着内部类

  1. 成员内部类
  2. 静态内部类
  3. 匿名内部类
  4. 局部内部类

内部类与普通类相比最大的作用其实封装性,限制此类的访问权限。 内部类其他的作用其实普通类都能达到。

抽象类和接口区别?

  1. 抽象类要被子类继承,接口要被类实现。
  2. 接口只能做方法声明,抽象类中可以作方法声明,也可以做方法实现。
  3. 接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
  4. 抽象类和接口都是用来抽象具体对象的,但是接口的抽象级别最高。
  5. 抽象类可以有具体的方法和属性,接口只能有抽象方法和不可变常量。
  6. 一个类可以实现多个接口,但只能继承一个抽象类。

接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。
而抽象类在代码实现方面抽象类别,可以实现代码的重用

java多态的理解

从字面上理解,多态就是一个事物在不同情况下有多种状态。
从多态的3个前提:

  1. 存在继承关系
  2. 重写方法
  3. 父类引用指向子类

作用:理清层级关系、减少代码

String、StringBuffer、StringBuilder区别

  1. 三者都是final类,不允许被继承
  2. StringBuffer是线程安全的,而StringBuilder则没有实现线程安全功能。StringBuilder的方法中使用大量的synchronized 同步锁
  3. 运行速度:StringBuilder > StringBuffer > String。String为字符串常量,执行中不断创建新变量及进行垃圾回收
  4. String实现了三个接口:Serializable、CarSequence、Comparable,
    StringBuilder 与 StringBuffer 只实现了前两个接口,仅String可以使用compareTo方法

String为什么要设计成不可变的?

  1. 字符串常量池(String pool,String intern pool, String保留池) 是Java堆内存中一个特殊的存储区域,当创建一个String对象时假如此字符串值已经存在于常量池中,则不会创建一个新的对象,而是引用已经存在的对象

  2. String 使用非常频繁,如下地址URL、各种路径path、反射机制参数等,都希望字符串的hashcode是唯一不可变的,否则会带来其他安全隐患。

Math常用的几种方法

  1. Math.round():四舍五入,+0.5后向下取整Math.round(11.5)=12,
    Math.round(-11.5)= -11,float返回int,double返回long
  2. Math.sqrt():开方
  3. Math.rint():四舍五入,遇0.5则取偶数(Math.rint(11.4)=11.0, Math.rint(11.5)=12,Math.rint(10.5)=10)
  4. Math.floor():不大于它的最大整数(Math.floor(11.5)=11, Math.floor(-11.5)=-12)
  5. Math.ceil():不小于他的最小整数(Math.ceil(11.5)=12,Math.ceil(-11.5)=-11)
  6. Math.abs():绝对值(Math.abs(11.5)=11.5,Math.abs(-11.5)=11.5)
  7. Math.max():最大值(Math.max(-11.5, -11.4)=-11.4)
  8. Math.min():最小值(Math.min(-11.5, -11.4)=-11.5)
  9. Math.random():0.0-1.0之间的随机数
  10. Math.pow(x, y):x的y次幂
  11. Math.sqrt():开方

静态属性和静态方法是否可以被继承?是否可以被重写?

想一想,静态方法是类所有,所有的子类都是共有的,所以今天方法是不能被重写的。

静态方法和属性是可以被继承的。

final,finally,finalize的区别

final:
修饰符,修饰后的类不可被继承。修饰的变量或方法不能被改变,只读。

finally:
try catch 的最终处理标识字段。

finalize:
Java Object类中提供的一个方法,该方法确保垃圾回收执行前触发,可以在该方法中编写一些代码,进行保活、监控等操作。

Serializable 和Parcelable 的区别

Parcelable是android特有的序列化API,一般只用于内存数据的序列化或反序列化,如果强制适用于网络传输或本地保存,因不同Android版本的Parcelable实现也是不一样的,序列化和反序列化会有问题。(将数据拆分为多个Intent支持的基本数据类型)

Serializable 将Java对象转换成二进制文件进行网络通信或本地保存。但是它的序列化和反序列化效率较低,使用了反射机制,过程中会创建很多临时对象。


相关链接

博客书写不易,您的点赞收藏是我前进的动力,千万别忘记点赞、 收藏 ^ _ ^ !

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值