java 对象与类 OOP 及 toString的两种使用方法

来源:互联网 发布:java教务管理系统 编辑:程序博客网 时间:2024/05/17 07:06

OOP 面向对象程序设计 Object Oriented Programming
类(class)是构造对象的模板或者蓝图。我们可以将类想象成制作小甜饼的切割机,将对象想象成小甜饼。由类构造(construct)对象的过程成为创建类的实例(instance)。
用java编写的所有代码都位于某个类的内部,标准的java库提供了几千各类,可以用于用户界面设计,尽管如此,还是需要在java程序中,创建一些自己的类,以便描述应用程序所对应问题域中的对象。
封装(encapsulation,有时称为数据隐藏)是与对象有关的一个重要概念。从形式上看,封装不过是将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式。对象中的数据域称为实例域,操纵对象的过程称为方法。对于每个特定的类实例(对象)都有一组特定的实力域值。这些值得集合就是这个对象的当前状态。无论何时,只要想对象发送一个消息,他的状态就有可能发生改变。
实现封装的关键在于绝对不能让类中的方法直接方为其他类的实例域。程序仅通过对象的方法与对象数据进行交互。封装给对象赋予了黑盒特征。这是提高重用性和可靠性的关键。这意味着一个类可以全面的改变存储数据的方式,只要仍旧使用同样的方法操作数据,其他对象就不会知道或不会介意所发生的变化。
OOP的另一个原则会让用户自定义java类变得轻而易举,这就是:可以通过扩展一个类来建立另一个新的类。事实上,在java中,所有类都源于一个神通广大的超类。他就是Object。
再扩展一个已有的类时,这个扩展后的新类具有所扩展的类的全部属性和方法。在新类中,只需提供试用与这个新类的新方法和数据与就可以了。通过扩展一个雷来建立另外一个类的过程称为继承。
对象:
对象的行为:可以对对象施加哪些操作,或者可以对对象施加哪些方法?
对象的状态:当施加那些方法时,对象如何响应?
对象标识:如果辨别具有相同行为与状态的不同对象?
类之间的关系:
在类之间,最常见的关系有
1、依赖:
uses-a关系,是一种最明显的,最常见的关系,例如:Order类使用Account类是因为Order对象需要访问Account对象查看信用状态。但是Item类不依赖于Account类,这是因为Item对象与用户账户无关。因此,如果一个类的方法操纵另一个类的对象,我们就说一个类依赖于另一个类。
应该尽量将相互依赖的类减少到最少。如果类A不知道B的存在,他就不会关心B的任何改变。
聚合(aggregation)
has-a关系,是一种具体且易于理解的关系。例如,一个Order对象包含一些Item对象。聚合关系意味着类A的对象包含类B的对象。
继承(inheritance)
即is-a关系,是一种用于表示特殊与一般关系的。例如,Rush Order类由Order类继承而来。在具有特殊性的RushOrder类中包含了一些用于优先处理特殊方法,以及一个计算运费的不同方法;而其他的方法,如添加商品、生成账单等都是从Order类继承来的。一般而言,如果类A扩展类B,类A不但包含从类B继承的方法,还会拥有一些额外的功能(下一章将详细讨论继承,其中会用比较多的篇幅来介绍讲述这个重要的概念)
很多程序员采用UML(Unified Modeling Language,统一建模语言)绘制类图,用来描述类之间的关系。图中就是这样的一个例子,类。类用矩形表示,类之间的关系用各种修饰符的箭头表示。图中给出了UML种最常见的箭头样式。
使用预定义类
在Java中,没有类就无法做任何事情,我们前面曾经接触过几个类。然而,并不是所有的类都有面向对象的特征。比如,Math类。在程序中,可以使用Math类的方法,如Math.random并只需要知道方法名和参数(如果有的话),而不必了解他的具体实现过程。这正是封装的关键所在,当然所有的类都是这样。但是,Math类之封装了功能,他不需要也不必隐藏数据,因为没有数据,所以也不必担心生成对象以及初始化实例域。
从Date类中可以看到如果构造对象,以及如果调用类方法。
对象与对象变量
要想使用对象,就必须先构造对象,并指定其初始状态。然后,对对象应用方法。
在java程序设计中,使用构造器(constructor)构造新实例。构造器是一种特殊的方法,用来构造并初始化对象。下面看一个例子。在标准Java库中包含一个Date类。他的对象将描述一个时间点。
构造器的名字应该和类名相同。因此Date类的构造器名为Date。
要想构造一个Date对象,需要在构造器前面加上new操作符,如下图所示:
new Date();
这个表达式构造了一个新对象。这个对象被初始化为当前的日期和时间。
如果需要的话,也可以将这个对象传递给一个方法:
System.out.println(new Date());

注:使用Date类,需要import java.util.*; 或者import java.util.Date;System.out.println(new Date());        System.out.printf("%tF",new Date());        System.out.println();
构造器的名字应该和类相同。因此Date类的构造器名为Date。要想构造一个Date对象,需要在构造器前面加上new操作符。        new Date();        这个表达式构造了一个新对象。这个对象被初始化为当前的时间和日期。        如果需要的话,也可以将对象传递给一个方法:System.out.println(new.Date());        或者,可以将一个方法应用于刚刚创建的对象。String s=new Date().toString();        Date类中有一个toString方法。这个方法将返回日期的字符串描述。下面的语句将说明如何将toString方法应用于新构造的Date对象上。String s=new Date().toString();

Date()类,打印时间的两种方法:

 // 打印时间第一种方法        System.out.println(new Date()); //打印时间的第二种方法        System.out.println(new Date().toString());
      String s=new Date().toString();        System.out.println(s);

在这两个例子中,构造的对象只使用了一次。通常,希望构造的对象可以多次使用,因此,需要将对象放在一个变量中:

Date birthday=new Date();
        Date well=null;        System.out.println(well);        run:        null        成功构建 (总时间: 0 秒)        Date well=null;        String s=well.toString();        则:编译错误

Date birthday=new Date();
在对象与对象变量之间存在着一个重要的区别。例如:
Date well; //Date变量没有指向任意对象
以上语句定义了一个对象变量,它可以引用Date类型的对象。但是,一定要认识到:变量不是一个对象,变量只能引用对象。因为well没有引用任何对象,因此,不能将任何Date方法应用于这个变量上。
语句:
String s=well.toString(); //将产生编译错误
首先初始化变量well,有两种方法:
1、well=new Date(); //用新构造的对象初始化这个变量
2、well=hello //让变量引用一个已经存在的对象/对象变量,两个对象变量将引用同一个对象。
一个对象变量并没有实际包含一个对象,而是仅仅引用一个对象。
在java中,任何对象变量的值都是对存储在另外一个地方的对象的引用。
new操作的返回值也是一个引用
Date well=new Date();
有两个部分。表达式new Date()构造了一个Date类型的对象,并且它的值是对新创建对象的引用。这个引用存储在变量well中。
可以显式的将对象变量设置为null,表明这个对象变量目前没有引用任何对象。

            well=null;            if(well!=null)            System.out.println(well); run null
        Date well=new Date();        System.out.println(well);run:Tue Aug 22 14:11:42 CST 2017

toString的两种使用方法

        //toString第一种使用方法        int[] i={1,2};        String m=Arrays.toString(i);                //Arrays.toString(long[])   必须为 Arrays.toString(数组)         System.out.println("数组等于"+m);        =========================        //toString第二种使用方法        Date well=new Date();        String s=well.toString();        System.out.println("Date="+s);
原创粉丝点击