Java基础笔记整理_java基础笔记csdn-程序员宅基地

技术标签: 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 的循环依赖
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sinat_30280917/article/details/107298844

智能推荐

短小精悍的Bug可以撼程序强盛-程序员宅基地

编码有点疲惫,暂时休息一下大脑,写个bug report。话说,那些短小精悍的bug,都是极其精巧别致的,是可遇而不可求的。它们往往用不了几行代码,却可以轻轻松松地穿过编译器、连接器、debugger的层层围捕,甚至是经验老到的程序员的第一遍review,最终撼动程序的质量。从前,有一个双向(相邻节点互相指向)循环(首尾节点互相指向)链表(只有一个节点时前后指针都指向自己)。一位程

利用IDEA Community版本搭建Web开发环境_idea comunity web-程序员宅基地

大家知道IDEA的社区免费版本是不带Tomcat的,如果需要进行Web开发就需要手工安装插件,这篇文章会简单的介绍一下怎样利用IDEA来开发web程序Part1 安装Tomcathttps://blog.csdn.net/u012364631/article/details/47682011Part2 添加SpringMVC依赖https://blog.csdn.net/qq_27..._idea comunity web

mxnet制作.lst和.rec文件_rec执行sh-程序员宅基地

mxnet读数据的其中一种方式就是读取.rec文件,实际上.rec文件的制作流程并不复杂,分为两个步骤:1.制作.lst文件,这里是一种灵活度比较高的方法 上图是一个简单的lst文件,第一列是index列,第二列是标签列,第三列是图片目录列,中间的空隙是制表符'\t'。其中标签列可能是多标签也可能是一个标签,在制作rec文件的时候会略有不同,图片的目录列我认为最好是写一个比..._rec执行sh

使用leetcode熟悉动态规划_leetcode 131 动态规划-程序员宅基地

引言撰写本文的目的是为了复习巩固动态规划类型题目,最近将会不断的更新博客,同时本文适合对动态规划不太熟以及希望复习动态规划。动态规划步骤动规解题的一般思路将原问题分解为子问题把原问题分解为若干个子问题,子问题和原问题形式相同或类似,只不过规模变小了。子问题都解决,原问题即解决(数字三角形例)。 子问题的解一旦求出就会被保存,所以每个子问题只需求 解一次。确定状态在..._leetcode 131 动态规划

用removeLast和removeFrist来模仿堆和栈_stack removelast-程序员宅基地

/**在大不久前,我决定自学Java,关注了很多的公众号、微博等。没几天我看到一个笑话:*晚上孩子哭了,老婆让我去看看。*我说:“不行,咱们的床是队列,你先上的床就得你先下床。。。*老婆说:NO NO No,是栈。* 紧接着一脚踹到我的屁股上。* 当时,看了评论,都是在说程序员夫妻欢乐多之类的话,也上网查了堆栈的知识,* 不是计算机专业的,看得也是云里雾里的。今天是二轮复习基础知识..._stack removelast

JAVA毕业设计高校教学资源库设计与实现---计算机源码+lw文档+系统+调试部署+数据库_课程资源库设计代码_咸菜焖的博客-程序员宅基地

JAVA毕业设计高校教学资源库设计与实现---计算机源码+lw文档+系统+调试部署+数据库。springboot基于B_S架构的疫情包联信息管理系统的设计与实现。ssm基于SSM高校教师个人主页网站的设计与实现。ssm+sqlserver多媒体素材管理系统。springboot烟草经销平台的设计与实现。ssm+sqlserver房屋租赁管理系统。ssm基于java的钢材出入库管理系统。..._课程资源库设计代码

随便推点

搭建spring boot项目工程的结构和注意点_boot项目正确的项目结构-程序员宅基地

1:如上图,父工程进行一个jar包版本的管理,<packaging>pom</packaging>,不需要src文件,父工程是project2:子模块是service,继承父工程,统一依赖管理jar包,不需要src文件,子模块是新建的module3:子子模块是业务模块,写业务代码,子模块也是新建的module注意事项:在建立子子模块时候一定要看好路径,不然会替换子模块项目..._boot项目正确的项目结构

Looper 源码分析_looper函数-程序员宅基地

上一章学习了消息机制中的 ThreadLocal, 本章接着来学习消息机制中的 Looper. 开篇也是先抛出几个问题.1. 问题可以在一个线程多次执行 Looper. prepare() 吗? 为什么 ?Looper.prepareMainLooper 是用来做什么的. 为什么我们在主线程可以直接使用 Handler, 而不需要调用 Looper. prepare() ?Looper.quit 与 Looper.quitSafely() 有什么区别.2. 例先来一个典型的关于 Looper_looper函数

嵌入式linux多线程编程-程序员宅基地

linux中的线程是轻量级的线程,linux中的线程调度是由内核调度程序完成的,每个线程有自己的ID号。与进程相比,它们消耗的系统资源少、创建较快、相互间的通信也较容易。linux线程分为两类:一是核心级支持线程,二是用户级的线程。一般都为用户级的线程。一、多线程的几个常见函数要创建多线程必须加载pthread.h文件,库文件pthread。线程的标识符pthread_t在头文件/usr/

基于docker的k8s集群管理-程序员宅基地

一、概述1.简介官方中文文档:https://www.kubernetes.org.cn/docsKubernets(k8s)是google在2014年发布的一个开源项目据说google的数据中心里运行着20多亿个容器,而且google十年前就开始使用容器技术最初 google开发了一个叫Borg的系统(现在命名为Omega)来调度如此庞大数量的容器和工作负载,在积累了多年的经验...

什么是云计算?什么是边缘计算?为什么需要云边协同?_边云协同_清如许.的博客-程序员宅基地

随着物联网趋势的不断加深和 5G 等网络建设的持续发展,消费物联网和产业物联网设备都将与日俱增。目前的智能物联网设备大都采取通过将数据通过网络上发至云端,由云端进行统一的处理。然而广泛的智能终端接入和海量的感知数据在传输过程中占用的巨大带宽,将数据直接传输至云端也增加了隐私泄漏的风险。在边缘侧进行计算可以减少了核心网络的流量从而释放网络带宽的压力,也完成了一定的数据保护,但是其资源受限会导致的无法满足模型精度需求。_边云协同

关于基于SPFCN库位检测算法的解读与源码分析-程序员宅基地

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言SPFCN是一个偏工程性且实用的车库位检测算法,本人菜鸟一个,又看不到有关此论文的解读,所以在此写下关于自己的解读,希望能帮助大家,更是在写文章的过程中一边梳理和理清思路,文章中可能出现一些错误,请大佬们指正。一、SPFCN的算法流程SPFCN算法是用Stacked Hourglass Networ._spfcn

推荐文章

热门文章

相关标签