Java学习
文章平均质量分 76
记录Java学习过程中的笔记和心得
逍遥自在”
这个作者很懒,什么都没留下…
展开
-
如何选择Java遍历集合的方式
文章目录foreach的使用注意点:foreach的使用注意点:foreach遍历可以修改元素中的值(修改对象中的属性),但如果修改引用的指向是无效的,因为foreach相当于是拷贝引用,然后进行遍历。遍历过程中不能添加和删除元素,否则会报ConcurrentModificationException异常。 @Test void test5(){ // foreach遍历可以修改元素中的值,但如果修改引用的指向是无效的,因为foreach相当于是拷贝引用,然后进行遍原创 2021-08-10 17:38:00 · 187 阅读 · 0 评论 -
两万五千字的ConcurrentHashMap底层原理和源码分析
文章目录第一部分:JDK1.7 ConcurrentHashMap源码分析一、Unsafe介绍1、Unsafe简介2、Unsafe Api3、代码演示3.1、图解说明二、jdk1.7容器初始化1、源码解析2、图解3、Segment是什么?4、HashEntry是什么?三、jdk1.7添加安全1、源码分析1.1、ConcurrentHashMap的put方法1.2、ConcurrentHashMap的ensureSegment方法1.3、Segment的put方法1.4、Segment的scanAndLock原创 2021-05-10 16:15:59 · 183 阅读 · 1 评论 -
Java JUC高并发编程
文章目录JUC的简介进程和线程的概念JUC的简介 JUC是java.util.concurrent的简称;是并发编程中使用的工具类。进程和线程的概念进程:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。线程:通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义。线程可以利用进程所拥有的资源,在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,原创 2021-04-14 15:20:05 · 200 阅读 · 0 评论 -
Java 函数式接口和Stream流
文章目录函数式接口Stream流函数式接口函数式接口在JDK java.util.function包中四种常用接口:代码演示:消费型接口:public class ConsumerDemo { public static void main(String[] args) { //消费型接口 //匿名内部类的写法 Consumer<String> consumer = new Consumer<String>()原创 2021-04-14 15:18:17 · 184 阅读 · 0 评论 -
JVM总结
文章目录JVM体系结构概览类加载器ClassLoader类加载器的分类:双亲委派机制:JVM体系结构概览类加载器ClassLoader 负责加载class文件,class文件在文件开头有特定的文件标示(用于识别是否是class文件),将class文件字节码内容加载到内存中,并将这些内容转换成方法区中的运行时数据结构并且ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定。(简单说方法区就是存放模板的地方)类加载器的分类:类加原创 2021-03-13 16:51:04 · 288 阅读 · 0 评论 -
Lambda表达式的六种用法
文章目录为什么使用Lambda表达式Lambda表达式的本质使用Lambda表达式的条件语法格式代码举例总结为什么使用Lambda表达式 Lambda是–个匿名函数,我们可以把Lambda表达式理解为是–段可以传递的代码(将代码像数据一样进行传递) 。使用它可以写出更简洁、更灵活的代码。作为-种更紧凑的代码风格,使Java的语 言表达能力得到了提升。Lambda表达式的本质 作为接口的实例使用Lambda表达式的条件JDK版本必须1.8以上接口只能有一个方法语法格式(0原创 2020-07-29 20:42:16 · 3752 阅读 · 0 评论 -
使用资源文件封装JDBCUtil
JDBCutil:import java.io.IOException;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.Properties;public class JDBCutil { static Properties原创 2020-07-20 13:00:54 · 462 阅读 · 0 评论 -
Java JDBC的使用
JDBC的介绍:JDBC(Java Database Connection)为java开发者使用数据库提供了统一的编程接口,它由一组java类和接口组成。是java程序与数据库系统通信的标准API。JDBC API使得开发人员可以使用纯java的方式来连接数据库,并执行操作。sun公司由于不知道各个主流商用数据库的程序代码,因此无法自己写代码连接各个数据库,因此, sun公司决定,自己提供一套api ,凡是数据库想与Java进行连接的,数据库厂商自己必须实现JDBC这套接口。而数据库厂商的JDBC实现原创 2020-07-19 21:33:36 · 558 阅读 · 0 评论 -
用Java进行网络爬虫
下面以获取指定网页源码中的所有超链接为例:package test;import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.MalformedURLException;import java.net.URL;import java.nio.charset.Charset;import java.util.ArrayList;import java.util.List;import jav原创 2020-07-16 18:00:58 · 579 阅读 · 0 评论 -
在Java中使用正则表达式
JDK提供的类说明相关类位于: java.util.regex包下面类Pattern :正则表达式的编译表示形式。Pattern p = Pattern.compile(r,int);, //建立正则表达式,并启用相应模式类Matcher :通过解释Pattern对character sequence执行匹配操作的引擎Matcher m = p.matcher(str); //匹配str字符串需要注意的是在Java中的正则表达式需要用\\代替\代码测试impo原创 2020-07-16 17:55:51 · 549 阅读 · 0 评论 -
正则表达式基础入门
文章目录正则表达式简介普通字符简单的转义字符标准字符集合自定义字符集合量词( Quantifier )字符边界正则表达式的匹配模式选择符合分组反向引用( \nnn )预搜索(零宽断言)常用正则表达式列表正则表达式简介为什么需要正则表达式?文本的复杂处理正则表达式的优势和用途?一种强大而灵活的文本处理工具;大部分编程语言、数据库、文本编辑器、开发环境都支持正则表达式。正则表达式定义:正如他的名字-样是描述了一个规则,通过这个规则可以匹配一类字符串。学习正则表达式很大程度上就是学原创 2020-07-16 11:34:12 · 668 阅读 · 0 评论 -
Java 类加载器学习
文章目录类加载器的作用类加载器的层次结构引导类加载器( bootstrap class loader )扩展类加载器( extensions class loader )应用程序类加载器( application class loader )自定义类加载器java.class.ClassL oader类介绍类加载器的代理模式自定义类加载器自定义类加载器的流程:线程上下文类加载器:TOMCAT服务器的类加载机制类加载器的作用将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区中的运行时原创 2020-07-11 17:37:35 · 505 阅读 · 0 评论 -
Java 类加载的过程 类的主动引用和被动引用
类加载的过程 JVM把class文件加载到内存,并对数据进行校验、解析和初始化,最终形成JVM可以直接使用的Java类型的过程。字节码的本质上可以理解为一个字节数组。大体上类的加载过程可以分为三步:加载,链接,初始化。1. 加载:将class文件字节码内容加截到内存中.并将这些静态数据转换成方法区中的运行时数据结构.在堆中生成一个代表这个类的java.lang.Class对象,作为方法区类数据的访问入口,这个过程需要类加就器参与。2. 链接: 将Java类的二进制代码合并到JVM的运行状态原创 2020-07-11 15:23:28 · 857 阅读 · 0 评论 -
Java字节码操作(Javassist的使用)
字节码操作介绍JAVA动态性的两种常见实现方式:字节码操作反射运行时操作字节码可以让我们实现如下功能:动态生成新的类动态改变某个类的结构(添加/删除/修改新的属性/方法)优势: 比反射开销小,性能高(JAVAasist性能高于反射,低于ASM)常见的字节码操作类库1. BCELByte Code Engineering Library (BCEL) ,这是Apache Software Foundation的Jakarta项目的一部分。BCEL是Java cla原创 2020-07-11 10:58:00 · 797 阅读 · 0 评论 -
Java使用脚本引擎执行JavaScript代码
JAVA脚本弓|擎是从JDK6.0之后添加的新功能。脚本引擎介绍:使得Java应用程序可以通过一套固定的接口与各种脚本引擎交互,从而达到在Java平台上调用各种脚本语言的目的。Java脚本API是连通Java平台和脚本语言的桥梁。可以把一些复杂异变的业务逻辑交给脚本语言处理,这又大大提高了开发效率。获得脚本弓|擎对象ScriptEngineManager sem = new ScriptEngineManager();ScriptEngine engine = sem.getEngine原创 2020-07-10 15:55:52 · 836 阅读 · 0 评论 -
Java 动态编译基础学习
文章目录动态编译的应用场景:动态编译的两种做法:通过JavaCompiler动态编译动态运行编译好的类代码演示:注:JAVA 6.0开始引入了动态编译机制。动态编译的应用场景:可以做一个浏览器端编写java代码,上传服务器编译和运行的在线评测系统。服务器动态加载某些类文件进行编译动态编译的两种做法:通过Runtime调用javac ,启动新的进程去操作(1.6之前的做法)Runtime run = Runtime.getRuntime0;Process process = run原创 2020-07-09 20:40:41 · 464 阅读 · 0 评论 -
Java注解(Annotation)学习
文章目录什么是注解Annotation的作用Annotation的格式Annotation在哪里使用内置注解@Override@Deprecated@SuppressWarnings测试代码自定义注解要点:元注解@Target@Retention代码实现:什么是注解Annotation是从JDK5.0开始弓|入的新技术。Annotation的作用不是程序本身,可以对程序作出解释。(这一点, 跟注释没什么区别)可以被其他程序(此如:编译器等)读取。(注解信息处理流程,是注解和注释的重大区别。如果原创 2020-06-11 17:28:48 · 728 阅读 · 2 评论 -
java解析XML(sax解析)
XML是什么: XML:X (extensible: 可扩展的) M (markup 标记/标签) L (language 语言);可扩展的标记语言!XML的作用:存:作为存储文件,例如:单机游戏中的等级,装备等等;因为有时使用数据库太大,而普通文件太慢,所以采用xml文件保存软件中的数据!传:代替数据包进行网络上传递数据。作为配置文件。XML的特点:平台无关性(wind...原创 2020-05-22 17:44:18 · 1254 阅读 · 0 评论 -
java实现窗口飞机冒险小游戏(基础版)
主窗口类:package Game;import java.awt.Color;import java.awt.Font;import java.awt.Frame;import java.awt.Graphics;import java.awt.Image;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.awt.event.WindowAdapter;import java.awt原创 2020-05-08 18:31:48 · 1147 阅读 · 0 评论 -
java 反射机制基础(框架设计的灵魂)
反射:框架设计的灵魂反射:将类的各个组成部分封装为其他对象,这就是反射机制。了解反射先需要了解java代码的历经阶段和Class类。java代码的经历阶段和Class类: java代码经过javac命令会生成class文件,当需要生成对象或者加载类时会把class文件加载进内存(通过类加载器实现);在内存中将对应的class文件生成Class对象,一个类只有一个class对象。Class...原创 2020-04-30 11:03:18 · 6027 阅读 · 0 评论 -
Java 容器类的总结和实现原理
Java中的容器有三大类:Set,List,Map;它们之间的关系如下图:LIst: 继承于Collection,是抽象类,主要有两个子类ArraList和LinkList。特点:元素有序,可重复。ArrayList:底层是采用数组实现。查找快,增删慢。线程不安全LinkList:底层采用链表实现。查找慢,增删快。线程不安全Vector:也是采用数组实...原创 2020-03-29 11:41:31 · 5524 阅读 · 0 评论 -
Java内存分析(栈、堆、方法区的联系和特点)
Java虚拟机的内存可以分为三个区域:栈stack、堆heap、方法区method area。栈的特点如下:栈描述的是方法执行的内存模型。每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等)JVM为每一个线程创建一个栈,用于存放该线程执行方法的信息(实际参数、局部变量等)。栈的存储特性是“先进后出,后进先出”。栈是有系统自动分配、速度快!栈是一个连续的内存空间。堆的特...原创 2020-03-20 12:54:35 · 1379 阅读 · 1 评论 -
Java字符串,int型,char型之间的相加运算
Java字符串,int型,char型之间的相加运算字符串和int型之间相加,int型会转换为字符串类型;例如:System.out.println("asd" + 2);输出结果得到:asd2;char型和int型之间相加,char型会转换为int类型;例如:System.out.println('a' + 1);输出结果得到:97char temp1 = '1';char...原创 2019-08-21 10:56:42 · 17201 阅读 · 1 评论 -
创建对象和加载类时的执行顺序问题
class Person{ { System.out.println("父类代码块"); } int m=f(); int f() {System.out.println("父类非静态变量"); return 1; } static int n=g(); static { System.out.println("父类静态代码块"); } static i...原创 2019-12-30 10:04:29 · 1074 阅读 · 0 评论