java教程
文章平均质量分 55
java教程,小白都能看懂的教程。
您的鼓励是我创作的动力,谢谢支持!!!
super码王
一直在努力,从未放弃!!!
展开
-
一文彻底教会你玩转java动态代理
代码】一文彻底教会你玩转java动态代理。原创 2022-08-14 22:53:32 · 572 阅读 · 0 评论 -
设计模式之观察者模式
Observer 接口的实现 Subject 接口 Subject 接口的实现 调用代码 效果展示原创 2022-07-10 20:15:11 · 591 阅读 · 0 评论 -
快速上手kotlin接口、抽象类及泛型
kotlin规定所有的接口属性和函数实现都要使用 override 关键字,接口中定义的函数并不需要open关键字修饰,他们默认就是open的代码展示: 接口里的属性和方法都得实现 属性实现可以选择在构造方法里,也可以不在构造方法里,如果不在构造方法里,就得设置get和set方法默认实现 我们也可以在接口里提供默认属性的getter方法和函数实现代码示例: 接口里属性修饰符是val,接口里属性必须提供get方法 接口里属性修饰符是val,实现类可以是val 或 v原创 2022-06-25 11:09:50 · 384 阅读 · 0 评论 -
用户自定义类加载器及具体实现
用户自定义类加载器在Java的日常应用程序开发中,类的加载几乎是由上节3种类加载器(引导、扩展和系统类加载器)相互配合执行的,在必要时,我们还可以自定义类加载器,来定制类的加载方式。为什么要自定义类加载器隔离加载类 修改类加载的方式 扩展加载源 防止源码泄漏用户自定义类加载器实现步骤关于ClassLoaderClassLoader类,它是一个抽象类,其后所有的类加载器都继承自ClassLoader(不包括启动类加载器)获取ClassLoader的几种方...原创 2022-05-08 18:13:24 · 521 阅读 · 0 评论 -
几种类加载器的使用体会
类加载器的分类JVM支持两种类型的类加载器,分别为引导类加载器(Bootstrap ClassLoader)和自定义类加载器(User-Defined ClassLoader)。 从概念上来讲,自定义类加载器一般指的是程序中由开发人员自定义的一类类加载器,但是Java虚拟机规范却没有这么定义,而是将所有派生于抽象类ClassLoader的类加载器都划分为自定义类加载器。 无论类加载器的类型如何划分,在程序中我们最常见的类加载器始终只有3个,如下图所示:...原创 2022-05-06 14:35:11 · 470 阅读 · 0 评论 -
概述类的加载器及类加载过程
类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。 ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定。 加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包含字符串字面量(这部分常量信息是Class文件中常量池部分的内存映射)类的加载过程加载1、通过一个类的全限定名获取定义此类的二进制字节流2、将这个字...原创 2022-05-05 18:20:43 · 356 阅读 · 0 评论 -
JVM系列笔记(一)
JVM的位置JVM是运行在操作系统之上的,它与硬件没有直接的交互。原创 2022-05-03 12:34:34 · 2303 阅读 · 0 评论 -
ThreadLocal详细解答(一)
官方描述:ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问(通过get和set方法访问)时能保证各个线程的变量相对独立于其他线程内的变量。ThreadLocal实例通常来说都是 private static 类型的,用于关联线程和线程上下文。总结:1、线程并发:在多线程并发场景下使用2、传递数据:我们可以通过ThreadLocal在同一线程,不同组件中传递公共变量3、线程隔离:每个线程的变量都是独立的,不会互相影响基本使用常用方法使用案例线程原创 2022-04-27 12:25:24 · 297 阅读 · 0 评论 -
线程池基本原理详解答
线程池优点降低系统资源消耗。通过重用已存在的线程,降低线程创建和销毁造成的消耗。 提高系统响应速度。当有任务到达时,通过复用已存在的线程,无需等待新线程的创建便能立即执行。 方便线程并发数的管控。因为线程若是无限制的创建,可能会导致内存占用过多而产生OOM,并且会造成cpu过度切换,cpu切换线程是有时间成本的,例如需要保持当前执行线程的现场,并恢复要执行线程的现场。 提供额外更强大的功能。延时定时线程池。...原创 2022-04-16 20:27:48 · 471 阅读 · 0 评论 -
史上最全java泛型总结
java泛型的作用1、减少代码编写时类型的强转2、将类型强转代码运行期的报错提前到代码编译期java泛型的类型原创 2022-04-06 21:58:56 · 3111 阅读 · 0 评论 -
继承时父子类的初始化顺序是怎样的
在上一节中我们阐述了一个类被初始化的过程_super码王的博客-CSDN博客一个类被初始化的过程_super码王的博客-CSDN博客https://blog.csdn.net/qq_41885673/article/details/123826227?spm=1001.2014.3001.5502下面我们来组合一下,当存在父子类的时候,他的类加载机制又是怎样的呢?代码设计父类package com.wust.yq;public class ParentClass { //静态.原创 2022-04-05 21:49:33 · 465 阅读 · 0 评论 -
一个类被初始化的过程
在上一讲中我们了解了JVM一个类的加载过程 :JVM一个类的加载过程_super码王的博客-CSDN博客原创 2022-03-31 15:03:18 · 723 阅读 · 0 评论 -
一文教你彻底玩懂Java反射
反射核心思想的图解所谓的反射是将一个类中的各个成员映射成相对应的Java类型反射获取构造方法我们以 User 类为例进行讲解:package com.wust.yq;public class User { //属性字段 private String username = "易齐"; int age = 30; protected float weight = 60.5F; public double height = 180.5;原创 2022-03-31 14:33:17 · 678 阅读 · 0 评论 -
JVM一个类的加载过程
七大步骤具体过程加载:classpath、jar包、网络、某个磁盘位置下的类的class二进制字节流读进来,在内存中生成一个代表这个类的 java.lang.Class 对象放入元空间,此阶段我们的程序员可以干预,我们可以自定义类加载器来实现类的加载;验证:验证Class文件的字节流中包含的信息符合《java虚拟机规范》的全部约束要求,保证虚拟机的安全;准备:类变量赋默认初始值,int为0,long为0L,boolean为false,引用类型为null;常量赋正式值;//常量原创 2022-03-29 16:57:26 · 1365 阅读 · 0 评论 -
java运行时一个类什么时候被加载
关键命令-XX:+TraceClassLoading项目框架分别创建 hello 和 user 两个类具体代码如下:hello.javapackage com.wust.yq;public class Hello { // -XX:+TraceClassLoading 监控类的加载 public static void main(String[] args) { User user = new User(); user.workin原创 2022-03-29 15:36:33 · 702 阅读 · 0 评论 -
Java单例模式的七种写法
概念简介单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。主要分为饿汉式和懒汉式这两种实现方式饿汉 和 懒汉主要区别在于 实例 初始化的时机不同饿汉式 :类加载的时候就初始化了实例,容易造成内存浪费。懒汉式 :需要使用时初始化实例,容易造成线程不安全实现思路简介构造方法私有化,保证不可以随便就能创建一个对象。 静态变量存储实例。 公开方法暴露实例以上总结的三步,不管是饿汉,还是懒汉,皆可以适用。他们之间的区别在于如何给这个静态变量 赋值。...原创 2022-03-28 16:22:01 · 445 阅读 · 0 评论 -
Volatile的其他特性
2.1 volatile总体概览在上一节中,我们已经研究完了volatile可以实现并发下共享变量的可见性,volatile除了保证可见性外,volatile还具备如下一些突出的特性:volatile的原子性问题:volatile不能保证原子性操作禁止指令重排序:volatile可以防止指令重排序操作2.2 volatile不保证原子性2.3 代码测试package Ls;/** * 目标:研究Volatile的原子性操作 * <p> * 基本观点:V.原创 2022-03-03 09:35:00 · 4626 阅读 · 0 评论 -
volatile关键字概览
1、多线程下变量的不可见性1.1 概述在多线程并发执行下,多个线程修改共享的成员变量,会出现一个线程修改了共享变量的值后,另一个线程不能直接看到该线程修改后的变量的最新值。package Ls;import java.util.HashMap;import java.util.concurrent.ThreadPoolExecutor;/** * ClassName: Main <br/> * Description: 目标:研究一下多线程下变量访问的不可见性现象原创 2022-03-02 22:19:55 · 549 阅读 · 0 评论 -
【面试题】java常考面试题
java中sleep方法和wait方法的区别sleep是线程中的方法,但是wait是Object中的方法 sleep方法不会释放锁,但是wait会释放锁 sleep方法不依赖于同步器synchronized,但是wait需要依赖synchronized关键字 sleep不需要被唤醒(休眠之后退出阻塞),但是wait需要(不指定时间需要被别人中断)HashMap的底层数据结构是怎么样的?JDK1.7及以前是数组加链表JDK1.8及以后是数组和链表以及红黑树JDK1.8什么时候链原创 2022-02-23 21:54:53 · 278 阅读 · 0 评论 -
【Android组件化】javaPoet的使用
基础知识回顾【Android组件化】一文教你玩转APT_我想月薪过万的博客-CSDN博客https://blog.csdn.net/qq_41885673/article/details/122818568?spm=1001.2014.3001.5501javaPoet使用教程square/javapoet: A Java API for generating .java source files. (github.com)https://github.com/square/javapoet.原创 2022-02-12 10:30:01 · 691 阅读 · 0 评论 -
【Android组件化】一文教你玩转APT
APT(Annotation Processing Tool)原创 2022-02-10 22:01:57 · 2718 阅读 · 0 评论 -
Gradle 7.0+ 设置aar路径失败问题
前提条件在 libs 下存在一个 aar 库文件方法一:通过可视化工具效果展示方法二:直接写代码两种写法原创 2021-12-13 21:33:02 · 1006 阅读 · 1 评论 -
java线程之终极决战篇
文章看到这里,相信大家对线程已经有了扎实的认识,下面还有一些琐碎的关于线程的知识点,我将分别为大家做介绍1.1 守护线程java语言中线程分为两大类: 一类是:用户线程一类是:守护线程(后台线程) 其中具有代表性的就是:垃圾回收线程(守护线程)。守护线程的特点一般守护线程是一个死循环,所有的用户线程只要结束,守护线程自动结束。注意:主线程main方法是一个用户线程。1.1.1守护线程代码示例...原创 2021-11-28 21:56:50 · 381 阅读 · 0 评论 -
java线程安全之死锁
死锁图解死锁代码演示package DeadLock;/** * 死锁代码要会写 * 一般面试官要求你会写。 * 只有会写的,才会在以后开发中注意这个事儿 * 因为死锁很难调试 */public class DeadLockDemo { public static void main(String[] args) { Object a1 = new Object(); Object a2 = new Object(); .原创 2021-11-24 19:40:43 · 416 阅读 · 0 评论 -
java中synchronized的三种写法详解
预备知识首先,我们得知道在java中存在三种变量:实例变量 ==》 存在于堆中 静态变量 ==》 存在于方法区中 局部变量 ==》 存在于栈中然后,我们得明白,合适会发生高并发不安全条件1:多线程并发。 条件2:有共享数据。 条件3:共享数据有修改的行为。具体不安全案例请参考 如下这篇文章:java线程安全问题详解_我想月薪过万的博客-CSDN博客https://blog.csdn.net/qq_41885673/article/details/121431714在上面这篇文章银原创 2021-11-23 22:53:19 · 2039 阅读 · 0 评论 -
java线程安全问题详解
什么时候数据在多线程并发的环境下会存在安全问题?三个条件:条件1:多线程并发。 条件2:有共享数据。 条件3:共享数据有修改的行为。满足以上3个条件之后,就会存在线程安全问题。怎么解决线程安全问题?线程排队执行。(不能并发)。用排队执行解决线程安全问题。这种机制被称为:线程同步机制。...原创 2021-11-21 21:04:49 · 677 阅读 · 0 评论 -
java线程调度模型
一、常见的线程调度模型有哪些?二、java中提供了那些方法是和线程调度有关的原创 2021-11-19 21:32:47 · 505 阅读 · 0 评论 -
java线程常用API总结
一、线程名字的修改package ThreadDemo;/** * 1、怎么获取当前线程对象? * 2、获取线程对象的名字 * 线程对象.getName(); * 3、修改线程对象的名字 * 线程对象.setName("线程名字"); * 4、当线程没有设置名字的时候,默认的名字有什么规律? * Thread-0 * Thread-1 * Thread-2 */public class ThreadTest05 { public sta原创 2021-11-19 21:06:50 · 806 阅读 · 1 评论 -
java实现线程的方式总结
方式一:编写一个类,直接继承 java.lang.Thread,重写run方法。package ThreadDemo;public class ThreadTest02 { public static void main(String[] args) { // 这里是 main 方法,这里的代码属于主线程,在主栈中运行 // 新建一个分支线程对象 MyThread myThread = new MyThread(); // 启原创 2021-11-17 20:20:53 · 540 阅读 · 0 评论 -
稀疏数组系列篇
基本介绍案例展示原理分析原创 2021-09-07 23:52:56 · 315 阅读 · 1 评论 -
AS 如何安装 ASM BYTECODE OUTLINE 插件
问题展示如果我们强行在 AS 的插件市场上搜索 ASM 由于网络的原因,我们是得不到结果的。如下图所示:解决方法第一步:先下载ASM BYTECODE OUTLINE插件下载链接下载下来 文件如下:第二步:安装ASM BYTECODE OUTLINE插件【Settings】–>【Plugins】点击右上角图标,选择【Install Plugn from Disk】选择刚下好的 asm-bo-0.3.5.zip 点击 【OK】 即可安装..原创 2021-09-06 18:55:55 · 1197 阅读 · 0 评论 -
解决 java “错误:编码GBK 的不可映射字符”
错误展示错误原因首先检查本机语言,中文(GBK)也就是说 javac 默认按照本机语言(GBK) 编译代码而我们的代码是 utf-8 编码,所以会报错解决方法:方法一:运行是指定编码格式javac -encoding UTF-8 xxx.java方法二:记事本打开java源文件,另存为选择ANSI编码注意事项GBK应该是属于ANSI之中的,在ANSI的国际通用集,GBK是专门来解决中文编码的,是双字节的,不论中英文都是双字节,而UTF-8是才.原创 2021-09-05 20:10:10 · 29799 阅读 · 2 评论 -
注解处理器APT在java中的实现
概念理解APT:英文全名(Annotation Processor Tool),即:注解处理器。它是javac的一个工具,这是Sun为了帮助注解的处理过程而提供的工具,apt被设计为操作Java源文件,而不是编译后的类。作用阶段示意图如下:具体作用在编译期能够获取注解与注解声明的类包括类中的所有成员信息,一般用于生成额外的辅助类。 语法检查实战代码第一步:定义注解package com.wustyq.demo01;import java.lang.annota...原创 2021-09-05 18:23:18 · 761 阅读 · 0 评论 -
教你如何玩转java反射系列
第一部分静态语言与动态语言动态语言:是一类在代码运行的时候可以改变其结构的语言。例如:object-c、C#静态语言:是一类在代码运行的时候不可以改变其结构的语言。例如:java、c、c++然而,有了反射之后,它让java变得灵活起来了,java成为了准动态语言。反射的基本概念简单点说:反射这门技术让java可以在代码运行期间操作内部属性及方法反射API尝鲜反射的作用反射的优缺点第二部分java内存分析类加载与ClassLoader的理..原创 2021-09-03 21:31:39 · 344 阅读 · 0 评论 -
java之socket编程(NIO多路复用器)
原理图展示原理分析 每个 SelectionKey 对应着 一个 channel ,channel通过注册获取一个对应的SelectionKey,SelectionKey.channel() 获取一个 channel。 selector.select() 是一个阻塞型函数,得有事件触发他的执行,他执行之后,可以通过 selector.selectedKeys(); 来获取 触发他执行的 事件对应的selectedKeys 集合 代码展示package NIO;...原创 2021-08-20 19:12:59 · 651 阅读 · 0 评论 -
java之socket编程(NIO)
效果展示原理分析NIO: 非阻塞型 IO自从 jdk 1.4 之后,增加了 nio 库,支持非阻塞型 IO 操作代码展示package NIO;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.ServerSocketChannel;import java.nio.channels.SocketChannel;import java.util.Arr原创 2021-08-20 17:43:20 · 760 阅读 · 0 评论 -
java之socket编程(BIO)
效果展示原理分析BIO: 即阻塞型 IO 操作因为我们的代码中有 阻塞操作的api -》 accept() 、read()代码展示package BIO;import java.io.FileOutputStream;import java.io.InputStream;import java.net.ServerSocket;import java.net.Socket;import java.util.Arrays;/** * ClassName: Socke原创 2021-08-20 14:48:46 · 332 阅读 · 0 评论 -
‘telnet‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。
问题展示原创 2021-08-19 23:36:30 · 680 阅读 · 0 评论 -
java基础之 IO 流(输入/出字符流)
字符基流FileReader/FileWriter代码示例package IOTest;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;/** * ClassName: FileReaderDemo <br/> * Description: <br/> * date: 2021/8/3 14:52<br/&g.原创 2021-08-03 22:33:38 · 500 阅读 · 2 评论 -
java基础之 IO 流(InputStream/OutputStream)
上图中有句话写错了,应该是 字节流的根类。文件输出/入字节流代码示例心得:读写文件流 关心 读的时候读多少,写的时候写多少,它没有限制一次只能读/写多少。 文件流的创建 到 文件流的关闭 为一个周期。package IOTest;import java.io.*;/** * ClassName: RandomAccessFileTets <br/> * Description: <br/> * date: 2021/8/2 19:47...原创 2021-08-02 23:48:11 · 322 阅读 · 0 评论