java
文章平均质量分 53
林敏锐丶
驽马十驾 功在不舍
展开
-
List 的两种遍历
两种遍历分别指的是java.util.List#replaceAll和java.lang.Iterable#forEach 对于replace来说,参数是一个UnaryOperator,遍历集合的时候,会把元素传给UnaryOperator,然后把返回值set到list中,也就是说这种遍历是会改变原来集合的 default void replaceAll(UnaryOperator<E> operator) { Objects.requireNonNull(opera原创 2020-12-09 23:16:42 · 329 阅读 · 0 评论 -
java stream 学习
1、forEach 是一个终端操作 Arrays.stream(arrayOfEmps).forEach(v -> v.setPoint(10)); Arrays.stream(arrayOfEmps).forEach(v-> System.out.println(v.getName()));2、collect 是说将处理完的数据按照某...原创 2020-04-20 19:04:12 · 241 阅读 · 0 评论 -
effecitve java 6 过期引用
看这个出栈操作,看上去好像没有什么毛病,用书中提供的完整代码进行运行也没有什么问题 private Object[] elements;private int size = 0;public Object pop(){ if(0 == size){ throw new EmptyStackException(); } return element[-...原创 2020-04-16 22:49:55 · 165 阅读 · 0 评论 -
effecitve java 5 当你应该重用现有对象的时候,不要创建新对象
通过例子来看重用对象的好处 String类型 当写了这样子的代码 String test = new String("123"); 的时候,实际上创建的不是一个对象,而是两个,可以由String的源码来印证,这个构造方法传入的就是一个String对象,然后把这个String的值复制了一遍,返回这个复制后的String public String(String original) ...原创 2020-04-11 16:49:33 · 143 阅读 · 0 评论 -
effecitve java 4 singleton 2
在java中的工具类是不希望被实例化的,像java.lang.Math 或者 java.util.Arrays 不可以故意将一个类设计成抽象类来说明他不可以被实例化,这样子会诱导使用者觉得它是用来继承的,但是继承的子类又是可以实例化的。 好的做法是将构造器私有化,这样子话一来这个类不可以直接实例化,二来这个类也不可以被继承 public class StrongAbilityTest {...原创 2020-04-11 15:08:29 · 131 阅读 · 0 评论 -
effecitve java 3 singleton 1
要保证单例,那么就必须将构造器私有化,然后提供静态变量或者静态方法供客户端访问。 使用静态变量实现单例,这个静态变量应该是用final修饰的,保证他不会指向其他新创建的对象,他应该是静态的原因是因为这个类只有这一个对象,所以除了通过类找到它之外没有其他的手段可以访问到这个对象,穿插的知识点是:如果想要防御客户端通过反射执行构造方法获得对象的话,可以在构造方法里加判断,抛出异常 packag...原创 2020-04-11 14:35:59 · 110 阅读 · 0 评论 -
effecitve java 2 构建器
当一个类的参数有很多个的时候,有比较好构建方法 比如这个类有四个参数,可以使用几个构造器,其中一个参数的构造器调用两个参数的构造器,两个参数的构造器调用三个参数的构造器,三个的调用四个的,这种方式叫做重叠构造器 package constructors.builder;public class NutritionFacts { private final int serving...原创 2020-04-06 21:41:57 · 98 阅读 · 0 评论 -
effecitve java 1 静态工厂
什么是静态工厂的作用类似构造器 public static Boolean valueOf(boolean b){ return b ? Boolean.TRUE : Boolean.FALSE;} 与构造器相比,使用静态工厂有以下好处 静态工厂可以有名字,但是构造器是没有自己的名字的,他的名字只能和类名相同,就像BigInteger.problePrime方法一样。...原创 2020-04-06 15:29:19 · 125 阅读 · 0 评论 -
redis单线程为什么速度快
1、基本概念:一块2.gGHz的CPU,一秒可以处理2.6*10^9 条命令,一条指令就是0.38ns,切换一次线程耗时2000ns,切换线程开销是大的。2、那为什么有多线程:硬盘存取时间远远大于内存。当cpu在等待硬盘的时候,它可以先去做别的事情,比如等硬盘要一个小时,保存现场需要十五分钟,那就还有剩下的四十五分钟可以利用,不用cpu一直在等硬盘。3、redis特性:redis是基于内存的...原创 2020-03-30 09:54:19 · 113 阅读 · 0 评论 -
工厂模式
本篇不是原创,而且只是使用了最简单的方法实现工厂模式,是对网上内容的理解总结~~1、先说说设计模式,设计模式其实不是什么高深的概念,其实就是开发设计的惯性思维~~2、最简单的工厂模式: 1、最简单的工厂模式应先当有一个接口,通过不同的实体类来实现,然后再由工厂类来实现这些实体类,面向接口编程思想也是很重要的编程思想,在mybatis中就有很好的体现。当实体类需要更改的时候,程...转载 2018-07-17 20:48:54 · 150 阅读 · 0 评论 -
java API文档
听师兄说,不会使用api的都是门外汉~~java的api下载其实很容易,使用也非常方便 具体下载步骤: 先给出下载网址 进入网站之后找到有 documentation字眼对应的下载,点击就可以下载了,像下面这样子 具体使用步骤: 下载之后打开index.html ...原创 2018-07-17 21:12:22 · 2371 阅读 · 1 评论 -
单例模式
第一篇博客,有点紧张~~一步一步来吧,从简单的开始~~1、单例模式: 使用了单例模式的类就只创建一个实例,其他类使用改类的方法或者变量时不会再创建出新的对象。 单例模式的使用: 1、将构造器隐藏起来。 2、声明一个类型为自身的变量。 3、通过一个获取实例的方法以便其他类使用改类的实例。以下为具体代码:...原创 2018-07-15 16:44:58 · 120 阅读 · 0 评论 -
==
1、这是第二篇~~2、== 1、== 运算符当比较两个基本类型变量的时候,如果两个基本类型变量的值相同则返回true,如果不同则返回false,值得注意的是, == 并不要求类型相同,如果是数字的话只要两个数字的差为零即可。 2、当== 两端是引用类型变量的时候,==比较的是两个是否是同一个实例,也就是两个引用类型变量必须指向同一个对象才返回true,虽说java里没有提到...原创 2018-07-15 17:02:15 · 127 阅读 · 0 评论 -
java泛型(4) 泛型方法
由于对于一个集合来说,Collection<String>,Collection<Integer>都不是List<Object>的子类,所以在将集合作为方法的参数的时候Collection<Object>并不但能说是Collection<String>,Collection<Integer>的父类从而替代这两个类型的集合,示例...原创 2018-08-10 20:08:11 · 3291 阅读 · 0 评论 -
java泛型(5) 擦除与转换
先说明一下擦除的原理。在java中,允许吧带有泛型的变量赋值给不带泛型信息的变量,但是一旦这样做的话,所有关于方形的信息就会丢失,比如把List<String>赋值给List的话,泛型信息<String>就会丢失,也就是说List中所有集合元素的类型都是Object了。 以下是第一个代码示例,本来a是带有泛型信息,但是b没有,所以在赋值过程中泛型信息就丢失了,b中的T的类...原创 2018-08-16 09:50:52 · 680 阅读 · 0 评论 -
java泛型(6)泛型数组
首先要指出的是java中只能声明Lisy<String>[]这样的数组,但是不能创建ArrayList<String>[10]这样的数组对象,但是ArrayList[]是可以的,下面是两个简简单单的代码示例,注意的点穿插在代码中 package GenericAndArray;import java.util.ArrayList;import java.util....原创 2018-08-16 10:49:36 · 1182 阅读 · 0 评论 -
java异常处理(1) 异常捕获代码实例和常见的异常捕获种类
异常捕获,其本质就是程序员希望有一个if...else代码块,可以将影响程序运行的情况包括进去: if(发生了影响程序运行的事件){ 执行处理该事件的应对方法}else{ 程序正常运行} 由此,我们就可以有对异常捕获的基本认识 java中异常捕获和处理可以用try..catch代码块来实现,把可能发生异常的代码放在try中,一单代码发生异常,系统就会...转载 2018-08-16 20:00:12 · 4881 阅读 · 0 评论 -
java异常捕获(2) 获取异常的详细信息
如果需要访问异常对象的详细信息,可以在catch代码块中调用对应的方法来访问 以下几个方法为获取异常相关信息: getMessage()返回改异常信息的详细描述 printStacktrace()将改异常的跟踪栈信息输出到标准错误输出 printStackTrace(PrintStream S)将该异常信息输出到指定的输出流 getStarckTrace()返回该异常的跟踪栈信息...转载 2018-08-16 20:45:53 · 7136 阅读 · 0 评论 -
java异常捕获(3)finally代码块
在异常捕获中,有时会有需要显示地回收一些物理资源(java垃圾回收机制是不会回收物理资源的,它只会回收堆内存中对象占用的内存) 如果在try中回收资源的话,那么处在抛出异常之后的代码将没有机会执行,这样一来回收资源的语句就不会被执行了,如果在catch中回收的话,可能因为catch代码块没有执行导致资源没有回收,这个时候就有了finally代码块存在的意义,只要没有执行退出虚拟机的操作,fina...转载 2018-08-16 21:04:58 · 416 阅读 · 0 评论 -
java输入输出(1) 基本 文件操作
java可以通过File类来操作文件和目录(文件夹),创建File类实例的时候可以通过传入文件的路径,可以是绝对路径,也可以是相对路径,"."表示在当前目录下创建File实例,以下为File类一些方法的示例 import java.io.File;import java.io.IOException;public class FileTest { public static vo...原创 2018-08-26 09:52:16 · 132 阅读 · 0 评论 -
java输入输出(2)文件过滤器
可以通过实现FilenameFilter接口来构造文件过滤器,FilenameFilter接口有个accept方法,该方法将以次对指定的File的所有子目录或者文件进行迭代,但需要注意的是,这个方法并不是返回满足条件的文件以及目录,而是返回 一个布尔值,如果该方法返回真 ,那么file实例的list方法就会列出满足条件的文件和目录。以下为代码实例,具体的讲解穿插在代码中 import java...原创 2018-08-26 10:08:19 · 177 阅读 · 0 评论 -
java输入输出(3)输入流
java的输入输出流可以方便地实现数据的输入输出操作,在java中把不同的输入输出源(键盘,文件,网络连接)抽象地买描述成“流”,“流”可以分为字节流和字符流,字节流以字长为8位的字节为处理对象,字符流操作的是数据单元为16位的字符流。 “流”可以想象成一根水管,里面的数据可以想象成“水滴”,字节流的每一滴水滴为8位字长的字节,字符流位16位字长的字符流。 下面为一个简单的文件输入流处理实例,...原创 2018-08-26 15:31:19 · 111 阅读 · 0 评论 -
java输入输出(4)输出流
这是我看李刚编著的《疯狂Java讲义》后总结出来的。文件的输出流和输入流的用法基本一致,可以通过查阅java的官网文档来查阅更多使用的方法 以下为输出流实例,当程序运行完毕之后,可以看到test.txt内容FileOutputStreamTest.java的内容一致 这是我看李刚编著的《疯狂Java讲义》后总结出来的。 import java.io.FileInputStream;...转载 2018-08-26 15:52:30 · 97 阅读 · 0 评论 -
java输入输出(5)处理流的用法
在java程序中,流的处理可以“嫁接”在其他流之上,也就是流的包装,这种流叫做处理流,处理流使得底层设备上的差异得以隐藏,程序员无需在关具体的低级流的操作,执行效率也得以提高。以下为处理流的一个简单示例,具体的讲解穿插在代码之中。 import java.io.FileOutputStream;import java.io.IOException;import java.io.PrintS...原创 2018-08-26 19:40:47 · 273 阅读 · 0 评论 -
java异常捕获(4) throws关键字
java throws关键字是跟在方法名之后的,一个thrwos后面可以跟至少一个的异常类型,它的作用是:当前方法可能会抛出异常,但是不知道如何处理该异常,就将该异常交由调用这个方法的的上一级使用者处理,如果main方法也不知道如何处理这个异常的时候,就会交由JVM来处理这个异常,JVM的做法是:打印异常的跟踪栈消息,并终止程序。以下代码示例为最简单的throws的用法: package T...转载 2018-08-17 09:07:31 · 13982 阅读 · 0 评论 -
java异常捕获(5)自定义异常类
java中允许自定义异常类,以便对在程序的具体环境中出现的不符合特定而出现的异常进行处理,定义异常类的时候通常需要两个构造方法,一个无参,一个字符串为参数的构造方法,这个传入的字符串将用作就是getMessage所得到的描述信息,如果是Checded异常应当继承于Exception类,如果是Runtime异常应当继承于RuntimeException以下为代码示例 package Throws...转载 2018-08-17 09:35:26 · 185 阅读 · 0 评论 -
java异常捕获(6) try和throw共用
前面涉及到的异常的处理要么都是在方法内部进行处理,要么都交由方法的调用者处理,以下涉及到的是既在方法内部进行了一部分异常处理,又将抛出的异常交由调用者继续处理。以下为代码示例 package CatchAndThrow;public class Auction { private double iniPrice = 30.0; public void bid(String ...转载 2018-08-17 10:01:57 · 1732 阅读 · 0 评论 -
java异常捕获(7) 异常跟踪栈
当发生异常的时候,JVM会在控制台打印出异常的跟踪栈,可以通过这个跟踪栈得到一路除法的过程,以下为代码示例 package TrackingStack;import java.io.Serializable;class SelfException extends RuntimeException { SelfException() {} SelfException(St...转载 2018-08-17 10:38:45 · 634 阅读 · 0 评论 -
java输入输出(6)退回输入流
java中可以把数据推回输入流,使得数据可以再次被读取,以下程序的功能为寻找指定字符串“new PushBackReader”,当匹配不到指定字符串的时候,将当前遍历到的字符串输出,如果匹配到指定的字符串,将其推回到输入流,然后再次读取输出,具体的代码讲解穿插在代码之中 import java.io.FileReader;import java.io.IOException;import ...原创 2018-08-27 16:14:03 · 458 阅读 · 0 评论 -
java输入输出(7)重定向输入输出
java的标准输入输出为键盘和显示器,通过System.in 和System.out实现,可以使用重定向的方式改变程序的输入流和输出流,以下实例为重定向输出到文件和重定向从文件输入,具体的讲解穿插在代码中。 重定向输出 //重定向输出到文件,该操作需要可能会发生输入输出异常,故需要在异常处理块中执行import java.io.FileOutputStream;import java.i...转载 2018-09-05 08:59:56 · 1130 阅读 · 0 评论 -
java输入输出(11)Buffer
Buffer最重要的作用是装入数据,然后输出数据。 Buffer中有几个重要的概念 容量(capacity):缓冲区的的最大数据容量即最多可以存多少数据,容量不可以为负值,创建后不可以改变; 界限(limit):第一个不应该被读出或者写入的缓冲区索引,就是缓冲区内和缓冲区外的分界线; 位置(posotion):类似于IO流中的记录指针 具体的讲解穿插在代码中 import j...转载 2018-09-11 19:47:31 · 884 阅读 · 0 评论 -
java输入输出(12)Channel
Channel只能和Buffer进行数据沟通,程序不能访问Channel中的数据,包括写入,读出都不行 所有的Channel都不应该通过构造器来直接创建,要通过传统的结点流的getChannel方法来返回对应的Channel 具体的讲解穿插在代码之中 import java.io.File;import java.io.FileInputStream;import java.io.Fi...转载 2018-09-11 20:28:19 · 362 阅读 · 0 评论 -
java输入输出(13) 字符集和CharSet
简而言之,把看得懂字符转换成看不懂的二进制数就是编码,将二进制数转换成看得懂的字符就是解码 字符集其实是很简单,没有任何技术难度的,只是为了解决二进制序列和字符之间的对应关系,需要一个大家都认同的字符集而已。 具体的讲解穿插在代码中 import java.nio.ByteBuffer;import java.nio.CharBuffer;import java.nio.charset...转载 2018-09-11 21:11:03 · 389 阅读 · 0 评论 -
java输入输出(8)序列化和反序列化
在要将java对象保存到磁盘或者进行网络传输的时候,需要将这个java对象转换为二进制数据,也就是“序列化”,这里介绍的是使用实现Serializable接口来实现序列化的,实现Serializable接口非常简单,只要在类声明的后面加上implements Serializable就好了,不用实现什么方法。下面是将一个java对象序列化的示例,具体的讲解穿插在代码之中。 //将使用Perso...原创 2018-09-09 22:16:23 · 301 阅读 · 0 评论 -
java多线程(14)ThreadLocal类
ThreadLocal类对象可以为每一个线程都建立一个“副本”,使得好像每一个线程都“拥有了”ThreadLocal类对象一样 以下为代码示例,具体的讲解穿插在代码中 class Account2{ private ThreadLocal<String> name = new ThreadLocal<>();// ThreadLocal对象,...转载 2018-09-15 16:32:10 · 129 阅读 · 0 评论 -
java网络编程(1) InetAddress
学习java网络编程需要一定的计算机网络只是基础。 java提供了InetAddress类来代表IP地址,它没有具体的构造器,也就是说不能通过new关键字来获得InetAddress对象 一下为代码示例,具体的讲解穿插在代码中 import java.net.InetAddress;public class InetAddressTest { public static voi...转载 2018-09-16 10:48:09 · 339 阅读 · 0 评论 -
java网络编程(2)URLDecoder和URLEncoder
在百度上百度“哈哈”,网址栏会变成这样子“https://cn.bing.com/search?q=%E5%93%88%E5%93%88&form=EDGEAR&qs=PF&cvid=dc23f8243da94aa59fd867c8f9efcafa&cc=CN&setlang=zh-CN”,这些百分号加子母其实不是乱码,是一种特殊的字符串,当搜索的关键字包含...转载 2018-09-16 11:08:16 · 136 阅读 · 0 评论 -
java网络编程(3)TCP
使用TCP进行网络数据传输的时候,TCP会在需要传输数据的两端建立两个Socket(插座),并且在两个Socket之间建立一条虚拟链路,然后这两台主机就可以进行通信了。 下面是一个很简单的例子。 Server类创建一个ServerSocket对象,用于监听客户端Socket的链接请求,这如果接受到请求的话,Server类就会创建一个Socket,并且将消息打印出来。 Client类像服务器...转载 2018-09-16 15:17:51 · 112 阅读 · 0 评论 -
java输入输出(14)NIO.2
NIO.2是java7对原有的NIO进行了重大改进 这里首先介绍一下Path,Paths,Files的一些用法,具体的讲解穿插在代码中 //Path接口代表一个平台无关的平台路径import java.nio.file.Path;import java.nio.file.Paths;public class PathTest { public static void main...转载 2018-09-12 16:41:17 · 169 阅读 · 0 评论 -
java输入输出(15)文件锁
在多个运行程序需要并发地修改同一个文件时,程序之间需要通过某种机制来进行通信,文件锁就是其中地一种 在NIO中,是通过Channel对象的lock/tryLock方法来获得文件锁FileLock对象,从而锁定文件,以下为一个简单的示例 import java.io.FileOutputStream;import java.nio.channels.FileChannel;import j...转载 2018-09-12 16:53:38 · 127 阅读 · 0 评论