- 1、本文档共33页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Java基础第6章类设计
第六章 类设计
面向对象是一种强力的软件开发方法,它将数据和操作视为一个相互依赖、不可分割的整体。由于面向对象的方法更符合人们的思维习惯,同时有助于控制软件的复杂性、提高效率,从而得到了最广泛的认可,也已经成为目前最为流行的一种软件开发方法。在各个不同版本的中,对面向对象理念的解释也都是大同小异。其中以是Coad、Yourdon的:“面向对象=对象+类+继承+消息通讯”最为著名。也被人们所熟知。
6.1 类与对象
对象的初始化通常由类的构造器来完成。我们可以简单的把构造器理解为一种特殊的成员方法,在每次创建对象时自动被调用。使用构造器要注意以下几个问题:
1.构造器必须与类名相同;
2.构造器不能添加返回类型;
3.构造器只能用范围限定修饰符来修饰;
4.构造器一般是公有的;
5.构造器通常仅仅进行对象的初始化工作;
6.构造器是被系统自动调用的,不能像调用其他普通方法那样显式的调用构造器。
下面先看一个circle类的例子
例6.1 :
public class test
{
public static void main(String args[])
{
circle c = new circle();
c.output();
}
}
class circle
{
double r;//半径
double pai;//圆周率
public circle()
{
r = 3.5;
pai = 3.14;
}
public void output()
{
System.out.print(圆的面积为:\t);
System.out.println(pai*pai*r);
}
}
当主方法使用new关键字来创建circle对象时,就会自动调用构造器。其实除了可以用构造器进行初始化外,还能通过“语句块”的方式来实现。下面就通过“语句块”的方式来改写circle类,代码如下:
例6.2 :
class circle
{
double r;//半径
double pai;//圆周率
{
r = 3.5;
pai = 3.14;
}
public void output()
{
System.out.print(圆的面积为:\t);
System.out.println(pai*pai*r);
}
}
这看起来很难理解。然而我们只需要知道JAVA中能支持这种用法就够了。其实普通的“语句块”是很少用到的。用的更多的是static“语句块”来给类中的静态属性初始化。从上面的代码中,我们很容易的发现:很显然把圆周率(pai)定义为静态的更为合理一些。
例6.3 :
class circle
{
double r;//半径
static double pai;//圆周率
{//普通(非静态)语句块
r = 3.5;
}
static //静态语句块
{
pai = 3.14;
}
public void output()
{
System.out.print(圆的面积为:\t);
System.out.println(pai*pai*r);
}
}
其实JAVA引入 “语句块”的概念也是无奈之举:因为众所周知,JAVA是不支持静态构造器的。所以引入“语句块”就是为了解决静态属性初始化的问题。从上面的例子我们能够非常清楚的看出“语句块”就是用一对{}括起来的属性赋值语句,并且本身不能接受任何参数。所以JAVA中的“语句块”跟C#中的静态构造方法比起来就落了下乘。然而有总剩余无,我们所能做的也仅仅是期望在新的JDK版本中能有新的突破。
通过上面的例子,我们了解了“语句块”的概念。那么也需要知道构造器、非静态“语句块”、静态“语句块”在类实例化时的调用顺序。大多数的读者,往往并不太关心这种非常细节的技术问题。试想一下在非静态“语句块”中和构造器中都对同一个属性赋了值,那么最终是哪一个值呢?这种细节的东西如果没掌握住,那么在调试程序的时候会浪费大量的时间,并且往往找不到问题的所在。构造器与非静态“语句块”每实例化一个对象就调用一次。而静态“语句块”则是不管实例化多少个对象,都只在实例化第一个对象时才被调用一次。而调用的先后顺序是:静态语句块-(非静态语句块—构造器。
下面给出一个可以运行的程序,读者可以编译运行它来加深理解。
例6.4 :
public class transferSequence
{
{
System.out.println(**我是非静态的代码块,创建多少个对象我就被调用多少次);
}
static
{
System.out.println(--我是静态的代码块,无论创建多少个对象我都被调唯一的调用次);
文档评论(0)