JAVA知识点(持续更新)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

记录java的知识点


java基础知识的知识点

JDK和JRE的区别:
	JDK:提供了 Java 的开发环境和运行环境。
	JRE:提供了java的运行环境。

八大基本数据类型:
	byte、boolean、char、short、int、float、long、double
	【小知识:String属于引用类型】

内存分配
	堆:是所有线程共享的区域,用于存放实例化的对象,即new产生的数据
	方法区:是所有线程共享的区域,用于存放类信息、常量、静态变量等
	常量池:用于存放程序的全部常量

JVM:
	在java堆的内存中,根据垃圾回收的机制不同分为新生代和老年代比例为 1 :2
	新生代:新时代又划分为Eden 、To、From其比例为8 :1 :1 ,其中垃圾回收采用分代复制算法
			当有一个对象被创建了,对象太大了,就会直接从Eden到老年代内存,会将Eden移动到To再移动
			到From达到15次后就会进入老年代内存
	老年代:
			老年代的比新生代的cg效率要慢
	【小知识:还有一个元空间,使用的是本地内存】
	
== 和equals的区别:
	1、== 可以判断基础类型是否相等
	2、equals 可以判断内置的引用类型的值是否相等(不能用于判断自己创建两个对象,可以重写equals和
	hashCode或者使用instanceof关键字来)
	【小知识:hashCode相同不一定equals就相同如同4+5=9 6+3=9 一样的道理】

final关键字的使用:
	被final修饰类,该类不能被继承
	被final修饰的方法,该方法不能被重写
	被final修饰常量,该常量必须初始化,初始化后的值不能被修改

Math. round()的注意事项(是一个为伪随机):
	正数的且大于等于0.5向上取整
	负数的0.5舍去

String、StringBuffer、StringBuilder三者的区别:
	String是不可变的(用字符串拼接的形式,在编译出来的class文件中是以StringBuilder来拼接字符串的)
	StringBuffer和StringBuilder的区别,前者是线程安全的后者是线程不安全的

new String() 和 "" 的区别:
	前者放在堆内存里面、后者放在常量池里面

关于字符串的反转:
	StringBuilder或者StringBuffer的reverse()方法可以将字符串反转

String类是常用方法:
	indexOf() 返回指定的字符串索引
	charAt() 返回指点索引的字符串
	replace() 字符串替换
	trim() 去除字符串两端的空白
	split() 字符串切割
	length() 返回字符串长度
	toLowerCase() 英文大写转小写
	toUpperCase() 英文小写转大写
	substring() 字符串截取
	equals() 字符串比较

普通类和抽象类和接口:
	1、普通类不能有抽象方法;抽象类可以包含抽象方法
	2、抽象类不能直接实例化;普通类可以直接实例化
	3、抽象类不能被final修饰
	4、继承抽象类用extends;继承接口用implement
	5、抽象类可以有构造函数;接口不可以
	6、继承接口可以继承多个接口;继承抽象类只能继承一个
	7、接口里的方法的修饰符默认是public;抽象类里的方法可以是任意访问修饰符、
	8、接口里的常量必然是public static final 
	【小知识:抽象类里面不一定包含抽象方法,抽象方法一定在抽象类里面】

IO流:
	功能上区分:输入流(input)和输出流(output)
	按类型区分:有字节流和字符流
	(BIO)为阻塞IO、(NIO not block io)为非阻塞IO、(NIO new io)为多路复用IO,多路复用IO用户需要主动
	读取数据、(AIO)为异步非阻塞IO,AIO内核会帮用户读取数据;
	
Files的常用方法
	exists() 检测文件路径是否存在
	createFile() 创建文件
	createDirectory() 创建文件夹
	delete() 删除一个文件或文件夹
	copy() 复制文件
	move() 移动文件
	size() 查看文件个数
	read() 读取文件
	write() 写入文件
	
容器Collection和Map
	Collection
		List
			ArrayList:是有序的,采用数组的数据结构
			LinkedList:
			Vector:
			Stack:
		Set
			HashSet:
			LinkedHashSet:
			TreeSet:
	Map
		HashMap:是无序的,采用一个单项向链表和数组
		LinkedHashMap:是有序的,采用一个双向链表用于保持迭代顺序,继承HashMap和Map
		TreeMap:是一个有序的key集合,它是通过红黑树实现的,可序列化
		ConcurrentHashMap:是无序的,是才用链表上加锁来实现同步,且判断如果节点数量是大于8,就将链表
		转化成红黑树(在性能高)
		ConcurrentSkipListMap:是有序,通过跳表实现的,对于高并发程序在数据量一定的情况下,并发的
		线程越多越能体现出它的优势
		Hashtable:是无序的,是通过在每个方法上加Synchronized来实现同步的所以线程是安全的
		
Stream
	这个流是指集合的操作流,可以将List转换为Map,也可将Map转换为List集合的一个工具类,这个也是java8
	中新添加的一个特性,这里就不详细的描述了,但是提供几个常用的方法:
	Map<Long, UserEntity> userServiceMap = userService.list().stream().collect(Collectors.toMap(UserEntity::getSysUserId, x -> x));
	List<Long> ids = areaService.list().stream().map(AreaEntity::getAreaId).toList();
---------------------------------------2023-03-09 17:36:10-------------------------------------------------------------------------------
Date
	时间类,这个时间类已经被废弃了许多方法了,就介绍简单又好用的方法吧*/
	/** 返回当前时间*/
	Date nowDate = new Date();
	/** 返回当前时间的字符串且时间格式为 2023-03-09 17:36:54 */
	String nowDateString = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
	
Calendar
	日历类,也是关于时间的,介绍几个食用方式【这样我们解决日期的++ -- 的问题】
	/** 返回当前时间*/
	Calendar startTime = Calendar.getInstance();
	/** 返回当前时间的前8天数据【就是按当前时间过去推8天】*/
	startTime.set(Calendar.DATE, startTime.get(Calendar.DATE) - 8);
	/** 返回当前时间的前8天数据【就是按当前时间未来推8天】*/
	startTime.set(Calendar.DATE, startTime.get(Calendar.DATE) + 8);
    /**
    * Calendar.DATE 日 Calendar.MONTH 月 Calendar.YEAR 年
    *  如:用Calendar.MONTH 往过去推8个月【剩下的就不举栗子了】
    * startTime.set(Calendar.DATE, startTime.get(Calendar.MONTH) + 8); 
    */
 ---------------------------------------2023-03-013 09:36:10-------------------------------------------------------------------------------
Optional
	java8中的新特性,一个判空的工具类,简单的介绍一下食用方法
	非Optional时写法:
		if(user!=null){
			xxxx
		}
	Optinoal时写法:
	      Optional.ofNullable(user).ifPresent(x->{});

总结

立个小目标【菜鸟教程】:每天加一点

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值