package chape7;
/**
* 檢查參數的有效性
* 當編寫方法或者構造器時,應該考慮他的參數有什麽限制 應該吧這些限制寫在文檔中,並且在這個方法的開頭處,通過顯示的檢查
* 來實施這些限制。養成這樣的習慣很重要
* 當判斷一個數據的合法性的時候就要拋出異常。 這裡就涉及到異常 第九章 60條:優先使用標準的異常 就是java自帶的異常
* 這也是一種類的重用的表現;
* 常用的异常:
* IllegalArgumentException 非null的参数数值不正确;传入的参数不合法;
* IllegalStateException 对于方法调用而言,对象状态不合法比如摸个对象在被正确的初始化之前就调用 会抛出这个异常
* ......
package chape8;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* 第八章 通用程序设计
* 第45条: 将局部变量的作用域减小到最小
* 将局部变量的作用域最小化。可以增强代码的可读和可维护性,并降低出错的可能性
* 要使作用域最小,最有力的方法就是在第一次使用它的时候声明;如果提前声明会造成
* 一片混乱;也会分散注意力
* 几乎每个局部变量的声明都应该包括一个初始化得表达式;
* 例如:
* for(Element e : c)
* {
* dosomthing(e);
* }
* 这个是java1.5以上的版本的for循环的首先考虑的写法;
* 。。。。。。。。。。。。。
* 再来看:下面是java1.5以前的for循环
* List c = new ArrayList ();
Iterator it = c.iterator();
while(it.hasNext())
{
it.next();
}
List c1 = new ArrayList();
Iterator it1 = c1.iterator();
while(it.hasNext())
{
it1.next();
}
* 但你比较一下这两个循环,第二个循环是我要的第二个循环 我为了方便将第一个循环
* 复制了一份 ,然后改变了变量的名称来达到两个循环的目的,這樣 ......
package chape8;
/**
* 第8章
* 第46條:
* for-each循環優先于for循環
* for(Element e : c)
* {
* dosomthing(e);
* }
* 这个是java1.5以上的版本的for循环的首先考虑的写法
* 以下是java1.5以前的寫法
* for (Iterator it = c.iterator();it.hasNext();)
{
it.next();
}
這兩個循環的方法都比while方法要好,45條中的複製的錯誤在用第一種循環就
可以避免;
總之for each在簡潔和預防bug方面有著傳統的for循環無法比的優勢;並且沒有性能
損失。應該竟可能使用for-each 但是有下麵三種情況無法使用for each
1.過濾:如果遍历一个集合 并删除选定的元素 就要用显示的迭代器,这样可以调用
他的remove方法
2.转换:要遍历列表或者数组 并取代他的部分或者全部元素值 要用到数组的索引
3.平行迭代要并行遍历多个集合;
* @author lee
*
*/
public class Chape46 {
/**
* ......
package chape8;
import java.math.BigDecimal;
/**
* 8-48
* 如果想要知道精确的答案,就要避免使用double和float
对于金融行业来说,对数据的严整性要求是很高的,不容半点马虎,
那大家都知道再我们的Java语言里面有两个浮点数类型的变量float和double,
可能大家会认为他们的精度对于金融行业这样对数字敏感的行业来说,已经够用了,
但是在开发当中,我们要尽量少使用double和float,因为让他们精确的表达0.1是不可能的。
那我们如何解决这个问题呢,
答案是使用BigDecimal,int或者long进行货币计算。
在这里对大家的忠告是:
float和double 类型尤其不适合用于货币计算;因为让一个float或者double
精确地表示0.1或者10的任何其他负数次方值,都是不可能的;
* @author lee
*
*/
public class Chape48 {
/**
* @param args
*/
public static void main(String[] args) {
/**
* 来看一个例子
* 你口袋里有1美元(100美分),你打算买糖,糖的价格为10美分20美分
* 30美分等等 一直到1美分 你打算从10美分的开始买,每种价格只买一个
* 那你能买几个糖呢?能找回多少呢?
*/
/* double sum = 1;
int count = 0 ......
如题!解决的方法是增加一个虚背景。之后把虚背景增加到原来的Frame上。由于repaint()到paint()中间涉及到update(),所以解决问题的
关键是在重写update(),在这个方法中实现虚背景的添加~~
@Override
public void update(Graphics g)
{
if(offScreenImage == null)
{
offScreenImage = this.createImage(800, 600);
}
/*
*定义在虚背景中画的“画笔”
*/
Graphics graOffScreen = offScreenImage.getGraphics();
/*
*重画虚背景
*/
Color c = graOffScreen.getColor();
graOffScreen.setColor(Color.GREEN);
graOffScreen.fillRect(150, 150, 800, 600);
graOffScreen.setColor(c);
paint(graOffScreen);
g.drawImage(offScreenImage, 0, 0, null);
}
......
Character Classes
[abc] Simple character class
[a-zA-Z] Character class with ranges
[^abc] Negated character class
NOTE: Incomplete ranges will be interpreted as "starts from zero" or "ends with last character".
I.e. [-a] is the same as [\\u0000-a], and [a-] is the same as [a-\\uFFFF], [-] means "all characters".
Standard POSIX Character Classes
[:alnum:] Alphanumeric characters.
[:alpha:] &nb ......