读书笔记 — >> Java核心技术 卷 I

导读:本篇文章讲解 读书笔记 — >> Java核心技术 卷 I,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

抽空去图书馆看《Java核心技术 卷I》,将其中未理解透彻的点整理下来,闲了看看,再理解理解!!!!

第三章

1.注意,Java没有任何无符号(unsigned)形式的int、long、short、或byte类型。

2.类常量的定义位于main方法的外部,因此,在同一个类的其他方法中也可以使用这个常量。而且,如果一个常量被声明为public,那么其他类的方法也可以使用这个常量。

public static final double ZX = 21;

3.在Java中,使用算术运算符时,当参与/运算的两个操作数都是整数时,表示整数除法;否则,表示浮点除法。注意:整数被0除将会产生一个异常,而浮点数被0除将会得到无穷大或NaN结果。4.检查一个字符串既不是null也不为空串:

if(str != null && str.length != 0)

5.如果基本的整数和浮点数精度不能够满足需求,可以使用java.math包中的两个很有用的类:BigInteger 和 BigDecimal.这两个类可以处理包含任意长度数组序列的数值。前者实现了任意精度的整数运算,后者实现了任意精度的浮点数运算。

第四章

1.关键字public意味着任何类的任何方法都可以调用这些方法。

2.在Java中,为了实现一个私有的方法,只需将关键字public改为private即可。

对于私有方法,如果改用其他方法实现相应的操作,则不必保留 原有的方法。如果数据的表达方式发生了变化,这个方法可能会变得难以实现,或者不再需要。然而,只要方法是私有的、类的设计者就可以确信:他不会被外部的二其他类操作使用,可以将其删去。如果方法是公有的,就不能将其删去,因为其他的代码很可能依赖它。

3.仅当类没有提供任何构造器的时候,系统才会提供一个默认的构造器。

4.类设计技巧

1.一定要保证数据私有

这是最重要的;绝对不要破坏封装性。有时候,需要编写一个访问器方法或更改器方法,但是最好还是保持实例域的私有性。很多惨痛的经验告诉我们,数据的表示形式很可能会改变,但它们的使用方式却不会经常发生变化。当数据保持私有时,它们的表示形式的变化不会对类的使用者产生影响,即使出现 bug 也易于检测。

2.一定要对数据初始化

Java 不对局部变量进行初始化,但是会对对象的实例域进行初始化。最好不要依赖于系统的默认值,而是应该显式地初始化所有的数据,具体的初始化方式可以是提供默认值,也可以是在所有构造器中设置默认值。

3.不要在类中使用过多的基本类型

用其他的类代替多个相天的基本类型的使用。这样会使类更加易于理解且易于修改。用一个称为 Address 的新的类替换一个 Customer 类中以下的实例域

private String street ;

private String city ; 

private String state ; 

private int zip ;

这样,可以很容易处理地址的变化,例如,需要增加对国际地址的处理。

4.不是所有的域都需要独立的域访问器和域更改器

或许,需要获得或设置雇员的新金。而一旦构造了雇员对象,就应该禁止更改雇用日期,并且在对象中,常常包含一些不希望别人获得或设置的实例域,例如,在 Address 类中,存放州缩写的数组。

5.将职责过多的类进行分解

这样说似乎有点含糊不清,究竞多少算是“过多”?每个人的看法不同。但是,如果明 a 地可以将一个复杂的类分解成两个更为简单的类,就应该将其分解(但另一方面,也不要走极端。设计10个类,每个类只有一个方法,显然有些矫枉过正了)。
下面是一个反面的设计示例。

public class CardDeck // bad design 
{
private int [] value ;
private int [] suit ;
public CardDeck(){...}
public void shuffle() {...}
public int getTopValue() {...} 
public int getTopSuit() {...} 
public void draw() {...}
}

实际上,这个类实现了两个独立的概念:一副牌(含有 shuffle 方法和 draw 方法)和一放牌(含有查看面值和花色的方法)。另外,引入一个表示单张牌的 Card 类。现在有两个类,每个类完成自己的职责:

public class CardDeck 
{
  private Card[] cards;
  public CardDeck(){...}
  public void shuffle(){...}
  public Card getTop(){...}
  public void draw(){...}
}
public class Card
{
  private int value ;
  private int suit ;
  public Card (int aValue ,int aSuit){...}
  public int getValue(){...}
  public int getSuit(){...}
}

6.类名和方法名要能够体现它们的职责

与变量应该有一个能够反映其含义的名字一样,类也应该如此(在标准类库中,也仔在着一些含义不明确的例子,如: Date 类实际上是一个用于描述时间的类)。
命名类名的良好习惯是采用一个名词( Order )、前面有形容词修饰的名词( RushOTaer )或动名词(有“— ing ”后缀)修饰名词(例如, BilingAddress )。对于方法来说,习惯是访问器方法用小写 get 开头( getSalary ),更改器方法用小写的 set 开头( setSalary)。

7.优先使用不可变的类

LocalDate 类以及 java . time 包中的其他类是不可变的——没有方法能修改对象的状态。
类似 plusDays 的方法并不是更改对象,而是返回状态已修改的新对象。
更改对象的问题在于,如果多个线程试图同时更新一个对象,就会发生并发更改。其结果是不可预料的。如果类是不可变的,就可以安全地在多个线程间共享其对象。
因此,要尽可能让类是不可变的,这是一个很好的想法。
对于表示值的类,如一个字符串或一个时间点,这尤其容易。计算会生成新值,而不是更新原来的值。
当然。并不是所有类都应当是不可变的。如果员工加薪时让 raiseSalary 方法返回—个新的 Employee 对象,这会很奇怪。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/110943.html

(0)
小半的头像小半

相关推荐

极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!