Java
文章平均质量分 78
LenFranky
这个作者很懒,什么都没留下…
展开
-
Java的内部类与向上转型
内部类与向上转型相关文章:内部类及其创建方式在前一篇的文章中,我们讨论了内部类的几种创建的方法,但是,我们会注意到,这些内部类的无论是类的定义还是用来得到其对象的get方法都是public的,因此在其它类中可以直接得到这样的内部类的对象。而在实际的应用中,不同于外部类的只能设计成public与default,很多时候内部类的定义是为private或protected的,此时,我们怎样去使用这...原创 2018-11-21 18:23:20 · 595 阅读 · 0 评论 -
Java中负数的右移
我们知道,在Java中常用的位移运算有三种,分别是:<<(左移)、>>(带符号右移)和>>>(无符号右移)。这一次,我们来看一下其中的带符号右移运算符>>在负数计算时的效果。首先,是一段测试代码:public static void main(String[] args) { int num = -10; System...原创 2019-06-11 17:03:53 · 3241 阅读 · 2 评论 -
从源码分析:分析Java中的StringBuilder
我们知道,在java中,如果要对于一个字符串进行操作,比如增删操作,如果直接用+来进行的话,效率是比较低的。作为替代,我们一般使用StringBuilder来进行这样的操作。所以,这一次,我们就来研究一下StringBuilder的源码构造函数public final class StringBuilder extends AbstractStringBuilder impl...原创 2019-07-12 17:10:15 · 188 阅读 · 0 评论 -
IDEA中实现接口时注解@Override报错的解决方法
今天在写代码时,准备实现一个自己写的接口的时候,发现如果在需要实现的方法前面加上@Override注解,这个注解是标红的,即被IDE认为是错误的。上网查阅资料后发现,原来在JDK5时,当时的设计者认为,对于接口的实现时各个方法是不算做Override的,因此@Override注解是不应该用在这种情况的,而在JDK6之后,规则修改为允许在实现接口方法时使用。因此,如果我们需要使用这个注解,必须保...原创 2019-07-14 13:30:47 · 4298 阅读 · 0 评论 -
Java中的SPI的使用例子
首先,看一下总体的结构图:在src的main中,我们定义了com.lf这样一个路径,下面有两个包,首先我们看一下API包中,我们定义了一个接口MyPrinterAPI:package com.lf;import com.lf.API.MyPrinterAPI;import java.util.ServiceLoader;public class testClient { ...原创 2019-07-14 14:07:41 · 493 阅读 · 0 评论 -
从源码分析:Java中的SPI是怎样工作的
spi介绍提到api,大家或多或少地都接触或者使用过,但是如果说到spi呢,可能了解的人就要少一些。Java SPI的全称为Service Provider Interface,相对于api来讲的话,简单来说,api是提供给用户来进行使用的,而spi是提供给开发者来进行扩展的。也就是说,当我们使用spi的时候,从最基本来说,是基于接口的编程的方式,通过配置文件来实现动态加载,而在编写客户端程序...原创 2019-07-15 09:07:10 · 89 阅读 · 0 评论 -
从源码分析:Java中的split()方法
从字符串中出现多次空格时使用’split()'说起我们一般在使用java中的字符串类String中的split()时,比如希望用空格将其隔开时,往往会默认每次只有一个空格出现,那么若出现多个空格,会发生什么呢?这里,我们可以做一个简单的测试:public class JavaSplitTest { public static void main(String[] args) { ...原创 2019-07-11 16:55:47 · 372 阅读 · 0 评论 -
从源码分析:Java中的Map(三)详解Java中HashMap的常用方法(构造方法、get、put等)
在上一章中,我们看过了HashMap的结构,并了解了其用于储存数据的两个基本的数据结构,那么这一篇文章中就可以来具体地看一看一些具体的方法了。HashMap的构造方法首先,我们来看一看HashMap的成员变量:public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>...原创 2019-07-18 15:24:18 · 345 阅读 · 0 评论 -
从源码分析:Java中的Map(一)Map接口与AbstractMap抽象类
HashMap的继承结构Java中,我们最常用的map类型可能就是HashMap了,这一次介绍的重点也在HashMap上面。但是,在我们详细分析HashMap之前,我们先来看一下HashMap的继承结构:Java中的Map接口从上面的继承结构中,可以看出,Java中的HashMap是接口Map的一个实现类,因此,在我们分析HashMap之前,不妨先来看看Map接口。首先,我们来看一下Ma...原创 2019-07-17 16:38:25 · 479 阅读 · 0 评论 -
从源码分析:Java中的Map(二)Java中HashMap的内部类
HashMap介绍在一起看HashMap的源码之前,在这里想要先简要介绍Java8中的HashMap的大体的结构。在前面一章中,我们看到了抽象类AbstractMap中的许多操作都是基于遍历的方式来进行的,比如查找,这样的操作的效率是很低的。HashMap中采用了哈希表的方式来提高效率,并用数组来表示这个哈希表,而初始化时为了节约内存,一般不会设置很长的数组,因此不可避免地会出现哈希冲突,即多...原创 2019-07-17 19:31:02 · 938 阅读 · 0 评论 -
从源码分析:LinkedHashMap的get方法
LinkedHashMap中重写了HashMap的get方法,不止会取出所索要的节点的值,而且会调整LinkedHashMap中内置的链表中该键所对应的节点的位置,将该节点置为链表的尾部。public V get(Object key) { Node<K,V> e; if ((e = getNode(hash(key), key)) == null) ...原创 2019-08-19 16:01:18 · 904 阅读 · 0 评论 -
从源码分析:java中的线程池ThreadPoolExecutor
属性// pool control stateprivate final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));private static final int COUNT_BITS = Integer.SIZE - 3;private static final int CAPACITY = (1 <&l...原创 2019-08-27 16:26:38 · 93 阅读 · 0 评论 -
java中Boolean的比较
Boolean boolean1 = new Boolean(true);Boolean boolean2 = new Boolean(true);System.out.println(boolean1 == boolean2);System.out.println(boolean1.equals(boolean2));输出:falsetrue即,boolean1与boolean...原创 2019-08-28 13:45:18 · 9173 阅读 · 0 评论 -
java中关于BigDecimal用法的思考
public class DoubleEqualTest { public static void main(String[] args) { double num1 = 30.0000000000000003; System.out.println(num1 == 30); BigDecimal bigNum1 = new BigDeci...原创 2019-08-28 17:10:54 · 116 阅读 · 0 评论 -
多线程打印数字
package learning_java.Exercise;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock...原创 2019-09-02 11:05:05 · 170 阅读 · 0 评论 -
生产者消费者模型
import java.util.*;import java.util.concurrent.*;import java.util.concurrent.locks.*;public class ConsumerProducer { private static Buffer buffer = new Buffer(); public static void main(S...原创 2019-09-02 11:05:51 · 113 阅读 · 0 评论 -
java 归并排序与快速排序
归并排序private static void merge(int[] nums, int[] tempArray, int leftPos, int rightPos, int rightEnd) { int leftEnd = rightPos - 1; int currPos = leftPos; int allNum = rightEnd - leftPos + ...原创 2019-09-02 14:46:13 · 146 阅读 · 0 评论 -
从源码分析:Java中的AQS
获取锁public final void acquire(int arg) { // 首先通过tryAcquire尝试获得锁 // 如果未能成功获得锁,则进入acquireQueued if (!tryAcquire(arg) && // 以独占模式生成节点并添加到队列的尾部 acquireQueued(addWaiter(Node...原创 2019-09-07 16:12:00 · 85 阅读 · 0 评论 -
OJ平台(牛客等)中Java的输入方法
之前做题主要是在leetcode里做的,在leetcode平台,做题的时候只需要完成所给的函数,使用时,输入为函数输入的形参,输出为程序的返回值。而在牛客网上的题目,包括一些竞赛时的题目,型式为输入的是从控制台键入的几行数据,而输出是直接将结果打印到控制台,因此,这里将所遇到的输入的格式即对应的代码放在这里。基本格式及所需的库在Java5中引入了Scanner库,这个库在日常使用中是非常方便的...原创 2019-06-03 19:08:07 · 5883 阅读 · 8 评论 -
Java中的左移时的负数问题
java 中的左移的运算符为<<,其作用是返回把左侧的数字左移右侧数字的位数的结果,其规则为:丢弃最高为,0补最低位。因此,左移可以用作乘2操作的一个高效的实现。但是使用的时候要注意符号位的问题,如下:public void shiftTest() { int n = 1; while (n != 0) { n = n << 1; ...原创 2019-06-03 11:12:05 · 3266 阅读 · 0 评论 -
Java的匿名内部类
相关文章:内部类及其创建方式内部类与向上转型什么是匿名内部类在开始本文之前,我们先来看一下我们的老朋友PizzaStore这一次是怎样出现的吧:// Pizza.javapublic interface Pizza { public void getName();}// PizzaStore.javapublic class PizzaStore { publi...原创 2018-11-23 20:52:18 · 136 阅读 · 0 评论 -
Java的内部类及其创建方式
内部类及其创建方式引言在定义类时,我们可以将一个类定义在另一个类的内部,此时这个类便被成为内部类。内部类是一种非常有用的特性,因为它允许你吧一些逻辑相关的类组织在一起,并控制位于内部的类的可视性。然而必须要了解,内部类与组合是两种完全不同地方概念,这一点很重要。在一开始,内部类看起来可能想hi是一种代码的隐藏机制,仅仅是用来将类的定义放置在其他的类的内部,但是,随着对于内部类的不断了解,我...原创 2018-11-20 10:14:52 · 2041 阅读 · 0 评论 -
怎样在IDEA中查看GC日志
引言今天在看书的时候,在讲到垃圾收集器与内存分配策略的章节时,文中有如下一段代码:public class ReferenceCountingGC { public Object instance = null; private static final int _1MB = 1024 * 1024; private byte[] bigSize = new byt...原创 2018-11-26 15:31:48 · 7981 阅读 · 5 评论 -
Java中如何获得一个对象所对应的类及Class类的简单理解
Java中如何获得一个对象所对应的类及Class类的简单理解前言在之前的学习中,所用的编程语言主要是Python,最近开始学习Java,熟悉Python的同学应该会知道在Python中有一个函数type(),通过这个函数可以非常方便地获得一个变量的类型。那么在Java中可不可以实现类似的功能呢?答案当然是可以的,一个比较简单的方法就是利用Java中Class类来实现。利用Cla...原创 2018-08-09 19:57:10 · 5983 阅读 · 0 评论 -
Java中类的比较与排序方法(应用Comparable接口与Comparator接口)
引言在平时写Java的程序的时候,如果要进行一些基本类型的变量的比较,可以很方便得调用’Math.max()’、Math.min()等方法,如果要对数组或者列表进行排序,也可以用Arrays.sort()和Collections.sort()等已经封装好的方法来进行。但是,如果是一个自定义的类的对象呢?比如自定义的两个图形、两个日期等,这时,应该怎么对这些对象进行大小比较乃至排序呢?基本类型及...原创 2018-12-01 16:11:21 · 1148 阅读 · 1 评论 -
多线程基础知识(一) 线程的概念及创建任务与线程
线程的概念及创建任务与线程引言多线程使得程序中的多个任务可以同时执行。java的重要功能之一就是内部支持多线程————在一个程序中运行同时运行多个任务。在许多程序设计语言中,多线程都是通过调用依赖于系统的过程或函数来实现的。在本文中,将介绍线程的该奶奶及如何在Java中运行一个多线程的例子。一、线程的概念概念首先,何谓线程? 一个程序可能包含多个可以同时运行的任务,线程是指一个任务...原创 2019-01-01 16:48:48 · 654 阅读 · 0 评论 -
多线程基础知识(二) 线程的Thread类
线程的Thread类Thread类包含为任务而创建的线程的构建方法,以及控制线程的方法。首先,我们可以看一下Thread类的UML图:Thread类还包含方法stop()、suspend()和resume()。由于普遍认为这些方法具有内在的不安全因素,所以,在Java中现在并不体长使用这些方法,为替代方法stop()的使用,可以通过给Thread的变量复制null来表明它已经停止。可...原创 2019-01-23 14:33:43 · 170 阅读 · 0 评论 -
java中int与char之间的互相转化
在java中int与char之间的互相转化引言数据类型在介绍int与char的转换之前,我们先来回顾一下java中的基本数据类型:| 类型 | 大小 | 包装器类型 || boolean | - | Boolean || char | 16-bit | Character || byte | 8 bits | Byte || short | 16 bits | Short |...原创 2019-04-28 15:38:12 · 56490 阅读 · 6 评论 -
按照树形结构直观地打印出一棵二叉树(Java)
平时无论是工作还是学习中,在写代码时,树总是一个非常常见的数据结构。在我们完成一棵树的构建之后,如果我们想要看这棵树的结构,不像数组或者List等数据结构,我们可以非常方便地用各种方式将其中的所有元素打印出来,对于树而言,这个过程要麻烦得多,我们可以用各种遍历方式得到这棵树的结构,但是终究还是不够直观。不知大家有没有想过,如果我们可以按照树的结构,将其打印出来就好了,那么本文就是一种实现这...原创 2019-04-28 20:58:09 · 10301 阅读 · 8 评论 -
Java中赋值语句的返回值(通过反编译来分析)
引言今天在看书的时候,看到了一句:return (count = ++ temp;)看到这行代码的时候,有点莫名其妙,因为以前并没有见过类似的用法。仔细想想,这里的返回的应该是count = ++ temp这一语句的返回值,而这是一个赋值语句,那么在Java里的赋值语句的是否有返回值呢?接下来,博主就准备自己动手试一下。Java中赋值语句的返回值首先,准备了一个简单的例子来实验:/...原创 2019-05-13 20:06:38 · 1058 阅读 · 0 评论 -
如何直观地打印一个链表
在我们平时的代码过程中,像在这篇如何直观地打印一棵树里提到的树一样,链表同样是我们经常遇到的一个数据结构,它非常的简单,但是Java语言并不能直接将一个链表打印出来,如果每次都写代码将其输出,或者用Debug工具查看的话,又有些麻烦,所以我就把打印链表的代码封装到一个工具类里来使用,在这里贴出来以供参考。引言在本文中所用的链表的结构,是leetcode中所用的链表的结构:// ListN...原创 2019-05-06 17:20:59 · 2149 阅读 · 0 评论 -
如何通过数组或字符串直观地创建链表
在前段时间集中做了leetcode上树的相关的题目之后,最近准备做链表相关的题目了。与之前的问题相同,如果每次测试代码的时候,自己创建测试用例,或者调用leetcode给的例子,都要手动去创建一个链表的话,效率未免太低,也会打断做题时候的思路,因此,也整理出了一个用来创建链表的代码,贴出来以供参考。相关文章这里有可以参考的创建和直观展示一棵树的方法:如何直观地打印一棵树如何直观地创建一...原创 2019-05-06 19:46:09 · 1065 阅读 · 1 评论 -
Java中的lastIndexOf函数的fromIndex参数
首先是一段测试代码,在后面有详细的解释public class LastIndexOfTest { public static void main(String[] args) { String s = "a ab abc abcd"; System.out.println(s.lastIndexOf("a")); System.out.p...原创 2019-05-20 10:33:22 · 1981 阅读 · 0 评论 -
从源码分析:java中怎样判断List是否相等(euqlas()方法)
Java中两个基本类型,比如说两个整型非常容易判断其是否相等,那么如果是两个List的实例呢?测试代码List<Integer> list1 = new ArrayList<>();List<Integer> list2 = new ArrayList<>();List<Integer> list3 = new ArrayLi...原创 2019-05-15 15:50:35 · 3660 阅读 · 0 评论 -
java中打印数组
public class IOTools { public static void print(int[] nums) { System.out.print("["); if (nums.length == 0) { System.out.println("]"); return; } ...原创 2019-05-15 21:33:29 · 750 阅读 · 0 评论 -
java中创建文件并写入的方法
import java.io.*;public class CreateFile { public static void main(String[] args) { String path = "E:\\a\\s"; File file = new File(path); if (!file.exists()) { ...原创 2019-09-18 21:34:38 · 254 阅读 · 0 评论