java基础总结
文章平均质量分 88
sun cat
只有让自己变得更优秀,才无所畏惧
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
与(&)、非(~)、或(|)、异或(^) java运算符
运算符 运算符符号 使用规则 个人理解 与 & 两个操作数中位都为1,结果才为1,否则结果为0。 有0为0 非 ~ 如果位为0,结果是1,如果位为1,结果是0 0/1反过来 或 | 两个位只要有...原创 2022-03-29 22:02:17 · 952 阅读 · 0 评论 -
throw和throws区别
我们先来直观的看看他们之间的用法:throw:一般出现在方法体内,并且在使用的时候是以抛出异常对象为结束,后面的代码不会再执行,比如:public void suncat(){ if(users.isEmpty()){ Thrownew RuntimeException("用户列表不能为空"); }}throws:一般出现在方法名字后,表示方法内的异常不做处理,抛给那些调用该方法的程序。比如:public static void function原创 2022-03-28 23:05:32 · 937 阅读 · 0 评论 -
JVM垃圾回收算法-CMS算法
一、CMS算法是什么CMS算法是JVM中老年代常用的垃圾回收算法,全称是Concurrent Mark Sweep算法,即并发标记-清除算法。算法的执行步骤如下图所示,共有六个步骤。1 、初始标记(Initial Mark):CMS算法中两个会触发Stop the World事件中的一个,这个阶段会标记所有与GC Roots直接相关联的对象,以及被存活的青年代对象所直接引用的对象。2、 并发标记(Concurrent Mark):...原创 2022-03-27 22:50:20 · 4307 阅读 · 3 评论 -
总结篇(34)---JUC工具类(4)Exchanger
ExchangerExchanger用于两个线程间的数据交换,它提供一个同步点,在这个同步点两个线程可以交换彼此的数据。 使用场景:两个线程相互等待处理结果并进行数据传递。 一、Exchanger使用public void latch() throws InterruptedException,IOException{ int count = 5; Exchanger<String> exchanger = new Exchanger<>...原创 2021-01-07 22:42:51 · 263 阅读 · 0 评论 -
总结篇(33)---JUC工具类(3)Semaphore
SemaphoreSemaphore信号量维护一个许可集,每次使用时执行acquire()从Semaphore获取许可,如果没有则阻塞,每次使用完执行release()释放许可。 使用场景:Semaphore对用于对资源的控制,比如数据连接有限,使用Semaphore限制访问数据库的线程数。一、Semaphore的使用:public void latch() throws InterruptedException,IOException{ int count = 5; S...原创 2021-01-07 22:39:18 · 288 阅读 · 0 评论 -
总结篇(32)---JUC工具类(2)CyclicBarrier
CyclicBarrier它允许一组线程相互等待,直到达到某个公共屏障点,也就是阻塞在调用cyclicBarrier.await()的地方。 使用场景:类似CountDownLatch,但CyclicBarrier提供了几个countDownLatch没有的方法以应付更复杂的场景。备注:看上去功能跟CountDownLatch差不多,但CountDownLatch的计数无法被重置,如果需要重置,还是需要考虑使用CyclicBarrier。 另外,CyclicBarrier初始化时还可添..原创 2021-01-07 22:36:42 · 356 阅读 · 0 评论 -
总结篇(31)---JUC工具类(1)CountDownLatch
CountDownLatchCountDownLatch初始化时会给定一个计数,然后每次调用countDown()计数减1,当计数未达到0之前调用await()方法会阻塞直到计数减到0; 使用场景:多用于划分任务由多个线程执行,例如:最近写个豆瓣爬虫,需要爬取每个电影的前五页短评,可以划分成5个线程来处理线程。通过latch.await()保证全部完成再返回。 一、CountDownLatch使用样例:public void latch() throws Interrupte...原创 2021-01-07 22:32:33 · 268 阅读 · 0 评论 -
总结篇(30)---Java并发及锁(4)常见锁及分类
一、公平锁和非公平锁公平锁:指多个线程按照申请锁的顺序来获取锁 非公平锁:没有顺序完全随机,所以会造成优先级反转 举例: synchronized就是非公平锁 ReentrantLock(使用CAS和AQS实现)通过构造参数可以决定是非公平锁还是公平锁,默认构造是非公平锁,非公平锁的吞吐量性能比公平锁大好。二、可重入锁和不可重入锁可重入锁:又名递归锁,指同一线程在外层方法获取锁的时候进入内层方法会自动获取锁 不可重入锁...原创 2021-01-05 23:16:16 · 594 阅读 · 0 评论 -
总结篇(29)---Java并发及锁(3)Lock
Lock是一种用于控制多个线程对共享资源的访问工具一、Lock使用public interface Lock { void lock(); void lockInterruptibly() throws InterruptedException; boolean tryLock(); boolean tryLock(long var1, TimeUnit var3) throws InterruptedException; void unlock()...原创 2021-01-05 23:09:43 · 476 阅读 · 0 评论 -
总结篇(28)---Java并发及锁(2)Volatile
Volatile被volatile修饰的变量能够保证每个线程能够获取该变量的最新值,从而避免出现数据脏读的现象。一、Volatile使用private volatile boolean flag = false;二、Volatile特性及原理一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层含义:1. 保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。 ...原创 2021-01-05 22:58:08 · 320 阅读 · 0 评论 -
总结篇(27)---Java并发及锁(1)Synchronized
Synchronized在java中synchronized关键词具有使每个线程依次排队操作共享变量的功能。一、Synchronized使用当锁住的是实例对象,它是作用于该实例的范围,其它不同的实例对象仍然可以执行。 当锁住的是类对象,他是作用于某个类的范围,只要是该类的实例对象都会受到影响。二、Synchronized原理当使用了synchronized,会在生成的class信息中出现下面两种情况:(1)同步代码块使用了monitorenter和monitorexit指令..原创 2021-01-05 22:50:13 · 332 阅读 · 0 评论 -
总结篇(26)---Java线程及其相关(4)ThreadLocal
ThreadLocalThreadLocal是一个线程内部的存储类,可以在指定线程内存储数据,数据存储以后,只有指定线程可以得到存储数据。一、ThreadLocal的简单使用static final ThreadLocal<T> sThreadLocal = new ThreadLocal<T>();sThreadLocal.set();sThreadLocal.get();二、ThreadLocal原理在Thread类中,有一个成员变量th..原创 2020-12-22 23:30:21 · 370 阅读 · 1 评论 -
总结篇(25)---Java线程及其相关(3)线程池及其问题
线程池:是线程的一种使用模式。通过创建一定数量的线程,让他们时刻准备就绪等待新任务的到达,而任务执行结束之后重新回来继续待命。 线程池核心的设计思想:复用线程,平摊线程的创建与销毁的开销代价一、为什么使用线程池?原因有一下几点:1. 避免了线程的重复创建与销毁所带来的资源消耗。2. 提升了任务的响应速度,任务来了直接选一个线程执行而无需等待线程的创建。3. 线程的统一分配和管理,也方便统一的监控和调优。二、线程池的构造函数线程池的构造函数很多,我们挑一个参数...原创 2020-12-22 23:19:41 · 355 阅读 · 1 评论 -
总结篇(24)---Java线程及其相关(2)多线程及其问题
多线程多线程就是指一个进程中同时有多个线程正在执行。 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现。多线程要注意的问题主要有以下几个:并发问题、安全问题、效率问题一、效率问题:可以依据CPU密集型还是IO密集型来进行分析优化二、并发问题:并发中问题会导致死锁,也会导致安全性问题,涉及到安全性问题的先不讨论,先来说一下死锁。死锁:1.定义:指多个线程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些线程...原创 2020-12-22 23:04:58 · 411 阅读 · 1 评论 -
总结篇(23)---Java线程及其相关(1)线程介绍
线程进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。 线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。一、线程调度各个线程轮流获得CPU的使用权,分别执行各自的任务。 那么,在可运行池中,会有多个线程处于就绪状态等到CPU,JVM就负责了线程的调度,JVM采用的时抢占式调度,因此可能造成多线程执行结果的随机性。备注: ...原创 2020-12-20 23:14:43 · 338 阅读 · 0 评论 -
总结篇(22)---Java 进程
进程进程就是在操作系统上执行的一个应用程序;比如:qq.exe。进程是系统进行资源分配的最小单位。备注:进程与线程的区别? 进程和线程的主要差别在于它们是不同的操作系统资源管理方式。 (1)进程有独立的内存空间,进程中的数据存放空间(堆空间和栈空间)是独立的。 (2)线程堆空间是共享的,栈空间是独立的,线程消耗的资源也比进程小,相互之间是可以影响的。 相对进程而言,线程是一个更加接近于执行体的概念,它可...原创 2020-12-20 22:52:00 · 294 阅读 · 1 评论 -
总结篇(21)---Java IO
Java IO:IO主要有两个重点:一是IO的架构模型,二是IO的操作一、IO的架构模型:目前主要有三大类:IO(BIO)、NIO、AIO。(1)IO(BIO):同步阻塞式IO,适用于连接数目比较小且固定的架构。线程发起IO请求,不管内核是否准备好IO操作,从发起请求起,线程一致阻塞,直到操作完成。(2)NIO:同步非阻塞式IO,适合于连接数目多且连接比较短(轻操作)的架构。(reactor模型):线程IO发起IO请求,立即返回;内核在做好IO操作的准备之后,通过调用注册..原创 2020-12-20 22:47:16 · 329 阅读 · 1 评论 -
总结篇(20)---反射
反射概念:是指程序在运行状态中,对于任意一个类,都可以知道这个类的所有属性和方法;对于任意一个对象,都能够调用他的任意方法和属性。**代码示例** Class myclass = Class.forName("chb.test.reflect.Student"); Method m = myclass.getDeclaredMethod("mymethod",String.class); m.invoke(myclass.newInstance(),"suncat"...原创 2020-12-20 22:32:37 · 598 阅读 · 0 评论 -
总结篇(19)---JVM(java虚拟机) (6)JVM调优
一、调优指标首先列出性能调优指标,对于所有性能监控和管理来说,有三个维度是通用的延迟(Latency)--如:所有交易必须在10秒内得到相应。 吞吐量(Throughput)--如:每天必须能处理100万个订单。 系统容量(Capacity)--如:必须能部署在4核8G内存上。二、工具查看log1.JMX APIJMX是获取JVM内部运行时状态信息的标准API。可以编写程序代码,通过JMX API 来访问本程序所在的JVM,也可以通过JMX客户端执行(远程)访问。最常见的J...原创 2020-11-28 13:29:32 · 361 阅读 · 0 评论 -
总结篇(18)---JVM(java虚拟机) (5)垃圾回收算法
一、基础的GC算法第一步,记录所有存活对象在垃圾收集中有一个叫**标记(Marking)**的过程专门干这件事。(1)标记可达对象(Marking Reachable Objects)首先指定特定对象为GC根节点(Garbage Collection Roots) 1)当前正在执行的方法的局部变量和输入法 2)活动线程(Active threads) 3)内存中所有类的静态字段(static field) 4)JNI引用...原创 2020-11-28 13:24:28 · 486 阅读 · 0 评论 -
总结篇(17)---JVM(java虚拟机) (4)垃圾回收
JVM垃圾回收垃圾回收就是回收那些不再使用的对象,即释放它们占用的内存。垃圾收集器跟踪所有正在使用的对象,并把其余部分当做垃圾。 一、JVM垃圾回收中的基本概念概念 解释 说明 Minor GC 小型GC 新生代GC,即发生在新生代的垃圾回收动作 Major GC 大型GC 老年代GC,指发生在老年代的GC。CMS收集器中,当老年代满时会触发 Major GC。除了CMS收集器,其他都存在都不存在只针对年老代的收集 Full GC ...原创 2020-11-28 11:42:26 · 393 阅读 · 1 评论 -
总结篇(16)---JVM(java虚拟机) (3)运行时数据区
运行时数据区Java虚拟机在执行Java程序的过程中,会把所有它管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途。备注:有些人也会称为Java虚拟机内存模型,但无法考证。要注意的是,Java虚拟机内存模型跟Java内存模型有所不同。一、运行时数据区概括图二、运行时数据区各个模块介绍方法区:属于共享内存区域,存储已被虚拟机加载的**类信息**、**常量**、**静态变量**、**即时编译器编译**后的代码的等数据。可以理解为已经编译好的代码储存区。 堆:这块区域是J原创 2020-11-28 11:33:25 · 424 阅读 · 0 评论 -
总结篇(15)---JVM(java虚拟机) (2)类加载器
类加载器类加载器是用来完成类的加载的。一、JVM中类加载器相关的基本概念(1)类的加载和卸载 JVM将指定的class文件读取到内存里,并运行该class文件里的java程序的过程,就称之为“类的加载”; 反之,将某个class文件的运行时数据从JVM中移除的过程,就称之为“类的卸载”。 (2)类的生命周期 Java类从被虚拟机加载开始,到卸载出内存为止,它的生命周期包括: 加载(Loading)、...原创 2020-11-28 11:25:35 · 421 阅读 · 0 评论 -
总结篇(14)---JVM(java虚拟机) (1)JVM虚拟机概括
JVMJVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是虚拟出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。一、JVM的作用实现了与平台的无关性:JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多个平台上不加修改的运行。二、JVM概括图三、JVM中每个模块介绍类加载器子系统:负责加载class文件,class文件在文件...原创 2020-11-28 11:12:32 · 355 阅读 · 0 评论 -
总结篇(13)--- Java注解及元注解
注解提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。**声明注解:**@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface Test {}一、注解的作用能够读懂别人写的代码(尤其是框架相关的代码); 实现替代配置文件的功能。比如可能原本需要很多配置文件以及很多逻辑才能实现的内容,如果使用...原创 2020-11-28 10:46:25 · 377 阅读 · 0 评论 -
总结篇(12)---字符串及基本类 (4)Integer对象
IntegerInteger是int对应的包装类,其中有一个private final int value;来存储数据,并且还提供了一些基本操作,例如sum、max、int和字符串的转换等方法。从value声明为private final可以得知它也是一个不可变类型! 备注:int与integer的区别? 所占内存 类型 初始值 Int 占用的空间更少 基本类型,直接存数值 0 Integer 占用更多的内存。 I...原创 2020-11-28 10:37:03 · 351 阅读 · 0 评论 -
总结篇(11)---字符串及基本类 (3)String对象
String类型String 字符串是常量,其值在实例创建后就不能被修改,但字符串缓冲区支持可变的字符串,因为缓冲区里面的不可变字符串对象们可以被共享。(其实就是使对象的引用发生了改变) 这是一个字符数组,并且是 final 类型,用于存储字符串内容,支持序列化和反序列化。 /** ** 可以看出 String 是 final 类型的,表示该类不能被其他类继承, ** 同时该类实现了三个接口:java.io.Serializable、Comparable<String...原创 2020-11-22 11:12:34 · 496 阅读 · 1 评论 -
总结篇(10)---字符串及基本类 (2)字符串及基本类之java中公共方法及操作
Object基本类型中的方法一、equals()方法/*** Object源码里的equals()方法基本就是 ==*/public boolean equals (Object x){ return this == x;}备注1: == 是运算符,依据数据类型的不同,做出不同的判断。可分为两类:基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(==),...原创 2020-11-21 18:26:15 · 282 阅读 · 0 评论 -
总结篇(9)---字符串及基本类 (1)字符串及基本类之基本数据类型
基本数据类型原创 2020-11-21 18:16:49 · 276 阅读 · 0 评论 -
总结篇(8)---序列化
序列化概念:把Java对象转换为字节序列,并存储至一个储存媒介的过程。备注:反序列化:把字节序列恢复为Java对象的过程。简单说法是:序列化把当前对象信息保存下来。反序列化刚好相反的操作,即读取信息设置到当前对象上。一、序列化的作用永久性保存对象,保存对象的字节序列到本地文件中; 通过序列化对象在网络中传递对象; 通过序列化在进程间传递对象。二、Serializable介绍Serializable:用于启动对象的序列化功能,可以强制让指定类具备序列化功能,该接...原创 2020-11-21 18:12:53 · 323 阅读 · 0 评论 -
总结篇(7)---内部类 (5)内部类之匿名内部类
匿名内部类概括匿名内部类就是没有名字的内部类,没有访问修饰符的,当然也就不能有构造器。代码示例:匿名内部类的定义的语法格式 (一种是接口,另一种是抽象类。)/** 对于实现接口,由于接口是没有构造函数的,注意这里一定是空参数。*/new 实现接口(){ //匿名内部类类体部分}或者/** 调用父类的构造器,注意此处可以是空参数,也可以传入参数。*/new 父类构造器(实参列表){ //匿名内部类类体部分}...原创 2020-11-21 18:02:32 · 286 阅读 · 0 评论 -
总结篇(6)---内部类 (4)内部类之局部内部类
局部内部类概括:定义在方法中的类,就是局部类。**代码示例:**public class Out { private static int a; private int b; /** * 非静态方法内使用局部内部类 */ public void test(final int c) { final int d = 1; class In...原创 2020-11-21 17:51:41 · 579 阅读 · 0 评论 -
总结篇(5)---内部类 (3)内部类之成员内部类
成员内部类概括:成员内部类是最普通的内部类,它定义在一个类的内部。作为外部类的一个成员存在,与外部类的属性、方法并列(也有一种说法是“定义在类内部的非静态类,就是成员内部类”。)**代码示例:**public class Out { private static int a; private int b; /** * 成员内部类 */ public class Inner {...原创 2020-11-21 17:22:34 · 410 阅读 · 0 评论 -
总结篇(4)---内部类 (2)内部类之静态内部类
静态内部类概括定义在类内部的静态类,就是静态内部类。**示例代码:**public class Out { private static int a; private int b; public static class Inner { public void print() { System.out.println(a); } ...原创 2020-11-21 17:16:15 · 812 阅读 · 0 评论 -
总结篇(3)---内部类 (1)内部类的基本概念
内部类:内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。 内部类主要有以下几类: 1)成员内部类 2)局部内部类 3)静态内部类 4)匿名内部类内部类的作用:内部类可以很好的实现隐藏:一般的非内部类,是不允许有 private 与protected权限的,但内部类可以 内部类拥有外围类的所有元素的访问权限 可以实现多重继承 可以避免修改接口而实现同一个类中两种同名方法的调用。**示例代码:**/**...原创 2020-10-31 20:08:43 · 304 阅读 · 0 评论 -
总结篇(2)---多态
多态接口的多种不同的实现方式即为多态。 多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术。(允许将子类类型的指针赋值给父类类型的指针,把不同的子类对象都当作父类来看。)备注:简单来说就是:父类型的引用指向子类型的对象。通俗点说:同一操作作用于不同的对象,可以产生不同的效果。这就是多态。 父类引用指向子类对象,在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。(同一消息可以根据发送对象的不同而采用多种不同的行为方式。)****代码示例:****void d原创 2020-10-31 20:00:50 · 654 阅读 · 1 评论 -
总结篇(1)---复用类
复用类:复用代码的类一、复用类使用(有三种方式):组合语法 : 将对象引用置于新类中即可. 继承 : 将对象引用置于新类中即可. 代理 : 想复用类的代码,但又不想暴露太多的内容.**组合语法示例** class Soap { private String s; public Soap() { System.out.println("Soap()"); } } publ...原创 2020-10-31 19:44:19 · 444 阅读 · 2 评论
分享