Java
文章平均质量分 91
雪山上的小草
每天都是初学者
展开
-
深入理解List的toArray()方法和toArray(T[] a)方法
深入理解List的toArray()方法和toArray(T[] a)方法上面这篇博文讲的比较好,可以看下,其中里面介绍toArray(T[] a)没有例子,我这补充下:public static void main(String[] args) { List<Integer> list = new ArrayList(); list.add(1); list.add(5); list.add(3); In原创 2020-08-04 16:28:15 · 642 阅读 · 0 评论 -
快速理解<? extends T>和<? super T>
原文链接:https://www.jianshu.com/p/520104cfd0ff在 Java 泛型中存在通配符的概念: <? extends T>:上界通配符(Upper Bounds Wildcards) <? super T>:下界通配符(Lower Bounds Wildcards) 通配符存在的意义有类就会有继承,在开发中我们经常接触泛型,肯定希望在使用泛型的时候可以兼容其子类,但是在使用集合或者其他类似的情景时会出现问题。下面用集合例子模拟转载 2020-07-27 21:33:06 · 335 阅读 · 0 评论 -
HashMap由并发引起的链表死循环
文章来源:阿里P8架构师谈:深入探讨HashMap的底层结构、原理、扩容机制3. 扩容机制扩容(resize)就是重新计算容量,向HashMap对象里不停的添加元素,而HashMap对象内部的数组无法装载更多的元素时,对象就需要扩大数组的长度,以便能装入更多的元素。当然Java里的数组是无法自动扩容的,方法是使用一个新的数组代替已有的容量小的数组,就像我们用一个小桶装水,如果想装更多的水,就得换大水桶。我们分析下resize的源码,鉴于JDK1.8融入了红黑树,较复杂,为了便于理解我们仍然使用J转载 2020-07-24 15:48:51 · 323 阅读 · 0 评论 -
hashCode和equals的区别
1.对象存储在散列表中(如hashset,hashmap等)此时hashCode方法和equals方法才有关联,百度都会有这句话“equals方法重写了hashcode方法也要重写”个人理解为:例如在hashset中存储,而hashset的底层实现的,底层存储的数据结构是先通过hashcode方法确定index,而当table[index]已存在其它元素时,会在table[index]位置形成一个链表,再继续判断继续通过equals方法判断当前要存放的对象是否已经在链表中出现过,如果没有出现过就加入原创 2020-07-23 20:54:02 · 240 阅读 · 0 评论 -
java中的string对象深入了解
这里来对Java中的String对象做一个稍微深入的了解。Java对象实现的演进String对象是Java中使用最频繁的对象之一,所以Java开发者们也在不断地对String对象的实现进行优化,以便提升String对象的性能。Java6以及之前版本中String对象的属性在Java6以及之前版本中,String对象是对char数组进行了封装实现的对象,其主要有4个成员成员变量,分别是char数组、偏移量offset、字符数量count和哈希值hash。String对象是通过offset和转载 2020-07-23 11:57:47 · 236 阅读 · 0 评论 -
源码分析Integer自动装箱拆箱中-128 ~ 127 的缓存问题
什么是包装类型Java 设计当初就提供了 8 种 基本数据类型及对应的 8 种包装数据类型。我们知道 Java 是一种面向对象编程的高级语言,所以包装类型正是为了解决基本数据类型无法面向对象编程所提供的。下面是基本数据类型与对应的包装类型。基本数据类型 包装类型 byte Byte boolean Boolean short Short char Character int Integer long Long float原创 2020-07-23 10:25:09 · 337 阅读 · 0 评论 -
异常的执行顺序与异常中return的分析
异常有try块,catch块,finally块若程序(try块中)无异常,则先执行try块,再执行finally块public class exceptionClass { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.print("请输入被除数:"); try { int num1 =原创 2020-07-22 12:36:03 · 545 阅读 · 1 评论 -
Java内部类详解
一.内部类基础在 Java 中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。下面就先来了解一下这四种内部类的用法。1.成员内部类成员内部类是最普通的内部类,它的定义为位于另一个类的内部,形如下面的形式:class Circle { double radius = 0; public Circle(double radius) { this转载 2020-07-22 11:02:34 · 125 阅读 · 0 评论 -
源码分析equlas和==的区别
对于“==”是直接比较的两个对象的堆内存地址,如果相等,则说明这两个引用实际是指向同一个对象地址的对于基本数据类型(byte,short,char,int,float,double,long,boolean)来说,他们是作为常量在方法区中的常量池里面以HashSet策略存储起来的,对于这样的字符串 "123"也是相同的道理,在常量池中,一个常量只会对应一个地址,因此不管是再多的 123,"123" 这样的数据都只会存储一个地址,所以所有他们的引用都是指向的同一块地址,因此基本数据类型和String常量.原创 2020-07-21 21:00:22 · 132 阅读 · 0 评论 -
Java中Synchronized的用法
《编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程》一文详细讲述了线程、进程的关系及在操作系统中的表现,这是多线程学习必须了解的基础。本文将接着讲一下Java线程同步中的一个重要的概念synchronized.synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来...转载 2019-01-08 22:22:51 · 107 阅读 · 0 评论 -
Java反射学习 getClass()函数应用
Java反射学习 所谓反射,可以理解为在运行时期获取对象类型信息的操作。传统的编程方法要求程序员在编译阶段决定使用的类型,但是在反射的帮助下,编程人员可以动态获取这些信息,从而编写更加具有可移植性的代码。严格地说,反射并非编程语言的特性,因为在任何一种语言都可以实现反射机制,但是如果编程语言本身支持反射,那么反射的实现就会方便很多。 1,获得类型类 我们知道在Java中一切都是对象,我们一般所...转载 2019-01-08 17:33:54 · 204 阅读 · 0 评论 -
浅谈java中类名.class, class.forName(), getClass()的区别
Class对象的生成方式如下:1、类名.class 说明: JVM将使用类装载器, 将类装入内存(前提是:类还没有装入内存),不做类的初始化工作.返回Class的对象2、Class.forName("类名字符串") (注:类名字符串是包名+类名) 说明:装入类,并做类的静态初始化,返回Class的对象3、实例对象.getClass() 说明:对类进行静态初始化、非静态...转载 2019-01-08 17:21:28 · 487 阅读 · 0 评论 -
Spring aop的实现原理
Spring aop的实现原理简介 前段时间写的java设计模式--代理模式,最近在看Spring Aop的时候,觉得于代理模式应该有密切的联系,于是决定了解下Spring Aop的实现原理。 说起AOP就不得不说下OOP了,OOP中引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。但是,如果我们需要为部分对象引入公共部分的时候,OOP就会引入大量重复的...转载 2019-01-09 15:27:25 · 116 阅读 · 0 评论 -
Java中isAssignableFrom的用法
Java中isAssignableFrom的用法class1.isAssignableFrom(class2) 判定此 Class 对象所表示的类或接口与指定的 Class 参数所表示的类或接口是否相同,或是否是其超类或超接口。如果是则返回 true;否则返回 false。如果该 Class表示一个基本类型,且指定的 Class 参数正是该 Class 对象,则该方法返回 true;否则返回 ...转载 2019-01-08 16:54:49 · 2414 阅读 · 0 评论 -
HashTable和HashMap的区别详解
一、HashMap简介 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。 HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMap。 HashMap 实现了Serializable接口...转载 2019-02-27 15:21:53 · 883 阅读 · 0 评论 -
Struts2 继承ActionSupport的用处
Action 跟 Actionsupport 的区别 当我们在写action的时候,可以实现Action接口,也可以继承Actionsupport这个类.到底这两个有什么区别呢?Action接口有:public static final java.lang.String SUCCESS = "success";public static final java.lang.S...转载 2019-01-07 17:50:14 · 161 阅读 · 0 评论 -
Java中instanceof和isInstance区别详解
Java中instanceof和isInstance区别详解 一次性搞定instanceof和isInstance,instanceof和isInstance长的非常像,用法也很类似,先看看这两个的用法:obj.instanceof(class)也就是说这个对象是不是这种类型,1.一个对象是本身类的一个对象2.一个对象是本身类父类(父类的父类)和接口(接口的接口)的一个对象...转载 2019-01-08 17:12:39 · 144 阅读 · 0 评论 -
Servlet 生命周期、工作原理
Servlet 加载—>实例化—>服务—>销毁。init():在Servlet的生命周期中,仅执行一次init()方法。它是在服务器装入Servlet时执行的,负责初始化Servlet对象。可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet。无论有多少客户机访问Servlet,都不会重复执行init()。service():它是Ser...转载 2019-01-07 17:40:07 · 143 阅读 · 0 评论 -
深入理解单例模式:静态内部类单例原理
本文主要介绍java的单例模式,以及详细剖析静态内部类之所以能够实现单例的原理。OK,废话不多说,进入正文。首先我们要先了解下单例的四大原则:1.构造私有。2.以静态方法或者枚举返回实例。3.确保实例只有一个,尤其是多线程环境。4.确保反序列换时不会重新构建对象。我们常用的单例模式有:饿汉模式、懒汉模式、双重锁懒汉模式、静态内部类模式、枚举模式,我们来逐一分析下这些模式的...转载 2018-12-20 21:12:48 · 125 阅读 · 0 评论 -
Java设计模式---建造者模式
建造者模式,又称生成器模式:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。三个角色:建造者、具体的建造者、监工、被建造的对象、使用者(严格来说不算) 建造者角色Builder:定义生成实例所需要的所有方法; 具体的建造者角色ConcreteBuilder:实现生成实例所需要的所有方法,并且定义获取最终生成实例的方法; 监工角色Director:定义使用建造者...原创 2018-12-20 21:48:16 · 95 阅读 · 0 评论 -
线程的阻塞 sleep() wait() yield()
为了解决对共享存储区的访问冲突,Java 引入了同步机制,现在让我们来考察多个线程对共享资源的访问,显然同步机制已经不够了,因为在任意时刻所要求的资源不一定已经准备好了被访问,反过来,同一时刻准备好了的资源也可能不止一个。为了解决这种情况下的访问控制问题,Java 引入了对阻塞机制的支持。 阻塞指的是暂停一个线程的执行以等待某个条件发生(如某资源就绪),学过操作系统的同学对它一定...转载 2018-12-16 11:23:28 · 2133 阅读 · 0 评论 -
Java设计模式之《适配器模式》及应用场景
Java设计模式之《适配器模式》及应用场景 原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/6479118.html 适配器就是一种适配中间件,它存在于不匹配的二者之间,用于连接二者,将不匹配变得匹配,简单点理解就是平常所见的转接头,转换器之类的存在。 适配器模式有两种:类适配器、对象适配器、接口适配器 前二者在实现上有...转载 2018-12-21 23:05:31 · 95 阅读 · 0 评论 -
JAVA设计模式初探之装饰者模式
定义:动态给一个对象添加一些额外的职责,就象在墙上刷油漆.使用Decorator模式相比用生成子类方式达到功能的扩充显得更为灵活。设计初衷:通常可以使用继承来实现功能的拓展,如果这些需要拓展的功能的种类很繁多,那么势必生成很多子类,增加系统的复杂性,同时,使用继承实现功能拓展,我们必须可预见这些拓展功能,这些功能是编译时就确定了,是静态的。 要点: 装饰者与被装饰者拥有共同的超类,继承...转载 2018-12-22 11:57:00 · 96 阅读 · 1 评论 -
Java的三种代理模式
Java的三种代理模式1.代理模式代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法举个例子来说明代理的作用:假设我们想邀请一位明星,那...转载 2018-12-22 21:03:22 · 101 阅读 · 0 评论 -
java设计模式之外观模式(门面模式)
针对外观模式,在项目开发和实际运用中十分频繁,但是其极易理解,下面就简要介绍一下。一、概念介绍 外观模式(Facade),他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用。 二、角色及使用场景 简单来说,该模式就是把一些复杂的流程封装成一个...转载 2019-01-06 21:27:44 · 137 阅读 · 0 评论 -
设计模式-----桥接模式(Bridge Pattern)
学习设计模式也有一段时间了,今天就把我整理的一篇课程和大家分享,有不妥之处欢迎指出. 生活中的一个例子: 就拿汽车在路上行驶的来说。即有小汽车又有公共汽车,它们都不但能在市区中的公路上行驶,也能在高速公路上行驶。这你会发现,对于交通工具(汽车)有不同的类型,然而它们所行驶的环境(路)也在变化,在软件系统中就要适应两个方面的变化?怎样实现才能应对这种变化呢?概述:在软件系统中,某些类型由...转载 2019-01-06 21:51:30 · 108 阅读 · 0 评论 -
getResource和getResourceAsStream
1. 前言在Java中获取资源的时候,经常用到getResource和getResourceAsStream,本文总结一下这两种获取资源文件的路径差异。2.Class.getResource(String path)path不以'/'开头时,默认是从此类所在的包下取资源;path以'/'开头时,则是从项目的ClassPath根下获取资源。在这里'/'表示ClassPath的根目录。...转载 2019-01-21 17:03:31 · 665 阅读 · 0 评论 -
java中synchronized关键字的用法
java中synchronized关键字的用法在java编程中,经常需要用到同步,而用得最多的也许是synchronized关键字了,下面看看这个关键字的用法。因为synchronized关键字涉及到锁的概念,所以先来了解一些相关的锁知识。java的内置锁:每个java对象都可以用做一个实现同步的锁,这些锁成为内置锁。线程进入同步代码块或方法的时候会自动获得该锁,在退出同步代码块或方...转载 2019-02-14 17:05:43 · 82 阅读 · 0 评论 -
Java范型中? extendsE 和? superE 的作用和区别
这篇文章谈一谈Java泛型声明<? extends E>和<? super E>的作用和区别<? extends E> <? extends E> 是 Upper Bound(上限) 的通配符,用来限制元素的类型的上限,比如List<? extends Fruit> fruits; 表示集合中的元素类型...转载 2019-02-21 15:19:56 · 373 阅读 · 0 评论 -
Java GUI编程基础
概念:GUI(Graphical User Interface):图形用户接口。GLI(Command line user Interface):命令用户接口。Awt:Abstract window Toolkit:抽象接口工具包。java.Awt :重量级控件 更依赖系统。javax.Swing:即xwt 属轻量级控件 依赖系...转载 2019-05-07 12:50:33 · 1706 阅读 · 0 评论 -
java中AWT和SWing的区别与联系
AWT和Swing都是java中的包。AWT(Abstract Window Toolkit):抽象窗口工具包,早期编写图形界面应用程序的包。Swing :为解决 AWT 存在的问题而新开发的图形界面包。Swing是对AWT的改良和扩展。AWT和Swing的实现原理不同: AWT的图形函数与操作系统提供的图形函数有着一一对应的关系。也就是说,当我们利用 AWT构件...转载 2019-04-07 21:45:35 · 266 阅读 · 0 评论 -
Eclipse4.6 出现Could not create the Java virtual machine问题
错误环境: 操作系统---win10家庭中文版 64位 jdk版本-----1.6.0_45 参考eclipse.ini配置文件的官方说明文档----http://wiki.eclipse.org/Eclipse.ini#-vm_value:_Windows_Example主要错误:直接在eclipse官网下载最新的eclipse!而该eclipse的版本仅支持jd...原创 2019-04-07 11:52:02 · 674 阅读 · 0 评论 -
Java中xxx.class.getResource和xxx.class.getClassLoader().getResource()的区别
Java中gegetResource和gegetClassLoader().getResource()的区别xxx.class.getResource()用来从当前类(xxx)所在的目录下(也就是以当前类所在路径为根路径)获得资源;xxx.class.getClassLoader().getResource()用来从classpath路径下(也就是以classpath所在路径为根路径)获...转载 2019-04-01 17:12:04 · 226 阅读 · 0 评论 -
Java基础-原码反码补码
注意,我们这里举列的原码和反码只是为了求负数的补码,在计算机中没有原码,反码的存在,只有补码。一.原码1>.正数的原码就是它的本身 假设使用一个字节存储整数,整数10的原码是:0000 10102>.负数用最高位是1表示负数 假设使用一个字节存储整数,整数-10的原码是:1000 1010二.反码1>.正数的反码跟原码一样 假设...转载 2019-03-23 15:10:55 · 342 阅读 · 0 评论 -
TCP的粘包现象
看面经时,看到有面试官问TCP的粘包问题。想起来研一做购物车处理数据更新时遇到粘包问题,就总结一下吧。1 什么是粘包现象 TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。2 为什么出现粘包现象 (1)发送方原因 我们知道,TCP默认会使用Nagle算法。而Nagle算法主要做两件事:1)只有上一个分组得到确...转载 2019-03-20 17:06:58 · 131 阅读 · 0 评论 -
TCP粘包问题分析和解决(全)
TCP通信粘包问题分析和解决(全)在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的。因此TCP的socket编程,收发两端(客户端和服务器端)都要有成对的socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小、数据量小的数据,合并成一个大的数据块,然后进行封包。这样,接收端,就难于分辨出来了,必须提供科学的拆包...转载 2019-03-20 17:06:14 · 265 阅读 · 0 评论 -
java中byte数组与int类型的转换(两种方式)
java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送、者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形int转换成byte数组,同时如何把一个长度为4的byte数组转换为int类型。下面有两种方式。//第一种方式publicstaticbyte[]int2byte(intres)...转载 2019-03-22 12:08:13 · 1443 阅读 · 0 评论 -
有关线程安全的探讨--final、static、单例、线程安全
我的代码中已经多次使用了线程,然后还非常喜欢使用据说是线程不安全的静态方法,然后又看到很多地方最容易提的问题就是这个东西线程不安全 于是我不免产生了以下几个亟待解决的问题:什么样的代码是天生线程安全的?而不用加锁 线程是否安全的本质是什么? 什么是快速把一段代码变成线程安全的通用方法 final static 单例 线程安全 之间的关系 1、首先我们知道,如果线程只是执行自...转载 2019-02-26 22:38:37 · 238 阅读 · 0 评论 -
单例模式,防止反射和反序列化漏洞
一、懒汉式单例模式,解决反射和反序列化漏洞package com.iter.devbox.singleton; import java.io.ObjectStreamException;import java.io.Serializable; /** * 懒汉式(如何防止反射和反序列化漏洞) * @author Shearer * */public class Singl...转载 2019-02-26 16:18:01 · 292 阅读 · 0 评论 -
Java final 修饰符知识点总结
final从字面上理解含义为“最后的,最终的”。在Java中也同样表示出此种含义。final可以用来修饰变量(包括类属性、对象属性、局部变量和形参)、方法(包括类方法和对象方法)和类。1. final修饰类:final修饰类即表示此类已经是“最后的、最终的”含义。因此,用final修饰的类不能被继承,即不能拥有自己的子类。如果视图对一个已经用final修饰的类进行继承,在编译期间或...转载 2019-02-27 10:57:58 · 127 阅读 · 0 评论