Java核心技术
文章平均质量分 80
从Java基础到mysql初步
绿仔牛奶_
沉淀
展开
-
代理模式&动态代理
代理模式是开发中常见的一种设计模式,使用代理模式可以很好的对程序进行横向扩展。代理,顾名思义就是一个真实对象会存在一个代理对象,并且并且还可以在代理对象中进行额外操作的扩展。代理模式的特征是拥有接口、代理类、被代理类。并且代理类与被代理类同时实现该接口。代理类与被代理类之间通常存在一定关联,设计时会在代理类中注册一个被代理类的对象用于调用代理类的方法。这也印证了代理对象依然是执行的真实对象的方法代理模式又分为静态代理和动态代理。原创 2023-02-13 17:54:12 · 360 阅读 · 0 评论 -
工厂模式详解
工厂模式顾名思义就是生产实例的工厂,使用工厂模式不会在程序中使用new关键字创建实例。而是将创建对象的细节隐藏,对外提供统一的方法,外部通过该方法获取实例。以此降低调用者与程序之间的耦合性,更加灵活工厂模式可以分为三类。原创 2023-02-13 11:24:13 · 405 阅读 · 0 评论 -
单例模式&破坏单例模式
百度百科: 单例模式,属于的一种常用的软件设计模式。通过单例模式的方法创建的类在当前进程中只有一个实例(根据需要,也有可能一个线程中属于单例,如:仅线程上下文内使用同一个实例)单例模式最早定义出现于《设计模式》(爱迪生威斯理 1994):保证一个类仅有一个实例,并提供一个它的全局访问点Java中单例模式定义:一个类仅有一个实例,并自行实例化向整个系统提供。原创 2023-01-26 21:56:05 · 838 阅读 · 0 评论 -
current并发包
并发包、ConcurrentHashMap、CountDownLatch、CyclicBarrier、Semaphore、Exchanger、典型并发包详解原创 2023-01-14 17:14:38 · 715 阅读 · 0 评论 -
线程安全☞有序性
上述双重检验锁,在第一次校验instance是否为null时如果不为null,则不用进行后续的初始化的下面的加锁操作,大幅的提高了synchronized的性能。我们假设A和B两条线程同时创建对象,那么上述的A线程创建instance时为其分配内存空间,正确来讲应该先对instance进行初始化然后将内存地址交给instance,但是由于重排序,却在初始化之前提交了内存地址。在开发中,我们通常按照从上到下的顺序编写程序指令,并且希望cpu和编译器按照我们预先编写的顺序去执。原创 2023-01-13 23:26:07 · 519 阅读 · 0 评论 -
线程安全☞原子性
原子操作、线程安全三大特性、原子性、原子性问题解决、原子类操作、AtomicInteger、CAS机制CAS算法详解原创 2023-01-09 01:42:12 · 609 阅读 · 0 评论 -
哈希问题详解
哈希表、哈希冲突问题、哈希冲突的解决方法、为什么重写equals一定要重写hashcode方法、哈希算法的实现机理原创 2023-01-01 21:42:53 · 416 阅读 · 1 评论 -
ArrayList扩容机制&源码分析
ArrayList是一个底层基于数组实现的集合容器。当我们在创建ArrayList对象时,默认数组长度为10,当然也可以在创建时指定长度。之后在程序执行过程中,不断地向ArrayList中添加数据。当数据存储达到底层数组最大容量时则会触发扩容机制。原创 2022-12-30 00:54:46 · 458 阅读 · 0 评论 -
Java日期类汇总
Integer在Java中是int的包装类型,4字节也就是32位,所以2147483647也是Integer能表示的最大范围, 一年的总秒数是31,536,000那么计算机最多也就表示到2147483647秒,大概是68.1年。包括Java在内的绝大多数编程语言均起源于UNIX系统,而作为最早出现的操作系统考虑到计算机产生的年代和应用的年限(1968年产生),所以综合采用了1970年为基准点 作为UNIX系统的纪元时间,Java自然也遵循了这一约束。Duration:用于计算两个。原创 2022-11-02 19:01:57 · 960 阅读 · 0 评论 -
线程安全☞可见性
程序分析:这段程序中,线程类给定flag为false,同时又在子线程中修改flag为true,那么此时主线程访问到的flag有可能是子线程修改之前的false也有可能是修改之后的true。volatile修饰的变量被多个线程访问时,一旦某一条线程修改了变量的值就会导致该变量的原值失效,此时所有访问该变量的线程都会重新去主内存中获取新值。通俗来讲,并发编程的可见性就是在多线程操作同一共享变量时,修改变量后的值不能实时更新到其他线程的工作空间,就会导致其他线程读取到的值是不准确的。原创 2022-10-19 15:13:55 · 265 阅读 · 0 评论 -
死锁问题&实例
【代码】死锁问题&实例。原创 2022-10-12 13:24:06 · 364 阅读 · 0 评论 -
线程池详解
创建线程池,我们已经指定了核心线程为3,其他在为指定的条件下均为默认情况,此时我们添加三个任务均会创建新县城执行,但是添加第四个任务时就不会再创建新的线程,但是具体是由哪个线程执行第四个任务具体还要看线程调度的安排。execute():用于提交不需要返回值的任务—>例如Runnable任务 因此并不能判断我们的线程池是否执行成功。submit()会得到线程池返回的一个Future对象,可以直接调用get()方法来获取线程任务返回值。我们首先来看一下整个Executors创建线程池的体系。原创 2022-10-11 17:16:57 · 189 阅读 · 0 评论 -
Lambda&正则表达式
Lambda表达式详解,正则表达式简单应用原创 2022-09-28 13:59:27 · 822 阅读 · 0 评论 -
线程安全&线程控制
可能会出现线程安全问题理解:由于多个线程在抢占CPU资源是具有的,而每个线程的执行都具有。也就是不会执行一部分之后CPU被抢走,而抢回来之后又重新执行()这就容易造成线程的安全问题线程安全问题的本质就是要账户类Account取钱线程类Draw测试类Test。原创 2022-09-21 10:24:00 · 1068 阅读 · 0 评论 -
补充方法、变量、包
在JDK1.5之后,如果我们定义一个方法时,此时某个形参的类型可以确定,但是形参的个数不确定,那么我们可以使用可变参数。【修饰符】返回值类型方法名(【非可变参数部分的形参列表,】参数类型...形参名){}要求(1)一个方法最多只能有一个可变参数(2)如果一个方法包含可变参数,那么可变参数必须是形参列表的最后一个【修饰符】返回值类型方法名(【非可变参数部分的形参列表,】参数类型[]形参名){}......原创 2022-07-19 19:45:18 · 102 阅读 · 0 评论 -
关于二维数组
二维数组也可以看成一个二维表,行*列组成的二维表,只不过这个二维表,每一行的列数还可能不同。但是每一个单元格中的元素的数据类型是一致的,例如都是int,都是String等。二维数组本质上就是元素为一维数组的一个数组。二维数组的标记[][]...原创 2022-07-19 19:20:19 · 672 阅读 · 0 评论 -
Random和Math.random()
/产生[min,max]之间的随机数--->str.nextInt(max-min+1)+minpublicstaticvoidmain(String[]args){i原创 2022-07-16 15:10:27 · 391 阅读 · 0 评论 -
this和super用法
如果一个类中声明了n个构造器,则最多有n-1个构造器中使用了"this(【实参列表】)",否则会发生递归调用死循环。注意super和this都不能出现在静态方法和静态代码块中,因为super和this都是存在与。super()和this()都必须是在构造方法的第一行,所以不能同时出现。在子类中访问父类的成员变量,特别是当子类的成员变量与父类的成员变量重名时。在子类中调用父类的成员方法,特别是当子类重写了父类的成员方法时。(3)this()或this(实参列表)(2)this.成员方法。...原创 2022-07-21 09:10:24 · 1958 阅读 · 0 评论 -
Java多态性
当左边的变量的类型(父类) > 右边对象/变量的类型(子类),我们就称为向上转型此时,编译时按照左边变量**(父类)的类型处理,就只能调用父类中有的变量和方法**,不能调用子类特有的变量和方法了但是,运行时,仍然是对象本身的类型此时,一定是安全的,而且也是自动完成的定义例如:编译时类型与运行时类型不一致问题编译时,看“父类”,只能调用父类声明的方法,不能调用子类扩展的方法;运行时,看“子类”,一定是执行子类重写的方法体;多态实例代码如下:定义父类:定义子类:定义测试类:多态的应用原创 2022-07-21 23:24:17 · 129 阅读 · 0 评论 -
Java抽象类&接口
接口的定义,它与定义类方式相似,但是使用interface关键字。它也会被编译成.class文件,但一定要明确它并不是类,而是另外一种引用数据类型。引用数据类型数组,类,接口。原创 2022-07-23 19:17:23 · 705 阅读 · 0 评论 -
Java数组
一组相同类型数据的集合称为数组,数组中的每个数据成为元素内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。只要计算机在运行中,CPU就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来。我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的,必须放进内存中才能运行,运行完毕后会清空内存。Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。因为第一个元素距离数组首地址间隔0个单元。方法栈。...原创 2022-07-15 11:15:13 · 367 阅读 · 0 评论 -
Java内部类
当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整的结构又只为外部事物提供服务,不在其他地方单独使用,那么整个内部的完整结构最好使用内部类。那么我们完全可以使用匿名内部类的方式来实现,避免给类命名的问题。在开发过程中,需要用到一个抽象类的子类的对象或一个接口的实现类的对象,而且只创建一个对象,而且逻辑代码也不复杂。可以继承自己的想要继承的父类,实现自己想要实现的父接口们,和外部类的父类和父接口无关。在外部类的外面必须通过外部类的对象才能创建非静态内部类的对象。...原创 2022-07-24 11:35:09 · 200 阅读 · 0 评论 -
Java的异常详解及处理机制
我们说了Java中不同的异常类,分别表示着某一种具体的异常情况,那么在开发中总是有些异常情况是Java开发人员没有定义好的,此时我们根据自己业务的异常情况来定义异常类。例如年龄负数问题,考试成绩负数问题等等。那么能不能自己定义异常呢?可以自定义一个编译期异常自定义类并继承于。自定义一个运行时期的异常类自定义类并继承于。要求我们模拟注册操作,如果用户名已存在,则抛出异常并提示铁子,该用户名已经被注册。模拟登陆操作,使用数组模拟数据库中存储的数据,并提供当前注册账号是否存在方法用于判断。。...原创 2022-07-28 23:15:36 · 1217 阅读 · 0 评论 -
Java继承特性
我们说父类的所有方法子类都会继承,但是当某个方法被继承到子类之后,子类觉得父类原来的实现不适合于子类,该怎么办呢?子类的重写方法的返回值类型要比父类被重写的方法返回值类型要小或者相同(子类与父类范围)(小于其实就是是它的子类,例如Student...原创 2022-07-20 23:23:51 · 2728 阅读 · 0 评论 -
String&StringBuilder&StringBuffer
4、String类中这个char[]values数组也是final修饰的,意味着这个数组不可变,然后它是private修饰,外部不能直接操作它,String类型提供的所有的方法都是用新对象来表示修改后内容的,所以保证了String对象的不可变。(15)Stringsubstring(intbeginIndex,intendIndex)返回一个新字符串,它是此字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串。...原创 2022-07-31 22:23:44 · 279 阅读 · 0 评论 -
枚举&包装类
Java提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,然而当要使用只针对对象设计的API或新特性(例如泛型),那么基本数据类型的数据就需要用包装类来包装。转为基本数据类型,一般是因为需要运算,Java中的大多数运算符是为基本数据类型设计的。枚举类型本质上也是一种类,只不过是这个类的对象是固定的几个,而不能随意让用户创建。(2)声明两个属性value(月份值,例如JANUARY的value为1),2、在测试类中,从键盘输入1个1-12的月份值,获取对应的月份对象,并打印对象。......原创 2022-07-31 01:02:44 · 173 阅读 · 0 评论 -
Java基础
我们不能每次在命令行编译和运行Java程序时都去JDK目录下找到javac.exe和Java.exe工具,配置环境变量可以让我们在任意目录下都可以使用JDK的bin目录下的工具。(1)当把存储范围大的值(常量值、变量的值、表达式计算的结果值)赋值给了存储范围小的变量时,需要强制类型转换,提示有风险,可能会损失精度或溢出。(1)当把存储范围小的值(常量值、变量的值、表达式计算的结果值)赋值给了存储范围大的变量时,(2)当存储范围小的数据类型与存储范围大的数据类型一起混合运算时,会按照其中最大的类型运算。...原创 2022-07-14 23:28:54 · 153 阅读 · 0 评论 -
Java封装性&构造器详解
针对访问权限,Java提供了四种访问控制权限关键字:原创 2022-07-09 22:06:13 · 434 阅读 · 0 评论 -
Java面向对象概述
面向对象&面向过程面向对象则重点在对象:万物皆对象这句话非常正确。任何一个对象都有自身的特征属性、行为动作等两者的主要区别其实就在于关注的核心不同将上述举例换成面向对象的思想:对于完整项目和复杂案例而言,需要在系统的整体设计上采用面向对象的思想,但具体到某一微观操作仍需要利用面向过程的思想去处理面向对象三大特性封装:继承多态首先来理解类和对象类是抽象的,但是对象是真是存在的对象是面向对象思想的核心,但在创建对象之前首先要创建类创建对象:创建并实例化对象注意:在一个项目中通常原创 2022-07-08 23:10:58 · 261 阅读 · 0 评论 -
线程创建及生命周期
利用继承Thread线程类创建线程,利用实现Runnable接口创建线程,利用实现Callable接口和创建FutureTask创建线程,线程类thread的常用api以及生命周期详解原创 2022-09-14 20:21:20 · 438 阅读 · 0 评论 -
IO流高级流
缓冲流BufferedInputStream,BufferedReader、转换流InputStreamReader、打印流PrintStream原创 2022-09-13 16:50:21 · 296 阅读 · 0 评论 -
值传递和引用传递详解
通俗来讲,值传递就是将当前参数的值复制了一份,将复制的这一份传给了函数去操作,无论你怎么操作都不会影响参数原本的值。是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。,而引用变量指向堆内存中的对象,所以函数操作该副本是,其实际参数也会受到影响。复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。而当我们将引用数据类型传递给函数时,所传递出去的是一份。在C++中,函数参数的传递方式有引用传递。中,引用变量指向堆中的一个对象。原创 2022-09-07 16:15:23 · 530 阅读 · 0 评论 -
IO流低级流
InputStream&OutputStream用法及字节流实现文件复制FileReader&FileWriter用法、字符流实现文本内容复制原创 2022-09-06 11:04:06 · 451 阅读 · 0 评论 -
List&Map集合
List集合&Map集合&ListIterator迭代器的使用以及并发异常的处理原创 2022-09-01 20:04:54 · 1020 阅读 · 0 评论 -
Set集合详解
详解equals方法与hashcode方法的重写问题、以及Set集合的排序问题,Comparable接口以及comparator原创 2022-08-31 11:12:59 · 2109 阅读 · 0 评论