![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 50
IBLiplus
这个作者很懒,什么都没留下…
展开
-
Arthas-Java诊断神器
我的Github-Java后端成长路线https://github.com/geekibli/java-studyArthas-Java诊断神器官方文档地址 ???? https://arthas.aliyun.com/doc/index.html#1. 安装arthaswget https://arthas.aliyun.com/arthas-boot.jarjava -jar arthas-boot.jar --target-ip 0.0.0.0如果你的机器没有任何java进程在原创 2021-08-20 19:05:33 · 758 阅读 · 0 评论 -
Java并发编程之Blocking Queue
Blocking QueueA blocking queue is a queue that blocks when you try to dequeue from it and the queue is empty, or if you try to enqueue items to it and the queue is already full. A thread trying to dequeue from an empty queue is blocked until some other th原创 2021-08-19 15:40:43 · 504 阅读 · 0 评论 -
我的技术博客(Java后端成长路线)
各位大佬们,CSDN的博客好久没有更新了。大家感兴趣的话,可以关注我的个人博客跳转链接 ???? 【GeekIBLi】我的博客总结的东西相对系统一些,体系化一些,感兴趣的可以看一下。博客是我本人学习过程中自己记录和总结的,可能会有理解错误的地方,欢迎大家指正,共同进步吧!下面是一些截图:????Java并发编程相关文章设计模式相关的文章TCP协议相关的...原创 2021-08-17 13:52:50 · 217 阅读 · 0 评论 -
Java多线程之join方法
个人技术博客(IBLi)CSDN Github掘金参考资料1、Java多线程中join方法的理解2、Thread.join的作用和原理3、Thread.join的作用和原理join方法join重载方法1 join()2 join(long millis) //参数为毫秒3 join(long millis,int nanoseconds) //第一参数为毫秒,第二个参数为纳秒功能演示public class JoinDemo implement.原创 2020-09-21 23:16:24 · 933 阅读 · 0 评论 -
Java泛型详解
Java泛型个人技术博客(IBLi)CSDN Github掘金1、泛型定义使用泛型机制编写的程序代码要比那些杂乱地使用Object变量,然后在进行强制类型转换的代码具有更好的安全性和可读性。 --《Java核心技术》泛型是在编译时期作用的;泛型变量使用大写形式,在Java库中,一般使用变量E表示集合的元素类型,K和V表示表的关键字与值的类型。2、通配符2.1 无边界通配符无边界通配符又成为非限定通配符public static void main(String[]原创 2020-09-19 22:54:07 · 248 阅读 · 0 评论 -
Java反射获取List的泛型
Java反射获取List的泛型public static void main(String[] args) throws NoSuchFieldException { Field listField = ListTest.class.getDeclaredField("users"); Type genericType = listField.getGenericType(); System.err.println("genericType name "原创 2020-09-18 20:10:47 · 712 阅读 · 0 评论 -
Java反射详解
个人技术博客CSDN Github掘金反射反向探知,在程序运行是动态的获取类的相关属性这种动态获取类的内容以及动态调用对象的方法和获取属性的机制,叫做java反射机制;反射的优缺点优点增加了程序的灵活性,避免的固有逻辑写死到程序中代码简介,提高程序的复用性缺点相比于直接调用,反射有比较大的性能消耗内部暴露和安全隐患 (因为反射可以操作private成员变量和调用private成员方法)反射的基本操作获取类对象的4种方式// 调用forName方法得.原创 2020-09-18 17:40:19 · 190 阅读 · 0 评论 -
FutureTask源码解析
参考资料(1) future.get方法阻塞问题的解决,实现按照任务完成的先后顺序获取任务的结果(2) Java多线程引发的性能问题以及调优策略(3) 可取消的异步任务——FutureTask用法及解析(4) FutureTask源码解读Future方法介绍public interface Future<V> { // 取消任务 可中断的方式取消 boolean cancel(boolean mayInterruptIfRunning);原创 2020-09-17 17:37:06 · 443 阅读 · 0 评论 -
JDK自带HttpServer处理Http请求
下面是JDK自带的HttpServer处理Http请求的源码和流程,我看网上貌似还没有介绍这个的流程,所有就画了一下,如有不足,请矫正。1、官方APIhttps://docs.oracle.com/javase/7/docs/jre/api/net/httpserver/spec/com/sun/net/httpserver/HttpExchange.html2、启动一个HttpServer demo: privatestaticfinalMap<String, Htt...原创 2020-07-27 22:06:37 · 1486 阅读 · 0 评论 -
Java中的final关键字
在java中可以将实例域定义为final。在构建对象是必须初始化这样的值。必须确保在每个构造器执行之后,这个域的值被设置,并且在后面的操作中不再对其修改。使用final声明变量之后,这个值就不能修改,一般final类型的变量都被声明为静态变量,而且是公有类型的,它在内存中被放在一个特有的公共区域。也就是说,在Java语法中规定,final修饰的成员变量必须有程序员显式地指定初始值。定义格式...原创 2018-07-16 23:18:21 · 10043 阅读 · 0 评论 -
Java中方法参数的传递机制
首先我们知道,在Java中的方法是不能独立存在的,调用方法也必须使用类或者对象作为主调者。如果生命方法时包含了形参声明,则在调用方法时,必须给这些形参指定实参数值,调用方法时实际上传给形参的参数值就是实参。那么在Java中到底实参是如何传入方法的呢?这是由Java方法的参数传输机制来控制的,Java里的方法参数传递为值传递,就是将实际参数的副本传入方法内,而实参本身不受任何影响。对于8中基...原创 2018-07-17 00:17:16 · 272 阅读 · 0 评论 -
Java工厂模式的技术核心
首先通过代码来分析一下:先定义一个Employee的超类,然后定义一个Manager类型的子类,继承于该超类,代码如下:public class Employee { private String name; private double salary; private LocalDate hireDay; Employee(){} public String getNam...原创 2018-07-17 19:15:56 · 338 阅读 · 0 评论 -
Java类内部的初始化顺序
在Java中初始化变量时,首先执行静态变量的声明,然后执行静态初始化块的执行语句,然后声明非静态的变量,然后执行初始化块的执行语句,最后执行构造器中的初始化语句。下面通过代码演示一下:public class TextDemo { private String name = "aa"; private String sex = "ss"; private static ...原创 2018-07-17 19:49:56 · 472 阅读 · 0 评论 -
Java中的枚举类型
public enum Size{SMALL,MEDIUM,LARGE,EXTRA_LARGE};枚举类型的定义: 枚举类型在很大程度上解决了简化了代码,避免了繁琐的定义,使程序代码更加的整洁。枚举类型相当于一个类,需要新建一个专门的Enum类的java文件,在这个文件里面定义相关的枚举变量,定义的时候要注意了,一般枚举类型定义之后就不会更改变量的值,也就是定义成枚举常量。,...原创 2018-07-23 19:30:21 · 235 阅读 · 0 评论 -
Java对象包装器与自动装箱
有时候需要将int这种基本类型转换为对象类型的,所有的基本类型都有一个与之对应的类。比如说int类型对应于Integer类,通常的情况下称这些类为包装器。这些对象包装器类的名字对应于基本类型的名字,分别是Integer,Long,Double,Short,Byte,Character,Void和Boolean(前面6个类派生于公共的超类Number),对象包装器类是不可变的,即一旦构造了包装器...原创 2018-07-23 20:27:38 · 637 阅读 · 0 评论 -
Java Integer自动拆装箱的128陷阱问题
这是一个很偏的知识点,可能有的人只是知道Integer类是int的包装虽然特么类,它的对象是应用对象, 其实不然。注意:自动装箱规范要求boolean,byte,char在-128~127之间的short和int被包装到固定的对象中。对于Integer类型的变量,在以上的范围内的变量值,直接指向常量池中的缓存地址,不会new开辟出新的空间。下面是验证的代码: Integer ...原创 2018-07-23 21:58:37 · 577 阅读 · 0 评论 -
O(n) 级复杂度实现寻找最大值连续子串和求子串最大值算法(Java)
假定给定的一组数为:-2,-4,-7,-20,1,1,1,1,-10,1,1,1,5,-10,10,10,10,-25,10,10,10,10,10,10,-300 算法要求:在给定的数组中找出某个连续子串,该子串的值是最大的,并且输出该子串和最大值。代码如下:public class Search { static int max=0; static int max1=0; stat...原创 2018-07-10 18:51:18 · 1075 阅读 · 0 评论 -
Java实现斐波那契算法与等差数列
斐波那契数,亦称之为斐波那契数列(意大利语: Successione di Fibonacci),又称黄金分割数列、费波那西数列、费波拿契数、费氏数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,斐波那契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=Fn-1+Fn-2(n>=2,n∈N*),用文字来说,就是斐波那契数列由 0 和 1 开始,之后的斐波那契数...原创 2018-07-09 19:34:19 · 926 阅读 · 0 评论 -
Java数据类型总结
Java是一种强类型语言,所以Java中的每一个变量都要求声明一种类型,今天我们只介绍Java中的基本数据类型。 一共有8中数据类型,其中4种整型,2种浮点型,1中表示 Unicode编码的char类型,还有一种表示真值的boolean类型。Java整型类型存储需求取值范围int4字节-2147483648 ~ 2147483647short2字节-32768 ~ 3...原创 2018-07-07 22:21:51 · 166 阅读 · 0 评论 -
Java反射
public static void main(String[] args) { try { Class cl= Class.forName("com.qcby.Person"); Person p= (Person) cl.newInstance(); Field [] f =cl.getDeclaredFields(); for( Field ff:...原创 2018-07-24 20:23:17 · 129 阅读 · 0 评论 -
Java中调用父类构造器
首先子类不会获得超类的构造器,所以不会出现子类构造器重写超类构造器的情况。但是子类构造器可以调用父类构造器的初始化代码,类似于一个类中,构造函数的重载。在一个构造器中调用另一个重载的构造器使用this来完成,在子类中调用父类的构造器使用super关键字来完成。使用super调用和使用this调用很像,区别在于super调用的是父类的构造器,而this调用的是同一个类中重载的构造器。因此,使...原创 2018-07-24 21:41:29 · 1382 阅读 · 0 评论 -
break与continue的区别
我们简单粗暴,直接上代码:第一个代码演示的是continuepublic class breakandcontinue { public static void main(String[]agrs){ for(int j = 0;j<4;j++) { for(int i = 100;i>=0; i--){ if(i % 7 == 0 ){ ...原创 2018-07-24 23:33:01 · 158 阅读 · 0 评论 -
Java数组知识整理
一、数组数组是一种数据结构,用来存储同一类型的数值的集合。通过一个整型下标可以访问数组中的每一个值。例如,如果a是一个数组,a[i] 就是数组下标为i 的整数。在声明数组类型(数据元素类型跟[ ])和数据变量的名字数组声明的方式为: int [] a;但是这条语句只是声明了变量a,并没有将a初始化一个真正的数组,应该使用new运算符创建数组。Int [] a = new int[100];(数组的...原创 2018-07-13 19:52:54 · 249 阅读 · 0 评论 -
Java中的隐式参数与显式参数
方法用于操作对象以及存取它们的实例域,例如:public void addSalary( double byPersent){ double raise = salary * byPersent/100; salary + = raise;}调用该方法的对象的salary将会更新为新的salary,代码展现: double raise = employee[x]. salary * ...原创 2018-07-14 00:05:56 · 424 阅读 · 0 评论 -
Java语言实现顺序表的增删改查
线性表是最简单,最基本,也是最常见的一种线性结构。它有两种存储方式:顺序存储和链式存储。它的基本操作主要是插入、删除和检索等。线性表的用途广泛,应用于信息检索、存储管理、模拟技术和通信领域。软件工程的初学者可能会忽视数据结构这门课程,而把更多的精力集中在高级语言的课程上,其实这是一个很严重的误解。本篇是我个人对于线性表的初步理解,望各位大佬发表高见,多多指教。这里的编程语言我选择Java。接下来演...原创 2018-06-02 16:19:22 · 1972 阅读 · 0 评论 -
Java中的关系与boolean运算符
Java包括丰富的关系运算符。要检测相等性,可以使用两个等号==。例如:3==7的值返回为false。另外,3!=7,返回值为true。最后,还有经常使用的<()小于、>(大于)、<=(小于等于)、>=(大于等于)运算符。 在Java中,使用&&表示逻辑“与”运算符,使用||表示逻辑“或”运算符。而且Java支持三元操作符?:。如果条件为tru...原创 2018-07-08 19:09:18 · 3930 阅读 · 0 评论 -
Java中字符串的相关知识与常用方法的实现
String name="大拉崩坝般地背的普多"; String temp="大中华"; //charAt():返回指定参数位置的值 System.out.println(name.charAt(3));//呗 //compare()方法按照字典顺序实现两个值或变量的比较,结果返回一个int类型的值。 ...原创 2018-07-08 18:04:56 · 232 阅读 · 0 评论 -
at TreeNode.toString(TreeNode.java:35) Java程序报错解决方案
本人在写二叉排序树的节点删除时,遇到一个问题,在网上没有找到答案,记过自己仔细排查,解决了这个问题。首先建立一个二叉排序树,先序遍历,结果如下:控制台显示的错误是:需要删除的是value=10的节点,代码如下:经过排查,发现删除节点时,少了一行代码。那么如果没有这一行代码,为什么会报错呢?报错的位置在定义节点类的toString()方法的位置,缺少这行的代码的作用是将要删除的节点(delNode)...原创 2018-06-25 21:32:30 · 624 阅读 · 0 评论 -
Java中的对象与类
首先了解什么是面向对象:面向对象程序设计(简称OOP)是当今主流的程序设计范型,它已经取代了之前的结构化程序设计。Java是完全面向对象的,必须熟悉OOP才能够编写Java程序。面向对象的程序是有对象组成的,每个对象包括对用户公开的特定功能部分和隐藏的实现部分。在OOP中不关心对象的具体实现,只能够满足用户的需求即可。OOP将数据放到第一位,然后再考虑操作数据的算法。什么是类:类(class) 是...原创 2018-07-14 17:27:43 · 327 阅读 · 0 评论 -
Java中引用可变对象的问题
注意: 不要编写返回引用可变对象的访问器方法。在Employee 类中就违反了这个设计原则,其中的getHireDay方法返回一个Date类对象。class Employee{ private Date hireDay; public Date getHireDay(){ Return hireDay; } }LoaclDate 类没有更改器方法,与之不同,Date类有...原创 2018-07-14 20:58:06 · 507 阅读 · 4 评论 -
eclipse创建servlet项目详细步骤
下面展示eclipse创建servlet项目的详细步骤:需要使用到的环境,jdk 1.80 ,tomcat 8.0 /64位 首先将eclipse绑定jdk,然后,点击finish即可完成jdk的绑定。然后开始创建项目:下一步,下一步,下一步,创建一个包创建一个servlet类:此时程序会报错,是因为还没有导入相应的辅助包,...原创 2018-07-25 22:37:30 · 17049 阅读 · 3 评论 -
基于类的访问权限
首先通过方法可以访问所调用对象的私有域,一个方法可以访问所属类的所有对象的私有数据。下面通过具体代码解释: private int score; public static void main(String[] args) { StudentInfo stu1 = new StudentInfo(80); StudentInfo stu2 = n...原创 2018-07-14 21:23:46 · 307 阅读 · 0 评论 -
Java中的继承
继承:利用继承我们可以通过一个已经存在的类,来创造一个新的类。继承已存在的类就是复用(继承)这些类的方法和域,在此的基础上还可以增加一些新的方法和域,以满足需求,这是Java程序的技术核心。 定义子类:public class Student extends Person { private String major; public Student(String nam...原创 2018-07-20 20:18:50 · 217 阅读 · 0 评论 -
Java中的多态
在Java程序设计语言中,对象变量是多态的,一个超类变量既可以引用一个本类的变量,也可以引用一个该超类的任何一个子类的对象。但是反过来则不成立,不能将一个超类的引用传递给一个子类变量。public static void main(String[] args) { Person [] people = new Person[3]; people[0] = new Employee("...原创 2018-07-20 20:28:21 · 114 阅读 · 0 评论 -
Java对象方法的调用执行过程
Java对象方法的调用执行过程 编译器查看对象的声明类型和方法名。假设调用x.f(param),隐式参数为x声明为C类对象,需要注意的是,有可能存在多个方法名为f,但是参数不同的方法,此时,编译器会一一列举C类中的所有方法名为f的方法和超类中访问属性为public的并且名字为f的方法。 接下来,编译器将查看调用方法时提供的参数类型。如果在所有名为f的方法中存在一个与提供的参数类型完全匹配...原创 2018-07-20 22:30:41 · 1564 阅读 · 1 评论 -
阻止继承:final类和方法
不允许扩展的类被称为final类,如果在定义这个类的时候使用了final的修饰符,则这个类就是final类,如果不希望一个类派生出子类,就可以采用上面所说的方法,添加final修饰符,把这个类变成final类。类中的特定方法也可以被声明为final类型的,如果这样做,子类就不能覆盖这个方法,final类中的所有方法自动地成为final方法。这里说明一下方法覆盖和方法的重载:方法覆盖:子...原创 2018-07-20 22:50:24 · 839 阅读 · 0 评论 -
Java实现快速排序算法
快速排序算法的思想是:在数组中选取一个数(一般都是选第一个数),分别与其它的每一个数比较,把比这个数小的数放到它的前面,比他大的数放到它的后面,此时数组分成两部分,该数前面的都比它小,后面的都比它大,然后分别对这两部分递归排序算法,就可以实现整个数组的排序。public static void main(String[] args) { int [] arr = {65,58,95,...原创 2018-07-15 21:35:44 · 6716 阅读 · 0 评论 -
Java中的抽象类
从某种角度看,祖先类更具有通用性,我们只将它作为派生其他类的基类,而不作为想实现特定的实例类。有的时候,许多子类都需方法,但是,超类并不使用这个方法,这些子类都要自身重写这个方法,这时候超类中只需要声明有这种方法,没有必要有具体的执行语句。这种情况下,可以使用关键字abstract在超类中声明这个函数,这个函数在超类中只有声明,没有定义,除了方法名和空的参数列表之外没有任何东西。包含一个...原创 2018-07-21 16:01:41 · 179 阅读 · 0 评论 -
Java中的protected关键字
如果希望超类中的某些方法允许被子类访问,或者允许子类的方法访问超类的某个域,为此需要将这些方法或域设置为protected。在实际的程序中很实用这个关键字。下面归纳一下Java用于控制可见性的4个访问修饰符:仅对本类可见---private 对所有类可见---public 对本包和所有子类(本包的)可见---protected 对本书可见——默认,不需要修饰符public cla...原创 2018-07-21 17:11:35 · 1701 阅读 · 0 评论 -
Java中的equals
Equals方法:Object类中的equals方法用于检测一个对象是否等于另外一个对象,在Object类中,这个方法将判断两个对象时都要有相同的引用。但是实际上两个对象的比较是比较两个对象的状态是否相等,及他们的实例域是否相等,比如员工类型的变量的名字,工资,和雇佣日期,如果都一样,则这两个对象认为是相等的,有一项不同,这两个对象认为不是相等的。Equals()方法实际上的执行语句是判断...原创 2018-07-21 18:39:17 · 207 阅读 · 0 评论