Java基础-由浅入深

1、== 与 equals()
  • == ,基本数据类型为值比较;引用类型为 引用比较
  • equals() ,默认引用比较,但很多类重写equals方法一般为值比较
2、 值传递和引用传递 【相关:Java内存模型】

值传递:将实参的内容副本 通过形参传入方法内部,形参的任何操作都不影响实参的内容。

引用传递:实参的地址 通过形参传入方法的内部,实参和形参都指向同一个对象,对形参的操作会影响原本内容。

执行一个方法,方法以栈帧的数据结构形式入栈。在栈中若局部变量是基本数据类型,先在栈中寻找相同的数据进行赋值,若不存在,则在栈中开辟一定空间存放数据,然后进行赋值;若局部变量是引用类型,则变量也存储在栈中,值为对象的堆内存地址。

在方法中,基本数据类型的变量,实参副本传递给形参,其值仅在各自的栈帧中存储,两者互不影响。引用类型的变量,将引用类型的形参指向新的对象,如果是引用传递,则引用类型的实参也应该指向新的对象,但实际中,实参的指向地址并不发出改变,所以为值传递,其过程仅仅是将实参 指向对象的地址副本 传给形参。

3、 静态绑定和动态绑定 【相关:类加载】

绑定:方法的调用和调用此方法的类连接在一起的过程

静态绑定:构造方法和 由private、static、final任意一个关键字所修饰的方法

被private修饰的方法,只有本类调用,其它类无法调用,编译器可以推出调用此方法的类;

被final修饰的方法不能重写,但可被子类调用

被static修饰的方法,方法无法重写,由类名直接调用时,类名确定,不会产生多态;引用 为父类时,方法编译期就绑定为父类

动态绑定:编译期间,编译器不知道调用哪个方法,则根据被调用对象的实际类型判定[不是引用的类型],绑定需要延迟到运行。重写动态绑定

过程:虚拟机提取对象的实际类型的放发表,搜索方法签名,调用方法

4、 String 【相关:源码】

String类final修饰优点

  1. 安全:【调用系统操作指令之前,进行校验】String较多用作url、文件路径等参数,保证值的不可变而安全;多线程安全

  2. 高效:字符串常量池缓存字符串,提高效率;String对象的哈希码被频繁使用,字符串不变性保证了hash码的唯一性,不必每次就算hash值

StringBuffer 和StringBuilder

  1. 都提供append 和 insert 方法用于字符串的拼接
  2. StringBuffer使用synchronized保证线程安全,StringBuilder没有

JDK 1.7 之后把永生代换成的元空间,字符串常量池从方法区移到了 Java 堆上

5、Java序列化 【相关:io】

序列化:将对象转化为字节序列

反序列化:将字节序列恢复为对象

使用场景:网络传输、磁盘存储Java对象

Java序列化算法:保存到磁盘的对象都有一个序列化编号,当序列化一个对象时,先检查对象是否被序列化,未被序列化过,则将对象序列化为字节;若序列化,则输出已有编号。但如果更改了对象的内容,再次序列化,并不会将对象序列化

6、 克隆 【相关:深拷贝、浅拷贝】

实现方式

  • 实现Cloneable接口,重写Object类的clone()方法
  • 实现Serializable接口,通过对象的系列化和反序列化实现深度克隆,还可以通过泛型限定,检测要克隆的对象是否支持序列化
7、反射 【相关:代理】

由于.class文件加载到JVM时,在堆中创建一个java.lang.Class类 的对象,代表类相关信息;因此先获取Class类,通过Class类得到 创建的类。

优点:

  • 提高程序灵活性:如连接数据库中,数据变化只需修改配置文件,无需改变Java代码
  • 屏蔽实现细节,使用方便:如springMVC中,参数名与字段名保持一致,直接使用

后续完善

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值