Java基础笔记整理

基本数据类型

java中的byte是1字节,8位,最高位是符号位,只有7位用来表示数值
最大值:01111111=127 即2的7次方减去1,减1因为有个0;
最小值:10000000即2的7次前面加个负符号:-128

在这里插入图片描述
实例化对象方式

1、new() 创建
2、clone() 创建,需要实现Cloneable 接口
3、反射机制   .newInstance()
4、实例化后进行序列化,再反序列化
5、工厂方法返回对象

序列化和反序列化(对象状态的保存和重建)

1、Java序列化就是指把Java对象转换为字节序列的过程;
	在传递和保存对象时.保证对象的完整性和可传递性。
	ObjectOutputStream
2、Java反序列化就是指把字节序列恢复为Java对象的过程。
	根据字节流中保存的对象状态及描述信息,通过反序列化重建对象。
	ObjectInputStream
3、静态变量/transient修饰属性不会被序列化。

数组Array 表示存储相同数据类型数据的有序集合

1、数组中存放的数据必须是同一个数据类型,可基本,可引用类型
2、数组在定义时必须给定大小,且大小不可变
3、可通过下标值来获取数据,下标从0开始,元素有默认值,取决于元素类型。
4、插入数组中的数据是有序集合(插入顺序排序)
声明数组---分配空间---赋值---数组操作

ArrayList

1、元素类型不定
2、容量可动态增长,但牺牲效率,插入O(logN)
3、ArrayList  的   交(A.retainAll(B)) 
	并  无重复并集 A.removeAll(B); B.addAll(A);    可重复并   A.addAll(B);
 	差(A.removeAll(B))

Arrays 数组工具类

1、比较两个数组是否相同---equals()
2、数组排序---Arrays.sort()
3、数组查找---binarySearch()
4、打印数组---toString()

visualgo.net/zh

Queue与List

前者添加了很多对线程友好的API  :offer  peek poll
	BlockingQueue--->生产者消费者模型
		 put  take-->阻塞

String StringBuffer StringBuilder
在这里插入图片描述
在这里插入图片描述

1、String 是常量(堆中常量池)不可变类,初始可为null;
	StringBuffer 线程安全,可变长度和内容的变量;
	StringBuilder 线程不安全,可变长度和内容的变量 。
	运行速度快慢为:StringBuilder > StringBuffer > String

2、StringBuffer 每次获取toString都直接使用缓存区的toStringCache值来构造一个字符串;
	StringBuilder则每次都要复制一次字符数组,再构造个字符串。
Java9改进:
	字符串采用char[]保存字符  每个字符2字节  < java9 =< byte[] + encodig-flag字段保存字符,占1字节。省空间。
	
使用场景:
	字符串不经常变化的场景中可以使用String类,例如常量的声明、少量的变量运算.
	在频繁进行字符串运算(如拼接、替换、删除等),并且运行在多线程环境中,
		则可以考虑使用StringBuffer,例如XML解析、HTTP参数解析和封装。
	在频繁进行字符串运算(如拼接、替换、和删除等),并且运行在单线程的环境中,
		则可以考虑使用StringBuilder,如SQL语句的拼装、JSON封装等。

重写和重载

1、重写是子类对父类方法的重新定义,方法名、参数列表相同;
	返回类型可不同,但必为父类返回值派生类;
	final 方法不能被重写;
	static 方法不能被重写,可被再次声明;
	子、父类在同一包中,可重写非private /final 的所有方法;
	子、父类不在同一包中,只可重写public/protected 的非final 方法;
	构造方法不能被重写。
2、重载是在一个 类里面,方法名相同,参数(个数/类型)不同;
	返回类型可同可不同 ;
	被重载方法可改变访问修饰符。

异常及处理
Throwable 类是 Java 语言中所有错误或异常的超类。

	1、Error  (不可恢复)指示合理的应用程序不应该试图捕获的严重问题
		VirtulMachineError
			StackOverFlowError
			OutOfMemoryError
		AWTError
	2、Exception (可恢复)
		RuntimeException(运行时异常---非检查型异常)
			UnkownTypeException
			NullPointerException   (非检测性异常)空指针异常
			ClassCastException   类型转换异常
			IllegalArgumentException   非法参数异常
			ArrayStoreException   数组存储异常
			IndexOutOfBoundException  (非检测性异常)数组下标越界异常
			ArrayIndexOutOfBoundException  (非检测性异常)非法索引访问数组
			ArrithmeticException (非检测性异常)异常的运算条件抛异常,eg。除以0
			MissingResourceException
			BufferOverflowException    缓冲区溢出异常
			ClassNotFoundException  (检查性异常) 应用程序试图加载时,找不到相应的类抛异常
		
		检查异常
			IOException(I/O 输入输出异常)
				EOFException
				FileNotFoundException
			SQLException
			InterruptedException

处理
1、try/catch …finally
2、throws/throw

final

1、修饰变量
	必须赋予初始值且不能被改变。
	常和static关键字一起使用,作为常量。
2、修饰方法
	方法不可以被子类的方法重写。
3、修饰类
	不能被继承。
4、被final修饰的对象内容是可变的
	public final calss FinalData{
		int i=5;
		public int adds(int i){
			this.i=i;
			return i;
		}
		public static void main(String[] args){
			System.out.println(new FinalData().adds(6))
		}
	}
	====>  输出 6

static

1、修饰成员变量  -- 属性属于本类  类名调用
2、静态块   --类加载时先实例化,只执行一次, 
3、修饰方法  --静态方法访问静态成员,非静态可访问静态和非静态。 类名调用
4、内部类   ---如 单例

抽象类和接口

1、抽象类 继承  extend  一个父类;接口 是实现 implement  ,实现多接口 来实现多继承。
2、抽象类里面可以没有抽象方法,方法可声明,可实现;接口方法只能声明。
3、抽象类方法必须全部被子类实现,除非子类也为抽象类;接口方法也要被子类实现,除非抽象类。

sleep()和wait()
在这里插入图片描述
调用对应的notify/signal方法(唤醒)
yield 让出一下CPU

java引用类型(强软弱虚)

强:M m = new M(); **不会被回收**
		当 m = null 时 表示无引用,会被回收
		至于gc 线程先执行还是main 线程先执行,不可控。
软:是一个SoftReference m=new softReference<>[new byte[1024*1024*10]]
		m 与SR 间是强,sr 与byte间有个连接,是软
		**当空间不够了,软引用对象会被优先回收**。
		**适用缓存场景**
弱:WeakReference<M> m = new WeakReference<>(new M());
		m 与wk 间是强,sr 与M间有个连接,是弱连接
		**gc 直接回收**
		**一般用在容器**
		弱引用 ===》用到threadlocalmap 的key 是弱引用
虚:PhantomReference<M> pr = new PhantomReference<>(new M(),QUEUE);
		形同没有。用来管理堆外内存用的。
		当对象被回收(gc能直接回收)时,通过Queue可以检测到,然后清理堆外内存(unsafe 回收)。
			弱还能get()到对象值,虚get不到。				
			**场景:管理直接内存**
			如NIO里的DirectByteBuffer----->指向堆外内存
							Queue指向buffer

内存泄漏和内存溢出

泄漏:new 申请的内存空间,使用后无法释放。----时间长了会导致OOM 溢出。
	hashmap并发;
	ThreadLocalMap  的key若果是强引用 就会出现泄漏情况;
		弱引用情况下,若key =null  没有被清除(remove),会导致泄漏;
溢出:内存空间不足以提供申请使用。
	循环引用会引起; 

循环引用(依赖)场景

实质:多个对象相互之间有强引用,不能释放让系统回收。
场景:
	多线程并发 操作 hashmap  扩容链表倒置产生的循环引用(死循环)
	Spring 的循环依赖
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值