构造方法

Java8 ArrayList的源码分析(一)

牧云@^-^@ 提交于 2020-01-07 16:53:07
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 在Java开发中,最常用的集合莫过于ArrayList, Arraylist 提供了方便的crud的api,看似很复杂,但源码其实很简单,但是jdk1.8与以前版本的方法实现还是有一些不同,下面让我们一起看看ArrayList在Java8中是如何实现的。 查看源代码首先要从构造方法开始,通常初始化一个ArrayList通过如下方式 List<Object> list = new ArrayList<Object>(); ArrayList 有三个构造方法: public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; } 这是无参构造方法 DEFAULTCAPACITY_EMPTY_ELEMENTDATA 是一个空的Object 数组 private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; **elementData **是ArrayList的核心,是一个object的数组,ArrayList所有的数据操作,都是通过数组实现的 transient Object[] elementData; 所以,无参构造方法的ArrayList

Java day10

╄→尐↘猪︶ㄣ 提交于 2020-01-07 14:18:21
文档说明的简单制作 步骤 1) 定义类ArrayTool 单独操作数组 2) 将构造方法私有化,外界不能创建对象,保证数据安全性 3) 给ArrayTool的方法都是加上static修饰,通过类名调用 4)给每一个方法上加入文档注释 该功能描述什么意思 有参数:参数表示的是什么 有返回值:返回值返回的是什么 5)进入dos控制台 在当前目录下,使用javadoc 目录名(文件夹名称) -author -version ArrayTool.java 代码块 在Java中使用{ }包起来的内容,称为代码块. 代码块分为: 局部代码块 在内中局部位置(方法定义中) 限定变量生命周期,及早释放,提高内存利用率 构造代码块 在类中的成员位置使用{ }定义,每次执行构造方法之前,如果有构造代码块先执行构造代码块 作用:可以将多个构造方法的相同的代码块可以放到构造代码块中,给对象进行初始化 静态代码块 在类中的成员位置,static{ },特点是每次只执行一次,优先于对象存在 作用:给类进行初始化 静态代码块只加载一次 优先级 静态代码块>构造代码块>构造方法 Java中的继承 格式:class 子类名 extends 父类名 { } 将多个类中的共同代码单独提取出来,形成一个独立的类,多个类和当前独立的类产生一种关系:继承关系 extends 继承的好处: 1.提高代码的重复性 2

Java开发神器Lombok使用详解

牧云@^-^@ 提交于 2020-01-07 08:19:22
最近正在写SpringBoot系列文章和录制视频教程,每次都要重复写一些Getter/Setter、构造器方法、字符串输出的ToString方法和Equals/HashCode方法等。甚是浪费时间,也影响代码的可读性。因此,今天就给大家推荐一款Java开发神器——Lombok,让代码更简单易读。 什么是Lombok Lombok是一款Java开发插件,可以通过它定义的注解来精简冗长和繁琐的代码,主要针对简单的Java模型对象(POJO)。 好处就显而易见了,可以节省大量重复工作,特别是当POJO类的属性增减时,需要重复修改的Getter/Setter、构造器方法、equals方法和toString方法等。 而且Lombok针对这些内容的处理是在编译期,而不是通过反射机制,这样的好处是并不会降低系统的性能。 下面我们就看看具体的使用。 Lombok的安装 Lombok的安装分两部分:Idea插件的安装和maven中pom文件的导入。 第一步,在Idea的插件配置中搜索Lombok(可能需要梯子)或官网下载本地安装。 同时,在插件的描述中也能够看到它支持的注解。 第二步,引入pom中依赖,当前最细版本1.18.10。 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId>

01.考虑使用静态工厂方法替代构造方法

时光怂恿深爱的人放手 提交于 2020-01-07 08:14:14
前言 《Effective Java》中文第三版,是一本关于Java基础的书,这本书不止一次有人推荐我看。其中包括我很喜欢的博客园博主 五月的仓颉 ,他曾在自己的博文《给Java程序猿们推荐一些值得一看的好书 》中也推荐过。加深自己的记忆,同时向优秀的人看齐,决定在看完每一章之后,都写一篇随笔。如果有写的不对的地方、表述的不清楚的地方、或者其他建议,希望您能够留言指正,谢谢。 《Effective Java》中文第三版在线阅读链接: https://github.com/sjsdfg/effective-java-3rd-chinese/tree/master/docs/notes 什么是构造方法? 定义: 一个在创建对象时自动被调用的方法。 特点: 构造方法的名称和类同名。 没有返回值类型,即不能使用 return 关键字。 普通方法不能以任何形式调用构造方法(构造方法中可以调用普通方法)。 注意: 当类中没有定义构造方法时,系统会默认添加一个无参的构造方法,当在类中定义构造方法的时候,默认的构造方法会消失。 实例: public class Cat { //名字 private String name; //颜色 private String color; //年龄 private Integer age; //构造方法的名称和类同名 public Cat(){ } /

Single设计模式

淺唱寂寞╮ 提交于 2020-01-07 03:19:11
JavaSE基础中学习的single设计模式复习: * 单列设计模式概念理解:用程序实现在存储中只能有一个对象。 * * 恶汉式实现思路分析: * 1、如何实现类不能被其他人多次创建呢? * 实现:将类的构造方法私有,不能被其他类调用。 * 实现了第一步,不能被其他类创建对象,就不会出现多个对象。 * 2、如何在私有了构造方法的情况下创建类的对象呢? * 实现:私有的构造方法不能被直接调用创建对象,但是却可以通过类名来调用。 * 用类名调用对象,即可实现只能有一个对象的功能。 * 3、对象的地址值可以被随意更改如何保证不能被随意更改呢? * 实现:将类中的对象私有,对外提供get方法,则不能被随意更改 * 懒汉式实现思路分析: * 1、第一步相同 * 2、第二步不直接创建对象,而是声明一个引用 * 3、还是提供get方法,但是需要判断是否已经创建 * //第三种方式:用final进行修饰。 * /* * 恶汉式和懒汉式的区别: * 1、恶汉式是拿空间换时间,懒汉式是拿时间换空间。 * 2、在多线程访问时,恶汉式不会创建多个对象,而懒汉式有可能创建多个对象 来源: http://www.1994july.club/ 来源: https://www.cnblogs.com/1994july/p/12148833.html

02.当构造参数过多时使用builder模式

青春壹個敷衍的年華 提交于 2020-01-07 00:47:07
前言 《Effective Java》中文第三版,是一本关于Java基础的书,这本书不止一次有人推荐我看。其中包括我很喜欢的博客园博主 五月的仓颉 ,他曾在自己的博文《给Java程序猿们推荐一些值得一看的好书》中也推荐过。加深自己的记忆,同时向优秀的人看齐,决定在看完每一章之后,都写一篇随笔。如果有写的不对的地方、表述的不清楚的地方、或者其他建议,希望您能够留言指正,谢谢。 《Effective Java》中文第三版在线阅读链接: https://github.com/sjsdfg/effective-java-3rd-chinese/tree/master/docs/notes 是什么 builder模式 是创建对象的一种方式。常见的对象创建方式还有 JavaBeans模式、可伸缩方法模式 等。 哪里用 扩展到很多可选参数的情景,“很多可选参数”指的是,当你的构造方法入参达到比如四个或更多时。 一个实体类,你预感它会在后期添加新的字段时,你也可以预先使用builder模式,因为你一开始没有使用,在后期类的参数演化到失控的时候,再想转为builder模式,之前写的代码就会是无用功。 怎么实现 我们通过 JavaBeans模式、可伸缩方法模式 与 Builder模式 创建对象,进行对比的方法,来看看Builder的实现,以及它的优点。 首先,我们来考虑一个场景,一瓶饮料

Java中的反射

≯℡__Kan透↙ 提交于 2020-01-06 22:03:56
反射之中包含了一个「反」字,所以想要解释反射就必须先从「正」开始解释。 一般情况下,我们使用某个类时必定知道它是什么类,是用来做什么的。于是我们直接对这个类进行实例化,之后使用这个类对象进行操作。 Apple apple = new Apple ( ) ; //直接初始化,「正射」 apple . setPrice ( 4 ) ; 类加载器 类的加载:当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。 获取Class对象的三种方式: 1.通过类名获取 类名.class 2.通过对象获取 对象名.getClass() 3.通过全类名获取 Class.forName(全类名) 一个类在加载过程中的三部曲: 1.加载 就是指将class文件读入内存,并为之创建一个Class对象. 任何类被使用时系统都会建立一个Class对象。 2.连接 验证 是否有正确的内部结构,并和其他类协调一致 准备 负责为类的静态成员分配内存,并设置默认初始化值 解析 将类的二进制数据中的符号引用替换为直接引用 3.初始化 系统给出的默认值 类的加载时机(重点) 创建类的实例 访问类的静态变量,或者为静态变量赋值 调用类的静态方法 使用反射方式来强制创建某个类或接口对应的java.lang.Class对象 初始化某个类的子类 直接使用java

2、Single设计模式

六眼飞鱼酱① 提交于 2020-01-06 21:56:07
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> JavaSE基础中学习的single设计模式复习: * 单列设计模式概念理解:用程序实现在存储中只能有一个对象。 * * 恶汉式实现思路分析: * 1、如何实现类不能被其他人多次创建呢? * 实现:将类的构造方法私有,不能被其他类调用。 * 实现了第一步,不能被其他类创建对象,就不会出现多个对象。 * 2、如何在私有了构造方法的情况下创建类的对象呢? * 实现:私有的构造方法不能被直接调用创建对象,但是却可以通过类名来调用。 * 用类名调用对象,即可实现只能有一个对象的功能。 * 3、对象的地址值可以被随意更改如何保证不能被随意更改呢? * 实现:将类中的对象私有,对外提供get方法,则不能被随意更改 * 懒汉式实现思路分析: * 1、第一步相同 * 2、第二步不直接创建对象,而是声明一个引用 * 3、还是提供get方法,但是需要判断是否已经创建 * //第三种方式:用final进行修饰。 * /* * 恶汉式和懒汉式的区别: * 1、恶汉式是拿空间换时间,懒汉式是拿时间换空间。 * 2、在多线程访问时,恶汉式不会创建多个对象,而懒汉式有可能创建多个对象 实际开发中用恶汉式多一些,而懒汉式则是在面试的时候会用到。 * 所以本题的重点应该在于懒汉式的多线程安全问题处理:synchronized锁、枚举...等等

01.考虑使用静态工厂方法替代构造方法

这一生的挚爱 提交于 2020-01-04 01:50:30
前言 《Effective Java》中文第三版,是一本关于Java基础的书,这本书不止一次有人推荐我看。其中包括我很喜欢的博客园博主 五月的仓颉 ,他曾在自己的博文《给Java程序猿们推荐一些值得一看的好书 》中也推荐过。加深自己的记忆,同时向优秀的人看齐,决定在看完每一章之后,都写一篇随笔。如果有写的不对的地方、表述的不清楚的地方、或者其他建议,希望您能够留言指正,谢谢。 《Effective Java》中文第三版在线阅读链接: https://github.com/sjsdfg/effective-java-3rd-chinese/tree/master/docs/notes 什么是构造方法? 定义: 一个在创建对象时自动被调用的方法。 特点: 构造方法的名称和类同名。 没有返回值类型,即不能使用 return 关键字。 普通方法不能以任何形式调用构造方法(构造方法中可以调用普通方法)。 注意: 当类中没有定义构造方法时,系统会默认添加一个无参的构造方法,当在类中定义构造方法的时候,默认的构造方法会消失。 实例: public class Cat { //名字 private String name; //颜色 private String color; //年龄 private Integer age; //构造方法的名称和类同名 public Cat(){ } /

小白之路由浅入深之------day18

风流意气都作罢 提交于 2020-01-03 22:51:50
目录 1.字节缓冲流 1.1字节缓冲流构造方法【应用】 1.2字节流复制视频【应用】 2.字符流 2.1为什么会出现字符流【理解】 2.2编码表【理解】 2.3字符串中的编码解码问题【应用】 2.4字符流中的编码解码问题【应用】 2.5字符流写数据的5种方式【应用】 2.6字符流读数据的2种方式【应用】 2.7字符流复制Java文件【应用】 2.8字符流复制Java文件改进版【应用】 2.9字符缓冲流【应用】 2.10字符缓冲流复制Java文件【应用】 2.11字符缓冲流特有功能【应用】 2.12字符缓冲流特有功能复制Java文件【应用】 2.13IO流小结【理解】 3练习案例 3.1集合到文件【应用】 3.2文件到集合【应用】 3.3点名器【应用】 3.4集合到文件改进版【应用】 3.5文件到集合改进版【应用】 1.字节缓冲流 1.1字节缓冲流构造方法【应用】 字节缓冲流介绍 lBufferOutputStream:该类实现缓冲输出流。 通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用 lBufferedInputStream:创建BufferedInputStream将创建一个内部缓冲区数组。 当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次很多字节 构造方法: 方法名 说明