
java
文章平均质量分 69
cc_奋斗ing
这个作者很懒,什么都没留下…
展开
-
java类加载的情况
注意我们当在另一个类中引用其他类的final静态值的时候,编译器把其他类的final符号引用存储在自己类的常量池中了原创 2021-04-18 11:41:29 · 113 阅读 · 0 评论 -
java class类文件
根据 Java 虚拟机规范,类文件由单个 ClassFile 结构组成:ClassFile { u4 magic; //Class 文件的标志 u2 minor_version;//Class 的小版本号 u2 major_version;//Class 的大版本号 u2 constant_pool_count;//常量池的数量 cp_info consta转载 2021-04-17 16:43:36 · 118 阅读 · 0 评论 -
java volatile可见性解析
很长一段时间中对于volatile关键字都是一知半解的,由于工作中用的比较少,也没有对其深入了解,直到看了《深入理解java虚拟机》之后,才有进一步的了解。 volatile是java虚拟机提供的最轻量级的同步机制,只能作用于变来那个,具备两种特性:保证此变量对所有线程的可见性:可见性是指一旦一个线程修改了此变量的值,其他线程能立即得知。禁止指令的重排序(本文暂不涉及)由于volatile的可见性分析是基于java内存模型的,此处对java内存模型做个简单的概述。java内存模型主内存和..转载 2021-04-15 11:38:27 · 373 阅读 · 0 评论 -
Java 之 集合中的 modCount的作用
modCount:记录当前集合被修改的次数在所有的集合实现类中(Collection与Map中),都会有一个 modCount 的变量出现,它的作用就是记录当前集合被修改的次数。下面以ArrayList 类进行说明:添加方法:删除方法:可以看出,两个操作都会影响元素的个数。 当我们使用迭代器或 foreach 遍历时,如果你在 foreach 遍历时,自动调用迭代器的迭代方法,此时在遍历过程中调用了集合的add,remove方法时,modCount就会改变,而迭代器记录的modCount转载 2021-04-15 11:00:15 · 1252 阅读 · 0 评论 -
ArrayList底层实现原理
ArrayList简介ArrayList是我们开发中非常常用的数据存储容器之一,其底层是数组实现的,我们可以在集合中存储任意类型的数据,ArrayList是线程不安全的,非常适合用于对元素进行查找,效率非常高。源码分析创建了一个大小为0的数组,在后面会用到。声明了一个数组。ArrayList的无参构造方法,将前面声明创建的大小为0的数组赋给elementData数组。这是ArrayList的有参构造方法,传入一个int类型的变量,相当于我们在使用arrayList的时候指定list的大小转载 2021-04-15 10:57:49 · 1860 阅读 · 0 评论 -
java异常return
java 的异常处理机制,执行顺序;return在异常中的使用 ;自定义异常类的简单应用异常处理2种方法:1.抛 (throws)2.自己处理try/catch/finally1.抛出:向上一级抛出,异常实际没有被解决掉2.try/catch/finally(1)正常执行public class Test1 { public static void main(String[] args) { Test1 test1 = new Test1(); test转载 2021-04-13 15:55:39 · 645 阅读 · 0 评论 -
java接口和抽象类
之前Java接口中的方法默认都是public abstract,成员变量默认都是public static final,偶然发现接口中可以有default类型的方法,才知道java8中接口可以有自己的实现了。那么jdk1.8究竟对接口做了哪些修改呢?(1) 增加default方法。default方法作用范围也是public,只是有了具体实现的方法体。对已有的接口,如果想对接口增加一个新方法,那么需要对所有实现该接口的类进行修改。而有了default方法,可以解决该问题。(2) 新增static方法。st转载 2021-04-13 12:43:02 · 80 阅读 · 0 评论 -
java类的初始化顺序
package com.qcby;public class InitializeDemo { private static int k = 1; private static InitializeDemo t1 = new InitializeDemo("t1"); private static InitializeDemo t2 = new InitializeDemo("t2"); private static int i = print("i"); pri原创 2021-04-12 15:38:42 · 73 阅读 · 0 评论 -
java128陷阱
public static void main(String[] args){ Integer a=128; Integer b=128; System.out.print(a==b);//false a=127; b=127; System.out.print(a==b);//true}为什么对于一个Integer来说,两个Integer都为128的时候通过判断为false,127时的却是true呢?其实这一切都是因为Java中的装箱转载 2021-04-12 11:25:31 · 90 阅读 · 0 评论 -
观察者模式
设计者模式发布订阅模式,发布者发布信息,订阅者获取信息,当消息变化的时候,订阅了的就能收到信息,没订阅的就收不到信息。被观察者接口package com.jstao.observer;public interface Observerable { public void registerObserver(Observer o); public void removeObserver(Observer o); public void notifyObserve原创 2021-03-17 17:07:28 · 80 阅读 · 0 评论 -
JUC并发知识
文章目录lock和synchronized的区别Condition集合类的并发问题Callablelock和synchronized的区别synchronized 自动释放所,lock必须手动释放synchronized 如果获取不到锁就一直会等待下取,lock可以不用(trylock()方法)lock是可中断锁,而synchronized 不是可中断锁(tryLock(long timeout,TimeUnit unit)方法)synchronized 是可重入锁,lock也是可重入锁可原创 2021-03-12 09:20:43 · 114 阅读 · 0 评论 -
java多线程
多线程创建的四种方式继承Thread实现Runnable接口守护线程和主线程java线程分为两类第一类是守护线程,第二类是主线程守护线程依赖于主线程,当主线程结束后,守护线程也会消失。比如Java垃圾回收机线程依赖于主线程,垃圾回收机线程就是main函数的守护线程。线程的几种状态:新建:当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建的状态。就绪:处于新建状态的线程被start()后,将进入线程队列并等待CPU时间片,此时他已经具备了运行条件,只是没分配到C原创 2021-03-10 14:33:33 · 167 阅读 · 0 评论 -
ThreadLocal底层原理
ThreadLocal作用:提供线程内的局部变量,不同的线程之间不会相互干扰,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或组件之间一些公共变量传递的复杂性。package com.mupack;public class App{ private String content; public void setContent(String content) { this.content = content; } public Stri原创 2021-02-25 22:45:33 · 241 阅读 · 2 评论 -
SpringBoot
SpringBoot内嵌了tomcat,所以不用搭建tomcat服务器官方:提供了一个快速生成的网站!IDEA继承了这个网站。从官网创建从IDEA直接创建感受微结构pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"原创 2021-01-30 09:19:39 · 141 阅读 · 1 评论 -
SSM框架整合
建立数据库CREATE DATABASE ssmbuild;USE ssmbuild;CREATE TABLE `books`(`bookID` INT NOT NULL AUTO_INCREMENT COMMENT '书id',`bookName` VARCHAR(100) NOT NULL COMMENT '书名',`bookCounts` INT NOT NULL COMMENT '数量',`detail` VARCHAR(200) NOT NULL COMMENT '描述',KE.原创 2021-01-27 15:37:12 · 94 阅读 · 0 评论 -
SSM-SpringMVC
MVC架构Model(模型):数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或JavaBean组件(包含数据和行为),不过现在一般都分离开来:Value Object(数据Dao) 和 服务层(行为Service)。也就是模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务。View(视图):负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西。Controller(控制器):接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回的模型数原创 2021-01-26 15:52:46 · 96 阅读 · 2 评论 -
SSM-Spring(2)_AOP
AOP用Spring需要导入包<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.4</version> </dependency>方式一:使用Spring接口编写javapackage com.kuang.log;原创 2021-01-25 16:21:45 · 92 阅读 · 0 评论 -
SSM-Spring整合Mybatis
步驟导入相关jar包junitmybatismysql数据库spring相关的aop植入mybatis-spring[new]<!--导入依赖--> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifa原创 2021-01-25 16:20:45 · 89 阅读 · 0 评论 -
SSM-Spring(1)
SpringSpring是一个开源的免费的框架Spring是一个轻量级的,非入侵式的框架控制反转(IOC),面向切面编程(AOP)支持事务的处理,对框架整合的支持IOC理论UserDaoUserDaoImpUserSeviceUserServiceImp在之前,用户的需求可能会影响原来的代码。使用一个set。public void setUserDao(UserDao userDao){ this.userDao = userDao;}之前是主动创建对象,控制原创 2021-01-24 15:01:16 · 152 阅读 · 0 评论 -
SSM-Mybatis(4)
缓存什么是缓存[Cache]存在内存中的临时数据将用户经常查询的数据放在缓存(内存)中,用户去查询数据的时候就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题。为什么使用缓存减少和数据库的数据交换次数,较少系统开销,提高系统效率什么样的数据库能使用缓存经常查询并且不经常改变的数据Mybatis缓存MyBatis 内置了一个强大的事务性查询缓存机制,它可以非常方便地配置和定制。默认情况下,只启用了本地的会话缓存,它仅原创 2021-01-23 14:59:23 · 143 阅读 · 0 评论 -
SSM-Mybatis(3)
复杂的sql查询环境搭建CREATE TABLE `teacher` ( `id` INT(10) NOT NULL, `name` VARCHAR(30) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=INNODB DEFAULT CHARSET=utf8INSERT INTO teacher(id, name) VALUES (1,'秦老师'); CREATE TABLE `student` ( `id` INT(10) NOT NULL原创 2021-01-23 10:17:27 · 178 阅读 · 0 评论 -
SSM-Mybatis(2)
日志如果一个数据库操作,出现了异常,我们需要排错,日志就是最好的助手曾经:sout,debug现在:日志工厂掌握STDOUT_LOGGINGLOG4Jlog4j什么是Log4j?我们可以控制日志信息输送的目的地是控制台我们也可以控制每一条日志的输出格式通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。分页减少数据量selsect * from user limit startIndex,pageS原创 2021-01-22 15:41:42 · 104 阅读 · 0 评论 -
SSM-Mybatis(1)
Mybatis什么是MybatisMyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。第一个Mybatis程序搭建环境数据库CREATE DATABASE mybatis;uesr mybatis原创 2021-01-22 10:48:00 · 106 阅读 · 0 评论 -
servlet-Cookie与Session
CookieCookie是服务器通知客户端保存键值对儿的一种技术客户端有了Cookie后,每次请求都发送给服务器每个 Cookie的大小都不超过4kb注意Cookie值不包含空格,方括号,圆括号,等号,逗号,双引号,斜杠,问号,at符号,冒号和分号,空值在所有浏览器上的行为也不一样。需要使用BASE64编码。Cookie生命控制setMaxAge()正数,表示在指定的秒数后过期负数,表示浏览器一关闭,Cookie就会被删除零 ,表示马上删除CookiePath属性Cooki原创 2021-01-20 14:27:33 · 302 阅读 · 0 评论 -
servlet-Filter过滤器
Filter过滤器Filter过滤器是javaweb的三大组件之一,三大组件分别是:Servlet程序,Listener监听器,Filter过滤器Filter过滤器它是javaEE的规范,也就是接口Filter过滤器它的作用是拦截请求,过滤响应拦截请求常见的应用场景:权限检查日记操作事务管理等等原理package at.guitu.com.FIlter;import javax.servlet.FilterChain;import javax.servlet.Filte原创 2021-01-19 22:52:56 · 133 阅读 · 0 评论 -
servlet-EL表达式与JSTL标签
EL表达式EL表达式的作用:EL表达式主要是代替jsp页面中的表达式脚本在jsp页面中进行数据输出。因为EL表达式在输出数据的时候,要比jsp表达式脚本要简洁的多格式$(表达式)<%@ page import="java.util.Map" %><%@ page import="java.util.HashMap" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><h原创 2021-01-17 14:59:46 · 231 阅读 · 0 评论 -
Servlet-JSP入门
JSP作用:主要作用是代替Servlet程序回传html页面的数据。因为Servlet程序回传html页面数据是一件非常繁琐的事情,开发成本和维护成本都很高。一般的Servlet回传页面如下protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html;charset=U原创 2021-01-16 16:44:45 · 213 阅读 · 0 评论 -
Servlet入门
Servlet什么是servlet?Servlet 是JavaEE规范之一,规范就是接口Servlet是javaWeb三大组件之一,三大组件分别是:Servlet Filter过滤器 Listener监听器Servlet是运行在服务器上的一个java小程序,他可以接受客户端发送过来的请求手动实现Servlet编写一个类实现Servlet接口实现service方法,处理请求,并相应数据到web.xmlzhong peizhi servlet程序的访问地址...原创 2021-01-16 11:24:02 · 122 阅读 · 3 评论 -
XML简单入门
XML作用用来保存数据,而且这些数据具有自我描述性它还可以作为项目或模块的配置文件还可以作为网络传输数据的格式(JSON现在为主)语法4. 文档声明5. 元素(标签)6. xml属性7. xmll注释8. 文本区域<?xml version="1.0" encoding="utf-8" ?><!--文档声明--><books> <book sn = "SN12345648987"> <name>原创 2021-01-15 11:03:40 · 147 阅读 · 0 评论 -
JDBC_5 DBUtils
DBUtilscommons-dbutils是Apache组织提供的一个开源JDBC工具类库,封装了针对于数据库的增删改查操作APIQueryRunnerResulSetHandlerDbutils插入举例Connection conn = null; try { QueryRunner runner = new QueryRunner(); conn = JBBCUtils.getConnections3();原创 2021-01-13 12:10:00 · 121 阅读 · 0 评论 -
JDBC_4数据库连接池
数据库连接池JDBC数据库连接池的必要性在使用开发基于数据库的web程序时,传统的模式基本是按照以下步骤:在主程序(如servlet beans)中建立数据库连接进行sql操作断开数据库连接这种模式开发,存在的问题:普通的JDBC数据库连接使用DriverManager来获取,每次向数据库建立连接的时候都要将Connection加载到内存中,再验证用户名和密码(大概花费0.05s-1s),需要数据库连接的时候,就向数据库要求一个,执行完成后再断开。这样的方式将会消耗大量的时间。数据库的原创 2021-01-12 22:22:39 · 276 阅读 · 0 评论 -
JDBC_3 数据库事物
数据库事务数据一旦提交,就不可回滚那些操作会导致数据的自动提交?DDL操作一旦执行,都会自动提交-. set autocommit = false不起作用DML默认情况下,一旦执行就会自动提交-. 可以设置set autocommit = false关闭连接的时候会自动提交 Connection connection = DriverManager.getConnection(url, user, password); connection.setAutoCommit原创 2021-01-12 15:11:33 · 101 阅读 · 0 评论 -
JDBC_2Blob数据类型和批量操作
JDBC Blob数据类型PreparedStatement操作Blob类型数据Blob是一个二进制大型对象Statement不能操作Blob数据类型,以为Blob数据类型是无法使用字符串拼接的,PreparedStatement可以操作Blob数据类型插入Blob //插入Blob String sql = "insert into customers(name,email,birth,photo) values(?,?,?,?)"; java.原创 2021-01-12 11:26:23 · 173 阅读 · 0 评论 -
JDK8新特性
JDK8新特性lambda表达式要求:接口必须是函数式接口,一个接口如果只有一个抽象方法,那他就是函数式接口,我们可以在一个接口上使用_Functionallnterface_注解package com.atguigu.java;import java.util.Comparator;public class LambaTest { public static void main(String[] args) { Runnable r1 = new Runnable()原创 2021-01-10 14:50:05 · 119 阅读 · 0 评论 -
maven使用入门
maven面临的问题一个项目就是一个工程。如果项目非常大,最好是每一个模块对应一个工程。借助maven可以将一个项目拆分成多个工程项目中需要的jar必须要手动"复制","粘贴"到WEB-INF/lib目录下,带来的问题是:同样的jar包文件重复出现在不同的项目工程中,浪费空间。maven可以将jar仅仅保存在"仓库"中,有需要使用的工程"引用"这个文件接口,并不需要真的把jar包复制过来jar包需要别人替我们准备好,或到官网下载。不同技术的官网提供jar包下载的形式是五花八门的,有些技术的官网就是原创 2021-01-09 16:05:27 · 102 阅读 · 0 评论 -
动态代理
动态代理设计原理:使用一个代理将对象包装起来,然后用该代理对象取代原始对象。任何对原始对象的调用都要通过代理,代理对象决定是否以及何时调用转到原始对象上。静态代理package com.atguigu.java;interface ClothFactory{ void produceCloth();}class ProxyClothFactory implements ClothFactory{ private ClothFactory factory; public原创 2021-01-07 18:37:48 · 2578 阅读 · 1 评论 -
反射入门
反射package com.atguigu.java;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;public class Person { private String name; public int age; public Person() { } public void setName(S原创 2021-01-07 15:40:45 · 102 阅读 · 0 评论 -
IO与文件
IO与文件FileFile类的一个对象,代表一个文件或一个文件目录(俗称文件夹)package com.atguigu.java;import java.io.File;import java.io.IOException;public class FileTest { public static void main(String[] args) throws IOException { File file1 = new File("hello.txt");//相对路原创 2021-01-02 21:15:37 · 113 阅读 · 0 评论 -
泛型
泛型jdk5.0新增特性jdk7新特性 类型推断 Map<String,Integer>map = new HashMap<>();泛型在内部其实只是做了一个强转。内部所有泛型类型都是Object,只是在返回的时候做了一个强转。如下:原创 2020-12-27 16:40:26 · 100 阅读 · 0 评论 -
java集合
集合Collection接口: List:元素有序,可重复的集合 Set:元素无序,不可重复的集合Map接口:双列数据,保存具有映射关系"Key-value"对ArrayList: 作为List接口的主要实现类:线程不安全,效率高,底层使用Object[]LinkedList:对于频繁的插入删除操作比较的方便,底层使用双向链表存储Vector:作为List接口的古老实现类:线程安全。底层也是用Object[]ArrayList jdk1.7中并初始化为长度为10的数组,jdk1.8原创 2020-12-25 21:41:50 · 99 阅读 · 0 评论