java
关于java的知识
故明所以
清心、静思、实干、寡言。
展开
-
Error:java: Compilation failed: internal java compiler error
Error:java: Compilation failed: internal java compiler error原创 2023-02-14 17:13:00 · 668 阅读 · 0 评论 -
IntelliJ IDEA 没有Tomcat 也没有Application Servers的解决办法
按照网上的例子都是添加tomcat和application servier,但是我的plugin里面都找不到这些.如下图所示:解决方法:检查自己的idea是否是社区版本还是旗舰版本,也就是免费开源版本还是收费版本。免费版本不支持Application Servers也不支持Tomcat,所以此时更换旗舰版本是可以解决这个问题的。(可下载网上的IDEA破解版本,免费哦!!!)...原创 2020-09-09 16:16:15 · 4525 阅读 · 1 评论 -
Java中为什么字段不能被重写?
先看一下下面这个例子,新建两个Sub对象,一个指向Sub类型的引用,一个指向 Super类型的引用。输出结果如下:我们创建了两个Sub对象,但是为什么第二个对象打印出来的结果是"Super"呢?1、隐藏字段代替了重写在java官方提供的tutorial有一段关于隐藏字段的明确定义:Within a class, a field that has the samename as a field in the superclass hides the superclass’s field, e原创 2020-09-07 19:13:45 · 494 阅读 · 0 评论 -
Maven的安装、配置以及使用
1、下载安装官方下载地址:http://maven.apache.org/download.cgi进入下载页面后,根据你电脑所装jdk版本选择对应版本的maven进行下载。我们可以看到该页上边红框内写明了,maven3.3版以上支持的是JDK1.7+的,所以推荐大家对应好自己的版本。官方目前最新的是3.5。下边四个的区别:Binary //指的是编译后的二进制文件。是可以直接使用的,你应该下载这个(红框中的)。Source //指的是maven的源码包。tar.gz //是一种压原创 2020-07-19 10:18:42 · 173 阅读 · 0 评论 -
Maven的主要作用
1 、下载jar包maven项目会有一个 pom.xml文件, 在这个文件里面,只要你添加相应配置,他就会自动帮你下载相应jar包,不用你铺天盖地的到处搜索你需要的jar包了 。下面是示范配置文件pom.xml:<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache原创 2020-07-19 09:48:55 · 621 阅读 · 0 评论 -
Java多线程之Callable接口的实现
一、基本理论(1)Java 5.0 在 java.util.concurrent 提供了一个新的创建执行线程的方式:Callable 接口(2)Callable 接口类似于 Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的。但是 Runnable 不会返回结果,并且无法抛出经过检查的异常。如果我们希望任务完成之后有返回值,可以实现Callable接口。在JavaSE5中引入的Callable是一个具有类型参数的范型,他的类型参数方法表示为方法call()而不是run()中返回的值,并原创 2020-07-17 20:05:37 · 394 阅读 · 0 评论 -
线程并发控制:CountDownLatch闭锁
一、闭锁的作用Latch中文含义有门闩之意,闭锁的作用相当于一扇门:CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。使用一个计数器进行实现。计数器初始值为线程的数量。当每一个线程完成自己任务后,计数器的值就会减一。当计数器的值为0时,表示所有的线程都已经完成了任务,然后在CountDownLatch上等待的线程就可以恢复执行任务。二、闭锁的使用场景闭锁可以延迟线程的进度直到其到达终止状态,闭锁可以用来确保某些活动直到其他活动都完成才继续执行:(1)确保某个原创 2020-07-17 19:40:14 · 391 阅读 · 0 评论 -
JUC——ConcurrentHashMap 锁分段机制
1、Java 5.0 在 java.util.concurrent 包中提供了多种并发容器类来改进同步容器的性能。2、ConcurrentHashMap 同步容器类是Java 5 增加的一个线程安全的哈希表。对与多线程的操作,介于 HashMap 与 Hashtable 之间。内部采用“锁分段”机制替代 Hashtable 的独占锁。进而提高性能。3、此包还提供了设计用于多线程上下文中的 Collection 实现:ConcurrentHashMap、ConcurrentSkipListMap、原创 2020-07-17 19:31:00 · 197 阅读 · 0 评论 -
深入解析CAS算法原理
目录一、CAS的基本概念二、CAS算法理解三、CAS开销四、CAS算法在JDK中的应用一、CAS的基本概念CAS:Compare and Swap,即比较再交换,是一种硬件对并发的支持,针对多处理器操作而设计的处理器中的一种特殊指令,用于管理对共享数据的并发访问。jdk5增加了并发包java.util.concurrent.*,其下面的类使用CAS算法实现了区别于synchronouse同步锁的一种乐观锁。JDK 5之前Java语言是靠synchronized关键字保证同步的,这是一种独占锁,也是是悲原创 2020-07-17 17:13:32 · 1278 阅读 · 0 评论 -
(超详细解析)volatile关键字
目录一、Java内存模型二、使用volatile关键字的特性三、总结volatile关键字是由JVM提供的最轻量级同步机制。与被滥用的synchronized不同,我们并不习惯使用它。想要正确且完全的理解它并不容易。一、Java内存模型Java内存模型由Java虚拟机规范定义,用来屏蔽各个平台的硬件差异。简单来说:(1)所有变量储存在主内存(2)每条线程拥有自己的工作内存,其中保存了主内存中线程使用到的变量的副本(3)线程不能直接读写主内存中的变量,所有操作均在工作内存中完成1、线程,主原创 2020-07-17 16:01:19 · 1509 阅读 · 0 评论 -
Java多线程之内存可见性
(1)什么是可见性:内存可见性(Memory Visibility)是指当某个线程正在使用对象状态而另一个线程在同时修改该状态,需要确保当一个线程修改了对象状态后,其他线程能够看到发生的状态变化。(2)共享变量:如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这个几个线程的共享变量。(3)主内存:保存了程序的所有变量。(4)工作内存:每个线程都有自己的独立工作内存,里面保存了该线程使用的变量的副本(主内存对该变量的一份拷贝)(5)Java内存模型(JMM):描述了java程序原创 2020-07-17 15:39:00 · 380 阅读 · 0 评论 -
在Centos7.X上安装docker
1、Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。通过 uname -r 命令查看你当前的内核版本: $ uname -r2、使用 root 权限登录 Centos。确保 yum 包更新到最新。$ sudo yum update3、卸载旧版本(如果安装过旧版本的话)$ sudo yum remove docker docker-common docker-selinux docker-engine4原创 2020-07-16 10:41:24 · 175 阅读 · 0 评论 -
Unable to find image ‘hello-world:latest‘ locally docker: Error response from daemon
报错提示如下:(1)修改[root@wgh ~]# vi /etc/docker/daemon.json(2)添加下面的内容,并保存{ "registry-mirrors": ["https://alzgoonw.mirror.aliyuncs.com"] }(3)重启docker#重启[root@wgh ~]# systemctl restart docker#查看状态[root@wgh ~]# systemctl status docker(4)测试[root@wgh ~原创 2020-07-16 10:28:54 · 5014 阅读 · 2 评论 -
JAVA之JDBC数据库连接池(超详细介绍)
JDBC数据库连接池一、JDBC数据库连接池的必要性二、数据库连接池技术三、多种开源的数据库连接池3.1 C3P0数据库连接池3.2 DBCP数据库连接池3.3 Druid(德鲁伊)数据库连接池一、JDBC数据库连接池的必要性1、在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤:(1)在主程序(如servlet、beans)中建立数据库连接(2)进行sql操作(3)断开数据库连接2、这种模式开发,存在的问题:(1)普通的JDBC数据库连接使用 DriverManager 来原创 2020-07-09 16:34:50 · 34740 阅读 · 6 评论 -
JDBC连接数据库的七个步骤(超详细)
JDBC连接数据库1、JDBC所需的四个参数(user,password,url,driverClass)2、加载JDBC驱动程序3、创建数据库的连接4、创建一个preparedStatement5、执行SQL语句6、遍历结果集7、处理异常,关闭JDBC对象资源JDBC连接数据库,创建一个以JDBC连接数据库的程序,包含7个步骤:1、JDBC所需的四个参数(user,password,url,driverClass)(1)user用户名(2)password密码(3)URL定义了连接数据库时的协议原创 2020-07-09 16:03:37 · 36916 阅读 · 1 评论 -
Java之装饰设计模式
一、装饰模式的概念:(1)装饰模式是动态的给一个对象添加一些额外的功能,就增加功能来说,装饰模式比生成子类更为灵活。(2)装饰模式是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。提供比继承更多的灵活性。(3)装饰模式是创建一个包装对象,也就是使用装饰来包裹真实的对象。二、装饰模式的实现方式(1)装饰对象和真实对象有相同的接口/抽象类。这样客户端对象就能以和真实对象相同的方式和装饰对象交互。(2)装饰对象包含一个真实对象的引用(reference)。(3)装饰对象接受所有来自客原创 2020-06-27 21:48:07 · 444 阅读 · 0 评论 -
什么是Java的序列化?
Java的序列化一、序列化的含义、意义及使用场景二、序列化实现的方式2.1 Serializable(1)普通序列化(2)成员是引用的序列化(3)同一对象序列化多次的机制(4)java序列化算法潜在的问题(5)可选的自定义序列化2.2 Externalizable:强制自定义序列化2.3 两种序列化机制对比三、序列化版本号serialVersionUID四、总结一、序列化的含义、意义及使用场景序列化:将对象写入到IO流中反序列化:从IO流中恢复对象意义:序列化机制允许将实现序列化的Java对象转换位原创 2020-06-27 21:14:51 · 2700 阅读 · 1 评论 -
Java IO流(详细总结)
Java IO流一、流的基本概念和作用IO流的分类:(1)字符流和字节流(2)输入流和输出流Java IO流图结构二、Java IO流对象2.1 输入字节流InputStream2.2 输出字节流OutputStream三、几个特殊的输入流类分析(1)LineNumberInputStream(2)PushbackInputStream(3)SequenceInputStream(4)PrintStream四、字符输入流Reader五、字符输出流Writer六、字符流与字节流转换七、Java IO流的高级概原创 2020-06-27 10:28:09 · 643 阅读 · 0 评论 -
Java中File类的使用方法(归纳总结)
Java文件类以抽象的方式代表文件名和目录路径名。该类主要用于文件和目录的创建、文件的查找和文件的删除等。File对象代表磁盘中实际存在的文件和目录。通过以下构造方法创建一个File对象。1、构造函数代码如下:public class FileDemo { public static void main(String[] args){ //构造函数File(String pathname) File f1 =new File("c:\\abc\\1.原创 2020-06-26 21:39:10 · 482 阅读 · 0 评论 -
Java 泛型详解(超详细的java泛型方法解析)
目录一、基本概述二、特性三、泛型的使用3.1 泛型类3.2 泛型接口3.3 泛型通配符3.4 泛型方法(1)泛型方法的基本用法(2)类中的泛型方法(3)泛型方法与可变参数(4)静态方法与泛型(5)泛型方法总结四、泛型数组一、基本概述泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时原创 2020-06-26 21:19:54 · 1653 阅读 · 0 评论 -
Java集合之Map接口及其实现类
目录一、Map接口二、HashMap三、LinkedHashMap四、TreeMap五、HashTable六、WeakHashMap七、EnumMap一、Map接口Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key快速查找value;Map中的键值对以Entry类型的对象实例形式存在;键(key值)不可重复,value值可以重复,一个value值可以和很多key值形成对应关系,每个建最多只能映射到一个值。Map支持泛型,形式如:Map<K,V原创 2020-06-24 23:36:58 · 598 阅读 · 0 评论 -
Java集合之Map接口的概述和常用方法
一、添加、删除、修改操作:Object put(Object key,Object value):将指定key-value添加到(或修改)当前map对象中void putAll(Map m):将m中的所有key-value对存放到当前map中Object remove(Object key):移除指定key的key-value对,并返回valuevoid clear():清空当前map中的所有数据二、元素查询的操作:Object get(Object key):获取指定key对应的val原创 2020-06-24 22:50:44 · 453 阅读 · 0 评论 -
Java集合之HashSet的实现原理
一、HashSet概述HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。二、HashSet的实现对于HashSet而言,它是基于HashMap实现的,HashSet底层使用HashMap来保存所有元素,因此HashSet 的实现比较简单,相关HashSet的操作,基本上都是直接调用底层HashMap的相关方法来完成, HashSet的源代码如下:public class HashSet&l原创 2020-06-24 22:08:42 · 152 阅读 · 0 评论 -
Java集合之HashMap的底层实现原理
HashMap的底层实现原理一、HashMap概述二、HashMap的数据结构三、HashMap的存取实现3.1 存储3.2 读取四、HashMap的resize(rehash)五、HashMap的性能参数六、Fail-Fast机制一、HashMap概述HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。二、HashMap的数据结构在java编程语言中,最基本的结构就是两种,一个是数组原创 2020-06-24 22:02:59 · 549 阅读 · 0 评论 -
(详细解析)Java中ArrayList、Vector、LinkedList三者的概述和异同点
目录一、概述1.1 ArrayList1.2 LinkedList1.3 Vector二、三者的异同2.1 相同点:2.2 不同点:(1) 同步性(2) 数据增长(3)检索、插入、删除对象的效率一、概述1.1 ArrayListArrayList是一个可以处理变长数组的类型,这里不局限于“数”组,ArrayList是一个泛型类,可以存放任意类型的对象。顾名思义,ArrayList是一个数组列表,因此其内部是使用一个数组来存放对象的,因为Object是一切类型的父类,因而ArrayList内部是有一个O原创 2020-06-23 23:32:37 · 297 阅读 · 0 评论 -
Java中必须知道的常用类
一、Java的包装类基本数据类型我们都很熟悉,例如:int、float、double、boolean、char等,基本数据类型不具备对象的特征,不能调用方法,一般能实现的功能比较简单,为了让基本数据类型也具备对象的特性,Java为每个数据类型都提供了一个包装类,这样我们就可以像操作对象一样,操作这些基本数据类型。常见的包装类和基本类型对应关系如下:基本类型对应的包装类byteByteshortShortintIntegerlongLongfloat原创 2020-06-23 10:52:21 · 266 阅读 · 0 评论 -
Java实现协程的方法
协程(Coroutine)这个词其实有很多叫法,比如有的人喜欢称为纤程(Fiber),或者绿色线程(GreenThread)。其实究其本质,对于协程最直观的解释是线程的线程。虽然读上去有点拗口,但本质上就是这样。协程的核心在于调度那块由他来负责解决,遇到阻塞操作,立刻放弃掉,并且记录当前栈上的数据,阻塞完后立刻再找一个线程恢复栈并把阻塞的结果放到这个线程上去跑,这样看上去好像跟写同步代码没有任何差别,这整个流程可以称为coroutine,而跑在由coroutine负责调度的线程称为Fiber。一、jav原创 2020-06-22 22:12:51 · 1400 阅读 · 0 评论 -
Java多线程(详解)
一、进程与线程进程是程序的一次动态执行过程,它需要经历从代码加载,代码执行到执行完毕的一个完整的过程,这个过程也是进程本身从产生,发展到最终消亡的过程。多进程操作系统能同时达运行多个进程(程序),由于 CPU 具备分时机制,所以每个进程都能循环获得自己的CPU 时间片。由于 CPU 执行速度非常快,使得所有程序好像是在同时运行一样。多线程是实现并发机制的一种有效手段。进程和线程一样,都是实现并发的一个基本单位。线程是比进程更小的执行单位,线程是进程的基础之上进行进一步的划分。所谓多线程是指一个进程在执行原创 2020-06-21 22:32:16 · 877 阅读 · 0 评论 -
Java异常的捕获与处理
Java异常的捕获与处理一、异常处理的使用二、throws关键字三、throw关键字四、RuntimeException类五、自定义异常类Java提供了try(尝试)、catch(捕捉)、finally(最终)这三个关键字来处理异常。在处理各种异常时,需要用到对应的异常类,指的是由程序抛出的对象所属的类。一、异常处理的使用由于finally块是可以省略的,异常处理格式可以分为三类:try{ }——catch{ }try{ }——catch{ }——finally{ }try{ }——原创 2020-06-20 09:00:53 · 410 阅读 · 0 评论 -
Java工厂设计模式
工厂设计模式一、面向对象的设计原则1.1 OCP(开闭原则,Open-Closed Principle)1.2 DIP(依赖倒转原则,Dependence Inversion Principle)1.3 LOD(迪米特法则,Law Of Demeter)二、工厂模式的分类2.1 无工厂模式2.2 简单工厂模式2.3 工厂方法模式2.4 抽象工厂模式接口的应用:工厂模式工厂模式:实现了创建者与调用者的分离,即将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。其实设计模式和面向对象设计原则都是为了使原创 2020-06-17 19:45:32 · 1101 阅读 · 0 评论 -
Java 垃圾回收机制
Java 垃圾回收机制一、垃圾回收的意义二、垃圾回收机制中的算法1. 1 可达性检测算法1.1.1 引用计数法(`Reference Counting Collector`)1.1.2 根搜索算法(`可达性分析算法`)1.2 垃圾收集算法1.2.1 标记-清除(Mark-Sweep)算法1.2.2 复制(Copying)算法1.2.3 标记-整理(Mark-Compact)算法1.2.4 分代收集(Generational Collection)算法(比较常用)三、垃圾收集器(GC)四、四种引用状态一、垃原创 2020-06-16 20:00:38 · 1505 阅读 · 0 评论 -
Java项目之客户信息管理软件
一、项目需求说明模拟实现基于文本界面的《客户信息管理软件》该软件能够实现对客户对象的插入、修改和删除(用数组实现),并能够打印客户明细表。(1)项目采用分级菜单方式:(2)“添加客户”的界面及操作过程如下:(3)“修改客户”的界面及操作过程如下:(4)“删除客户”的界面及操作过程如下:(5)“客户列表”的界面及操作过程如下:二、软件设计结构该软件由以下三个模块组成:CustomerView为主模块,负责菜单的显示和处理用户操作CustomerList为Custome原创 2020-06-14 22:50:24 · 2094 阅读 · 0 评论 -
Eclipse Debug的 配置与调试
目录一、创建和使用 Debug 配置二、Eclipse Debug 调试一、创建和使用 Debug 配置Eclipse Debug 配置类似于运行配置但它是用于在调试模式下开启应用。打开 Debug 配置对话框步骤为:Run > Debug Configurations 。从左侧列表中选择 “Java Application” 选项来创建 Java 应用的调试配置并 New 按钮。对话框中的描述信息有:调试配置的名称项目名称主类名arguments(参数)选项卡的描述信息有:原创 2020-06-13 22:02:18 · 4887 阅读 · 0 评论 -
Java 重写(Override)与重载(Overload)
目录一、重写(Override)二、方法的重写规则三、Super 关键字的使用四、重载(Overload)五、重写与重载之间的区别六、总结一、重写(Override)重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如: 父类的一个方法申明了一个检查异常 IOException,但是在重原创 2020-06-12 22:36:24 · 261 阅读 · 0 评论 -
面向对象的三大基本特征和五大基本原则
面向对象的三大基本特征和五大基本原则一、三大基本特征:封装、继承、多态1.1 封装1.2 继承1.3 多态二、五大基本原则2.1 单一职责原则(SRP)2.2 开放封闭原则(OCP)2.3 里氏替换原则(LSP)2.4 依赖倒置原则(DIP)2.5 接口隔离原则(ISP)一、三大基本特征:封装、继承、多态1.1 封装封装就是隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别,将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的原创 2020-06-12 13:59:29 · 330 阅读 · 0 评论 -
Java项目之家庭记账软件
一、项目需求(1)模拟实现基于文本界面的《家庭记账软件》(2)该软件能够记录家庭的收入、支出,并能够打印收支明细表(3)项目采用分级菜单方式主菜单如下图:二、需求说明(1)假设家庭起始的生活基本金为10000元。• 每次登记收入(菜单2)后,收入的金额应累加到基本金上,并记录本次收入明细,以便后续的查询。• 每次登记支出(菜单3)后,支出的金额应从基本金中扣除,并记录本次支出明细,以便后续的查询。• 查询收支明细( 菜单1)时,将显示所有的收入、支出名细列表(2)“登记收入”的界面原创 2020-06-11 22:08:29 · 1343 阅读 · 1 评论 -
Java实现八大排序算法
常见排序算法如下:(1)直接插入排序(2)希尔排序(3)简单选择排序(4)堆排序(5)冒泡排序(6)快速排序(7)归并排序(8)基数排序它们都属于内部排序,也就是只考虑数据量较小仅需要使用内存的排序算法,他们之间关系如下:一、直接插入排序1.1 基本思想通常人们整理桥牌的方法是一张一张的来,将每一张牌插入到其他已经有序的牌中的适当位置。在计算机的实现中,为了要给插入的元素...原创 2020-05-06 16:22:04 · 185 阅读 · 0 评论 -
JVM、JRE、JDK简介
(1)JVM(JVM Java Virtual Machine):核心机制,Java虚拟机JVM是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行指令,管理数据、内存、寄存器。对于不同的平台,有不同的虚拟机。Java虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,到处运行”。一个.java的文件,经过(javac命令)编译,形成一个.class的字节码文件,然后(java...原创 2020-04-06 17:04:49 · 536 阅读 · 0 评论