文档章节

高效java

P
 Pxc_春春彭
发布于 2016/11/21 11:36
字数 494
阅读 1
收藏 0
点赞 0
评论 0

一、创建、销毁对象

1、考虑用静态工厂方法替代构造器

2、遇到多个构造器参数时要考虑用构建器

静态工厂和构造器有一个共同的局限性,它们不能很好的扩展到大量的可选参数,程序员一向习惯采用重叠构造器,在这种模式下,提供第一个只有必要参数的构造器,第二个构造器有一个可选参数,最后一个构造器包含所有的可选参数。

public People(String name,String sex){
  this(name,sex,0,0,0,"");
}
public People(String name,String sex,int age){
  this(name,sex,age,0,0,"");
}
public People(String name,String sex,int age,float height,float wigth){
  this(name,sex,age,height,wigth,"");
}
public People(String name,String sex,int age,float height,float wigth,String skin){
  this.name=name;
  this.sex=sex;
  this.age=age;
  this.height=height;
  this.wigth=wigth;
  this.skin=skin;
}

重叠的构造器方法可行,但是当有许多参数的时候,代码很难编写,并且难以阅读。

Builder方法:

public class People {
    private final String name;
    private final String sex;
    private final String address;
    private final float height;
    private final float weight;

    public People(Builder builder) {
        name = builder.name;
        sex = builder.sex;
        address = builder.address;
        height = builder.height;
        weight = builder.weight;
    }
}

public class Builder {
    public String name;
    public String sex;
    public String address;
    public float height;
    public float weight;

    public Builder(String name, String sex) {
        this.name = name;
        this.sex = sex;
    }

    public Builder setAddress(String address) {
        this.address = address;
        return this;
    }

    public Builder setHeight(float height) {
        this. height = height;
        return this;
    }

    public Builder setWeight(float weight) {
        this.weight = weight;
        return this;
    }

    public People build() {
        return new People(this);
    }
}


public class MainClass {
    public static void main(String[] args){
        People people = new Builder("pxc","女").setAddress("福州").setHeight(163).setWeight(45).build();
       
    }
}

运行结果:通过builder方法把参数写入对象中。

Builder模式易于阅读,参数灵活。

第四章 类和接口

1、使类和成员的可访问性最小化:尽可能使每个类或者成员不被外界访问。

实例域不能是共有的:包含共有可变域的类并不是线程安全的。

2、使可变性最小化

    2.1 不提供任何机会会修改对象状态的方法

    2.2 保证类不会被扩展

© 著作权归作者所有

共有 人打赏支持
P
粉丝 2
博文 50
码字总数 30676
作品 0
程序员
[Java学习探讨]为什么学Java虚拟机的Java程序员更值钱?

[Java学习探讨]为什么学Java虚拟机的Java程序员更值钱? 曾经的我经常害怕处理与JVM相关的异常,对JVM的配置参数也一无所知,那时候我天真地认为,JVM的出现本身就是想让程序员屏蔽实现细节,...

原创小博客
昨天
0
0
Berkeley DB数据库学习1

BDB使用教程 Berkeley DB是历史悠久的嵌入式数据库系统,在06年被 Oracle 收购了。现在我们在 Oracle 网站上会看到: BerkeleyDB、BerkeleyDB XML 和 BerkeleyDB JAVA Edition 这个三个东东。...

月下独酌100
2013/02/17
0
0
Groovy轻松入门-通过与Java的比较,迅速掌握Groovy

Groovy和Java的相同点有: 3+, 4+, 6+, 8+, 10+, 12+, 13, 14, 15, 18+, 20+, 21, 22, 23, 28+, 29+, 30+, 31+, 32+ +表示Groovy不但涵盖了Java的语法,而且还有增强部分。 Groovy和Java的不...

Sub
2013/03/08
0
1
使用ConcurrentMap实现高效可靠的原子操作

问题:服务器S1从远程获取多个文件到本地处理。这些文件的数据会被Processor转换成不同类型的数据模型存放至S1的数据库。每个Processor处理逻辑是相互独立的,但是同一个文件的数据可能会被多...

屈想顺
06/14
0
0
Java开发每日复盘2018_0511

今天主要跟大家来分享一下「MyBatis的使用」 一句话概括: 「MyBatis」,是一种介于Java对象与数据库(MySql等)之间的用于持久化存储的框架。 使用「MyBatis」好处: 可以更高效的,基于该框...

ZeroOSTalk
05/13
0
0
国外程序员整理的Java资源大全

构建 这里搜集了用来构建应用程序的工具。 Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建。Maven优于Apache Ant。后者采用了一种过程化的方式进行配...

强子哥哥
2015/11/16
0
1
Groovy轻松入门——通过与Java的比较,迅速掌握Groovy

Groovy和Java的相同点有: 3+, 4+, 6+, 8+, 10+, 12+, 13, 14, 15, 18+, 20+, 21, 22, 23, 28+, 29+, 30+, 31+, 32+ +表示Groovy不但涵盖了Java的语法,而且还有增强部分。 Groovy和Java的不...

DavidBao
2015/05/15
0
0
推荐!国外程序员整理的Java资源大全

构建 这里搜集了用来构建应用程序的工具。 Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建。Maven优于Apache Ant。后者采用了一种过程化的方式进行配...

huntering
2015/01/13
0
0
构建 这里搜集了用来构建应用程序的工具。 Apache Maven:Maven使用声明进行构建并

构建 这里搜集了用来构建应用程序的工具。 Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建。Maven优于Apache Ant。后者采用了一种过程化的方式进行配...

enosh
2015/01/09
0
2
推荐!国外程序员整理的Java资源大全

Java 几乎是许多程序员们的入门语言,并且也是世界上非常流行的编程语言。国外程序员 Andreas Kull 在其 Github 上整理了非常优秀的 Java 开发资源,推荐给大家。 译文由 ImportNew- 唐尤华翻...

李朝强
2015/11/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Android 复制和粘贴功能

做了一回搬运工,原文地址:https://blog.csdn.net/kennethyo/article/details/76602765 Android 复制和粘贴功能,需要调用系统服务ClipboardManager来实现。 ClipboardManager mClipboardM...

她叫我小渝
今天
0
0
拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)

工作准备 •一台SQLSERVER 2005/SQLSERVER 2008服务 •SQLSERVER jdbc驱动程序 •Java开发环境eclipse + jdk1.8 •java反编译工具JD-Core 反编译JDBC分析SQLSERVER客户端与服务器通信原理 SQ...

紅顏為君笑
今天
6
0
jQuery零基础入门——(六)修改DOM结构

《jQuery零基础入门》系列博文是在廖雪峰老师的博文基础上,可能补充了个人的理解和日常遇到的点,用我的理解表述出来,主干出处来自廖雪峰老师的技术分享。 在《零基础入门JavaScript》的时...

JandenMa
今天
0
0
linux mint 1.9 qq 安装

转: https://www.jianshu.com/p/cdc3d03c144d 1. 下载 qq 轻聊版,可在百度搜索后下载 QQ7.9Light.exe 2. 去wine的官网(https://wiki.winehq.org/Ubuntu) 安装 wine . 提醒网页可以切换成中...

Canaan_
今天
0
0
PHP后台运行命令并管理运行程序

php后台运行命令并管理后台运行程序 class ProcessModel{ private $pid; private $command; private $resultToFile = ''; public function __construct($cl=false){......

colin_86
今天
1
0
数据结构与算法4

在此程序中,HighArray类中的find()方法用数据项的值作为参数传递,它的返回值决定是否找到此数据项。 insert()方法向数组下一个空位置放置一个新的数据项。一个名为nElems的字段跟踪记录着...

沉迷于编程的小菜菜
今天
1
1
fiddler安装和基本使用以及代理设置

项目需求 由于开发过程中客户端和服务器数据交互非常频繁,有时候服务端需要知道客户端调用接口传了哪些参数过来,这个时候就需要一个工具可以监听这些接口请求参数,已经接口的响应的数据,这种...

银装素裹
今天
0
0
Python分析《我不是药神》豆瓣评论

读取 Mongo 中的短评数据,进行中文分词 对分词结果取 Top50 生成词云 生成词云效果 看来网上关于 我不是药神 vs 达拉斯 的争论很热啊。关于词频统计就这些,代码中也会完成一些其它的分析任...

猫咪编程
今天
0
0
虚拟机怎么安装vmware tools

https://blog.csdn.net/tjcwt2011/article/details/72638977

AndyZhouX
昨天
1
0
There is no session with id[xxx]

参考网页 https://blog.csdn.net/caimengyuan/article/details/52526765 报错 2018-07-19 23:04:35,330 [http-nio-1008-exec-8] DEBUG [org.apache.shiro.web.servlet.SimpleCookie] - Found......

karma123
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部