
Java基础
文章平均质量分 88
主要是Java的基础方面的知识
屈家全
一个为了Java已经秃顶的程序猿转行学Android了。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Lambda表达式的概念和使用(jdk8)
Lambda 表达式是一个匿名函数本质只是一个"语法糖"Lambda表达式就是简化匿名内部类的用法 是jdk8的新特性()->{};简化匿名内部类的书写方式,但是不是所有的匿名内部类都可以简化,Lambda表达式只能简化函数式接口的匿名内部类,所谓函数式接口就是一个接口中只有一个抽象方法。在jdk源码中经常标有@FunctionalInterface的接口都是函数式接口,都可以使用Lambda表达式。使用Lambda表达式时,还可以简化许多,比如,参数类型可以省略不写,如果传入参数为一个,则()原创 2023-08-23 15:12:47 · 312 阅读 · 0 评论 -
Java动态代理、反射
在这个方法中,第一个参数是指定哪一个类加载器去加载生成的代理类,第二个参数是指定的接口,第三个参数是用于指定生成的代理对象要干什么,一般创建代理对象不会调用到第三个参数,后面只有通过代理对象进行方法回调的时候才会调用第三个参数,在执行这个第三个参数时,会重写invoke方法进行代理方法的实现,传入invoke方法有三个参数,第一个参数是传入代理的对象,第二个参数是传入需要运行的就是原本对象的方法,第三个参数就是传入这个方法的参数。在返回的时候,返回的是传入这个方法的invoke方法传回的值。原创 2023-08-22 09:20:35 · 816 阅读 · 0 评论 -
Java基础--->IO流(2)【常见IO模型】
非阻塞IO模型也称为异步IO模型,在这种模型中,一个线程可以发起IO请求后立即返回,而不需要等待IO操作的结果,因此也被称为“异步”模型。同步非阻塞 IO 模型中,应用程序会一直发起 read 调用,等待数据从内核空间拷贝到用户空间的这段时间里,线程依然是阻塞的,直到在内核把数据拷贝到用户空间。回过头来看下,不管是 BIO,还是 NIO,还是信号驱动,在数据从内核复制到应用缓冲的时候,都是阻塞的。信号驱动 IO 模型,在应用进程发出信号后,是立即返回的,不会阻塞进程。的,因此都不算是真正的异步。原创 2023-05-26 12:00:00 · 890 阅读 · 0 评论 -
Java基础--->IO流(1)【IO基础】
写入数据时,它不会一个字节一个字节的写入,它也会将数据缓存到内部的缓存区中,等到缓冲区满了之后从内部缓冲区中单独写入字节。读取数据时,它会一次性读取一定量的字符到缓冲区中,然后逐个读取,直到缓冲区中数据全部读取完毕,这样可以减少访问数据源的次数提高读入效率。写数据时,它的操作类似,会先将数据写入缓冲区,等到缓冲区写满之后再一次性写出到目标文件中,这样可以减少写操作次数,提高写入效率。是最常见的字节输出流对象,可以直接指定文件路径,可以直接输出单字节数据,也可以输出指定的字节数组。原创 2023-05-25 16:48:33 · 890 阅读 · 0 评论 -
Java基础--->并发部分(4)【对象引用、线程池、ThreadLocal】
Java中的对象引用指的是一个变量或常量,它指向一个在堆内存中具体位置的对象。通过对象引用,我们可以访问对象的属性和方法。Java采用的是系统管理堆内存和栈内存的方式,对象分配在堆内存中并由引用指向,引用存储在栈内存中。当引用不再被使用时,Java垃圾回收机制会自动将对象从堆内存中释放掉。原创 2023-05-22 13:15:00 · 605 阅读 · 0 评论 -
Java基础--->并发部分(3)【JUC、AQS】
在学习`HashMap`的时候知道了`HashMap`不是线程安全的,如果要实现线程安全,需要使用一个全局的锁来同步不同线程间的并发访问,所以非常影响性能,所有就有了`ConcurrentHashMap`,无论是读还是写,都能保证很高的性能,在读操作时几乎不需要加锁,在写操作时通过锁分段技术只对所操作的的段加锁而不影响客户端对其他段的访问。原创 2023-05-21 18:02:15 · 684 阅读 · 0 评论 -
Java基础--->并发部分(2)【Java中的锁】
乐观锁(不加锁):认为并发的操作,不加锁的方式实现是没有问题的,每次操作前判断(CAS,自旋)是否成立,不加锁实现。 > 悲观锁:认为对于同一个数据的并发操作,一定是会发生修改的,即使没有修改,也会认为修改。认为并发操作肯定会有问题,必须加锁,对于同一个数据的并发操作,悲观锁采用加锁的形式 > > > **总结**:悲观锁适合写操作非常多的场景,乐观锁适合读操作非常多的场景,不加锁会带来大量的性能提升。 > 悲观锁在Java中使用的话就是利用各种的锁原创 2023-05-20 22:06:15 · 516 阅读 · 0 评论 -
Java基础--->基础部分(2)【Java值传递】
从这段代码可以看出,数组中的值发生了改变,实际上传递的还是数组的值,只不过这个值是实参的地址,也就是传递进来的数组对象和实参对象指向的都是同一个数组对象,这就可以说明为什么方法内部修改会影响到实参。,因为方法内部的两个值只是从传来的实参中复制进来的,也就相当于实参的副本,副本内容无论怎么修改并不会影响其本身的内容。值传递方法接收到的是实际的值,引用传递是方法接收到的是实参所引用的对象在堆中的地址,对形参的修改将影响实参。指的是在使用函数时需要传递进函数的参数,用于接收实参,没有确定的值。原创 2023-05-09 18:02:07 · 684 阅读 · 0 评论 -
Java基础--->并发部分(1)
缓存(工作内存)导致可见性问题,编译(指令重排)优化带来有序性问题,线程切换带来原子性问题。缓存、线程、编译优化的目的和我们写并发程序的目的是相同的,都是提高程序安全性和性能。原创 2023-04-26 17:52:18 · 818 阅读 · 0 评论 -
Java基础--->基础部分(1)
在Java中,JVM可以解释的代码就叫字节码(.class文件),他不面向任何特定的处理器,只面向虚拟机。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以, Java 程序运行时相对来说还是高效的(不过,和 C++,Rust,Go 等语言还是有一定差距的),而且,由于字节码并不针对一种特定的机器,因此,Java 程序无须重新编译便可在多种不同操作系统的计算机上运行。原创 2023-04-24 13:51:51 · 648 阅读 · 0 评论 -
Java基础--->集合详解
将数组和链表结合,创建一个链表数组,数组中每一个就是一个链表,若遇到哈希冲突,则将冲突的值加到链表中即可,JDK8之后在解决哈希冲突有了较大的变化,当链表长度大于阈值(默认8)(将链表转换成红黑树前会判断,如果当前数组的长度小于 64,那么会选择先进行数组扩容,而不是转换为红黑树)时,将链表转化为红黑树,以减少搜索时间。不可重复的,就是说添加元素时,需要同时重写。 定义初始值,会进行判断,如果大于0,直接使用定义的初始值,如果等于0,系统赋值默认初始值10,如果小于0,报错。原创 2023-04-23 12:22:29 · 1207 阅读 · 0 评论