
Java核心
王锦春
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
转发和重定向的区别
转发重定向总结转发是服务器端的跳转,而重定向是浏览器的跳转。注意:使用request域对象进行数据共享时,只能使用转发。原创 2019-10-24 17:29:22 · 175 阅读 · 0 评论 -
java接口和抽象类
首先,我们先确定接口不是类,而是对类的一组需求描述,这些类要遵从接口描述的统一格式进行定义。接口技术主要用来描述类具有什么功能,而不给出每个功能的具体实现,这和抽象类有点像。接口...原创 2019-06-09 00:01:09 · 155 阅读 · 0 评论 -
Java128陷阱
当我们在比较Java中Interger类型的数据时,有时候会发现两个明明相同的值,最后比较的结果为false,这是为什么呢?这就要了解一下我们常说的“128陷阱”在Java中,Interger是数据类型int的封装类,当Interger类型的数据在(-128~127)中时,Java比较是按照基本数据类型来比较的,也就是我们说的(值类型比较);而当interger表示的数据超过了这个范围,就是按照...原创 2019-06-14 15:45:01 · 558 阅读 · 0 评论 -
常见的状态码信息
我们在浏览网页时经常会看到一些错误代码,那这些代码是什么意思呢?这也是关于网络知识方面的很常见的面试题。一、HTTP状态码用户试图通过 HTTP 或文件传输协议 (FTP) 访问一台正在运行 Internet 信息服务 (IIS) 的服务器上的内容时,IIS 返回一个表示该请求的状态的数字代码。该状态代码记录在 IIS 日志中,同时也可能在 Web 浏览器或 FTP 客户端显示。状态代码可以指...转载 2019-06-17 09:51:13 · 721 阅读 · 0 评论 -
Java中Arraylist的add()和remove()方法
虽然ArrayList是可变数组,但是为了提高性能我们在使用中应尽量提前估算容量,add()的时间复杂度为O(1),但是扩容会拉低性能,所以定义时应估算容量,减少扩容次数;remove()方法,每次删除要移动后边数组,所以时间复杂度为O(n),为提高性能,尽可能删除最后的数据。一.Add()源码解析数组扩容这是对ArrayList效率影响比较大的一个因素,虽然ArrayList可以自己扩容,...转载 2019-06-19 19:42:24 · 12948 阅读 · 0 评论 -
Java重写compareTo方法的原理分析和具体实现
原理分析当我们想排序一个自定义的数组,Java又没有直接提供它们的比较方式时。我们可以通过实现接口Comparable并重写compareTo()方法来添加对自定义数组的比较,然后通过Arrays的sort()方法来将这个数组排序。有些同学就要问了:为什么重写了compareTo()方法就可以通过Arrays.sort()来进行排序了,我们可以通过源码来解释:我们从源码可以看到调用Arr...原创 2019-06-20 00:18:01 · 20286 阅读 · 2 评论 -
内部类详解
内部类的定义和优虐内部类是定义在另一个类中的类。内部类有以下优点:内部类可以访问该类定义所在的作用域中的数据,包括私有的数据。内部类可以对同一个包中的其他类隐藏起来当想定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。借助内部类可以实现多继承。内部类的缺点:其他类可以通过一个类的内部类来访问这个类的私有成员内部类本身不能有static方法,但可以访问外围类的静态域和...原创 2019-06-20 10:17:27 · 229 阅读 · 0 评论 -
史上关于Java字符串和intern()的最详解释(不看后悔)
不可变字符串我们都知道Java中字符串是不可变的,可是还是会有很多小伙伴会对这产生误解,那是对字符串的理解存在一些小缺陷。看下面的代码:String str1="aaa"; str1="bbb";有些小伙伴看到这就会产生疑问了:你明明说字符串是不可变的,为什么上面的变量str1可以不断变化呢?这就需要知道上边的变量str1并不是一个真正意义上的字符串对象本身,它只是字符串的引...原创 2019-06-22 18:10:17 · 881 阅读 · 2 评论 -
java反射+代理及其在框架中的使用情况
反射(reflect)反射是什么?官方解释是能够分析类能力的程序称为反射,也就是说反射在解析时可以获取类的信息。为什么会有反射这个概念呢?这是因为一个类当你无法获取它的实例,却又想对这个类的实例进行管理时就需要反射来实现。下面我们一步步来对反射进行深入了解:我们知道和反射有关的类主要有5中:Class类(对应类的结构信息)Field类(对应类的域)Method类(对应类成员方法)Con...原创 2019-08-27 21:01:28 · 322 阅读 · 0 评论 -
史上最易懂的快速排序
根据百度百科的介绍,快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分(分治),其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。具体链接或许上面太过抽象,简而言之,快速排序就是让一个数的左边都小于它,右边都大于它,然后递归的调用这个数的两边;最后每个数都大于它左边的数,小于它...原创 2019-06-05 01:15:20 · 248 阅读 · 0 评论 -
java类型转换精度丢失
在进行详细讲解之前,先看看数值类型之间的合法转换: 从图中我们可以看出存储占用字节少的类型向存储占用字节多的类型转化不会丢失精度,而存储占用字节多的类型向存储占用字节少的类型(包括占用字节一样的类型)转换都可能发生精度丢失,那么为什么会造成精度丢失呢?看下面例子。直接转换引起的精度丢失就拿int转换float来解释吧:我们知道int是4个字节3...原创 2019-06-03 20:19:05 · 2234 阅读 · 1 评论 -
stringbuilder原理Java
我们知道String可以可以看作是数组,长度是不可变的(也就是我们常说的不可变字符串)。String实际上是内部封装成数组,但不代表字符串本身就是个数组。也就是说,我们不能像访问数组一样通过首地址+索引的方式来访问字符串,但String类型中封装了一系列的API接口来实现它,像charAt();那么如果我们想将字符串实现想动态数组那样可以动态添加字符...原创 2019-06-03 15:19:59 · 564 阅读 · 0 评论 -
java中关于方法参数的介绍
要了解Java中参数传递的原理,首先你要先知道按值传递和按引用传递的区别。按值传递表示方法接受的是调用者提供的值,按引用传递表示方法接受的是调用者提供的变量地址。一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值。而Java程序设计语言总是采用按值调用,也就是说,方法得到的是所有参数值的一个拷贝。下面我将举一些实例来具体说明:#基本数据类型public static v...原创 2019-04-10 20:37:13 · 5460 阅读 · 0 评论 -
Java中静态块,初始化块及构造函数的执行顺序
我们可以将执行顺序大致看作: 1. 静态成员变量 2. 静态代码块 //静态的域或方法只在加载类时执行一次...原创 2019-04-10 22:12:03 · 487 阅读 · 1 评论 -
java中方法调用
java方法调用的过程主要分为2个阶段:(假设要调用x.f(args),隐式参数x是对象C的一个对象):1.编译器首先查看对象的声明类型和方法名。 编译器在编译时首先会一一列举出所有C类中名为f的方法和其父类中访问属性为public且名为f的方法 到这,编译器已经获得了所有可能被调用的候选方法。2....原创 2019-04-24 21:10:44 · 689 阅读 · 0 评论 -
javaArrayList
我们知道,数组是静态的,只有当它的大小确定了才能给它初始化赋值,而且这个大小是不能被修改的,所以有时候你刚开始不确定你要输入数据的多少时,简单的数组不好实现(万一你输入的数据多于数组大小时,就会报错:数组溢出),为此java引用了" 数组列表".数组列表格式如下:ArrayList<参数类型> 变量名字= new ArrayList<参数类型可以没有>(容量大小也可以不...原创 2019-05-05 15:55:00 · 3524 阅读 · 0 评论 -
java数组和文件存储压缩原理
数组压缩原理 我们知道基本数据类型的大小是固定的,比如int32位(1b),而一个物理存储单元占4kb,若只存一个int类型的话,会浪费非常大的物理空间。所以就有了压缩技术。当你存储固定大小的变量数组时,操作系统会将全部的数组单元存放到同一个物理存储单元中(当数组的大小没有大于存储空间时),可以通过该存储单元的地址+索引来获取数组中的各个元素,这样就...原创 2019-06-02 22:48:46 · 919 阅读 · 0 评论 -
变化的数据为什么不能压缩
我在之前已经提到了固定长度的数组为什么可以压缩,可以和之前比较来学习,具体可以参考:数组压缩的原理。现在我们说说为什么变换的数组不能压缩。我们可以通过下面的图来了解一下:从图中我们可以了解到,如果可变数组可以压缩,那么当可变数据发生变化时,可能导致整个数组的改变,这不是我们想要的结果,所以说可变数据是不能压缩的。...原创 2019-06-02 23:23:20 · 255 阅读 · 0 评论 -
Java匿名对象的性能优势分析
什么是匿名对象?匿名对象就是一个未命名的对象,可以参考:那么匿名对象相比于正常对象有什么优势呢?我们可以从上图发现匿名对象没有栈中的对象名,使用这种语法形式可以在不创建新变量的情况下重新初始化一个对象,这样就可以省略因为创建新变量而产生的存储消耗(存储变量a的消耗),地址管理(变量存储对象的物理地址)等损失...原创 2019-06-02 23:50:02 · 407 阅读 · 0 评论 -
数值类型乘除的优化位运算原理
我们知道数值类型的位运算要远比乘除运算要快的多,这是因为位运算只需要移动几下位模式就行,时间消耗非常小,而乘除运算就得运算乘数次的加法运算;比如:256<<2 这是将256的二进制向左移动了2位,相当于256*4256*4 256直接乘以4(2^2)两者的结果是一样的,再运算量很小时,可能看不出时间损耗差异,但当运算量特别大时,时间损耗的优虐就会显现出来(运算...原创 2019-06-03 00:43:55 · 252 阅读 · 0 评论 -
关于浮点数的存储及转换
#关于浮点数float的存储浮点数是用于表示带有小数部分的数值。java中有两种浮点类型:float和double。所有的浮点数值计算都遵循IEEE754规范。具体的说,有三种溢出和出错情况的特殊浮点数值:1.正无穷大:一个 正整数除以02.负无穷大:一个负整数除以03.NaN:0/0或者负数的平方根。float类型float类型的数值后带有后缀f或F。没有后缀的浮点型默认是doub...原创 2019-03-22 16:43:04 · 2540 阅读 · 0 评论