Java基础学习笔记 2020.5/27

1.String直接赋值与使用new String的区别

使用String直接赋值
String str = “abc”;可能创建一个或者不创建对象,如果”abc”在字符串池中不存在,会在java字符串池中创建一个String对象(”abc”),然后str指向这个内存地址,无论以后用这种方式创建多少个值为”abc”的字符串对象,始终只有一个内存地址被分配。
使用new String 创建字符串
String str = new String(“abc”);至少会创建一个对象,也有可能创建两个。因为用到new关键字,肯定会在堆中创建一个String对象,如果字符池中已经存在”abc”,则不会在字符串池中创建一个String对象,如果不存在,则会在字符串常量池中也创建一个对象。
 

2.重写hashCode()和equals()方法

在自定义的对象中,需要重写hashCode()和equals()方法,hashCode()方法只在对象用于散列表时有用,判断元素是否重复,先比较两个对象的哈希值,如果哈希值相等,再调用对象的equals()方法,返回true则对象相同。通过这样的方法提高执行的速度。

3.Java中只有按值传递

在Java中,方法无论调用的是基本类型还是引用类型,传入方法中的参数都是一份拷贝。

4.线程的状态

初始状态,运行态,阻塞态,等待状态,超时等待,终止。

5.Java序列化

Serializable接口是一个标记接口,不用实现任何方法。一旦实现了此接口,该类的对象就是可序列化的。

a. 序列化步骤

步骤一:创建一个ObjectOutputStream输出流;

步骤二:调用ObjectOutputStream对象的writeObject输出可序列化对象。

b. 反序列化步骤:

步骤一:创建一个ObjectInputStream输入流;

步骤二:调用ObjectInputStream对象的readObject()得到序列化的对象。

Java序列化同一对象,并不会将此对象序列化多次得到多个对象

Java序列化算法所有保存到磁盘的对象都有一个序列化编码号当程序试图序列化一个对象时,会先检查此对象是否已经序列化过,只有此对象从未(在此虚拟机)被序列化过,才会将此对象序列化为字节序列输出。如果此对象已经序列化过,则直接输出编号即可。

使用transient关键字选择不需要序列化的字段。使用transient修饰的属性,java序列化时,会忽略掉此字段,所以反序列化出的对象,被transient修饰的属性是默认值。对于引用类型,值是null;基本类型,值是0;boolean类型,值是false.

6.Java中的IO流

缓冲操作:BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWriter.

基本数据类型操作:DataInputStream,DataOutputStream.

对象序列化操作:ObjectInputStream,ObjectOutputStream.

转化控制:InputStreamReader,OutputStreamWriter.

打印控制:PrintStream,PrinterWriter.

文件操作:FileInputStream,FileOutputStream,FileReader,FileWriter.

管道操作:PipedInputStream,PipedOutputStream,PipedReader,PipedWriter.

数组操作:ByteArrayInputStream,ByteArrayOutputStream,CharArrayReader,CharArrayWriter.

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值