Java语言程序设计(基础篇) 第十章 面向对象思考

第十章 面向对象思考

  10.2 类的抽象和封装

  1.类的抽象是指将类的实现和类的使用分离开,实现的细节被封装并且对用户隐藏,这被称为类的封装。

  2.从类外可以访问的方法和数据域的集合以及预期这些成员如何行为的描述,合称为类的合约(class's contract)。

  3.实现的细节经过封装,对用户隐藏起来,这称为类的封装(class encapsulation)。

 

  10.3 面向对象的思考

  面向过程的范式重点在于设计方法。面向对象的范式将数据和方法耦合在一起构成对象。使用面向对象范式的软件设计重点在对象以及对对象的操作上。

  

  10.4 类的关系

    为了设计类,需要探索类之间的关系。类中间的关系通常是关联、聚合、组合以及继承。

    10.4.1 关联

    1.关联是一种常见的二元关系,描述两个类之间的活动。

    2.关联中涉及的每个类可以给定一个多重性(multiplicity),放置在类的边上用于给定UML图中关系所涉及的类的对象数。

    10.4.2 聚集和组合

    1.聚集是关联的一种特殊形式,代表了两个对象之间的归属关系。聚集建模has-a关系。所有者对象称为聚集对象,它的类称为聚集类。而从属对象称为被聚集对象,它的类称为被聚集类。

    2.一个对象可以被多个其他的聚集对象所拥有。如果一个对象只归属于一个聚集对象,那么它和聚集对象之间的关系就称为组合(composition)。

 

  10.6 示例练习:设计栈类

    栈(stack)是一种以“后进先出”的方式存放数据的数据结构。

 

  10.7 将基本数据类型值作为对象处理

    1.基本数据类型值不是一个对象,但是可以使用Java API中的包装类来包装成一个对象。

    2.大多数基本类型的包装类的名称与对应的基本数据类型名称一样,第一个字母要大写。Integer和Character例外。

    3.包装类没有无参构造方法。所有包装类的实例都是不可变的,这意味着一旦创建对象后,它们的内布值就不能再改变。

 

  10.8 基本类型和包装类型类型之间的自动转换

    将基本类型值转换为包装类型对象的过程称为装箱(boxing),相反的转换过程称为开箱(unboxing)。Java允许基本类型和包装类类型之间进行自动转换。如果一个基本类型值出现在需要对象的环境中,编译器会将基本类型值进行自动装箱;如果一个对象出现在需要基本类型的环境中,编译器会讲对象进行自动开箱。这称为自动装箱和自动开箱。

  

  10.9 BigInteger和BigDecimal类

    BigInteger类和BigDecimal类可以用于表示任意大小和精度的整数或者十进制数。

 

  10.10 String类

    String类对象是不可改变的。字符串一旦改变,内容不能再改变。

    

  10.10.1 构造字符串

    1.可以用字符串直接量或者字符数组创建一个字符串对象。

    String message=new String("Welcome to Java");

    String message="Welcome to Java";

    2.String变量存储的是对String对象的引用,String对象里存储的才是字符串的值。严格地讲,术语String变量、String对象和字符串值是不同的。但在大多数情况下,它们之间的区别是可以忽略的。为简单期间,术语字符串将经常被用于指String变量、  String对象和字符串的值。

 

  10.10.2 不可变字符串与限定字符串

    1.String对象是不可变的,它的内容是不能改变的。

    2.因为字符串在程序设计中是不可变的,但同时又会频繁地使用,所以Java虚拟机为了提高效率并节约内存,对具有相同字符序列的字符串直接量使用同一个实例。这样的实例称为限定的(interned)字符串。

 

  10.10.3 字符串的替换和分隔

    split方法可以从一个指定分隔符的字符串中提取标识。

    

1     String[] tokens="Java#HTML#Perl".split("#");
2         for (int i = 0; i < tokens.length; i++) {
3             System.out.print(tokens[i]+" ");
4         }
5         //显示:Java HTML Perl

 

  10.10.4 依照模式匹配、替换和分配

    正则表达式(regular expression)(缩写regex)是一个字符串,用于描述匹配一个字符串集的模式。

 

  10.10.5 字符串与数组之间的转换

    1.字符串不是数组,但是字符串可以转换成数组,反之亦然。为了将字符串转换成一个字符数组,可以使用toCharArray方法。

    

char[] chars="Java".toCharArray();

 

    2.为了将一个字符数组转换成一个字符串,应该使用构造方法String(char[])或者方法valueOf(char[]);

1 String str=new String(new char[]{'j','a','v','a'});
2 String str1=String.valueOf(new char[]{'j','a','v','a'});

  

  10.10.6 将字符和数值转换成字符串

    可以使用Double.parseDouble(str)或者Integer.parseInt(str)将一个字符串转换为一个double值或者一个int值,也可以使用字符串的连接操作符将字符或者数字转换成字符串。另外一种将数字转换为字符串的方法时使用重载的静态valueOf方法。该方法可以用于将字符和数值转换成字符串。

 

  10.10.7 格式化字符串

    String类包含静态方法format方法,它可以创建一个格式化的字符串。

 

  10.10 StringBuilder和StringBuffer类

    1.一般来说,只要使用字符串的地方,都可以使用StringBuffer/StringBuilder类。StringBuffer/StringBuilder类比String类更灵活。可以给一个StringBuffer或StringBuilder中添加、插入或追加新的内容,但是String类一旦创建,它的值就确定了。

    2.除了StringBuffer中修改缓冲区的方法是同步的,这意味着只有一个任务被荀彧执行方法外,StringBuilder类与StringBuffer类是很相似的。如果是多任务并发访问,就使用StringBuffer,因为这种情况下需要同步以放置StringBuffer崩溃。而如果是单任务访问,使用StringBuilder会更有效。StringBuffer和StringBuilder中的构造方法和其他方法几乎是完全一样的。

    

    

 

  

posted @ 2017-02-08 10:48  Young_Yang_Yang  阅读(481)  评论(0编辑  收藏  举报