作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!

在Java基础01 从HelloWorld到面向对象,我们初步了解了对象(object)。对象中的数据成员表示对象的状态。对象可以执行方法,表示特定的动作。

此外,我们还了解了类(class)。同一类的对象属于相同的类型(type)。我们可以定义类,并使用该定义来产生对象。

我们进一步深入到对象。了解Java中方法与数据成员的一些细节。

调用同一对象的数据成员

方法可以调用该对象的数据成员。比如下面我们给Human类增加一个getHeight()的方法。该方法返回height数据成员的值:

public class Test
{public static void main(String[] args){Human aPerson = new Human();System.out.println(aPerson.getHeight());}}class Human
{/*** accessor*/int getHeight(){return this.height;}int height;
}

我们新增了getHeight方法。这个方法有一个int类型的返回值。Java中使用return来返回值。

注意this,它用来指代对象自身。当我们创建一个aPerson实例时,this就代表了aPerson这个对象。this.height指aPerson的height。

this是隐性参数(implicit argument)。方法调用的时候,尽管方法的参数列表并没有this,Java都会“默默”的将this参数传递给方法。

(有一些特殊的方法不会隐性传递this,我们会在以后见到)

this并不是必需的,上述方法可以写成:

    /*** accessor*/int getHeight(){return height;}

Java会自己去判断height是类中的数据成员。但使用this会更加清晰。

我们还看到了/** comments  */的添加注释的方法。

方法的参数列表

Java中的方法定义与C语言中的函数类似。Java的方法也可以接收参数列表(argument list),放在方法名后面的括号中。下面我们定义一个growHeight()的方法,该方法的功能是让人的height增高:

public class Test
{public static void main(String[] args){Human aPerson = new Human();System.out.println(aPerson.getHeight());        aPerson.growHeight(10);System.out.println(aPerson.getHeight());}}class Human
{
/*** accessor*/int getHeight(){return this.height;}
    /**     * pass argument     */void growHeight(int h){this.height = this.height + h;}int height;
}

在growHeight()中,h为传递的参数。在类定义中,说明了参数的类型(int)。在具体的方法内部,我们可以使用该参数。该参数只在该方法范围,即growHeight()内有效。

在调用的时候,我们将10传递给growHeight()。aPerson的高度增加了10。

调用同一对象的其他方法

在方法内部,可以调用同一对象的其他方法。在调用的时候,使用this.method()的形式。我们还记得,this指代的是该对象。所以this.method()指代了该对象自身的method()方法。

比如下面的repeatBreath()函数:

public class Test
{public static void main(String[] args){Human aPerson = new Human();aPerson.repeatBreath(10);}}class Human
{void breath(){System.out.println("hu...hu...");}/*** call breath()*/void repeatBreath(int rep){int i;for(i = 0; i < rep; i++) {this.breath();}}int height;
}

为了便于循环,在repeatBreath()方法中,我们声明了一个int类型的对象i。i的作用域限定在repeatBreath()方法范围内部。

(这与C语言函数中的自动变量类似)

数据成员初始化

在Java中,数据成员有多种初始化(initialize)的方式。比如上面的getHeight()的例子中,尽管我们从来没有提供height的值,但Java为我们挑选了一个默认初始值0。

基本类型的数据成员的默认初始值:

  • 数值型: 0
  • 布尔值: false
  • 其他类型: null

我们可以在声明数据成员同时,提供数据成员的初始值。这叫做显式初始化(explicit initialization)。显示初始化的数值要硬性的写在程序中:

public class Test
{public static void main(String[] args){Human aPerson = new Human();System.out.println(aPerson.getHeight());}}class Human
{/*** accessor*/int getHeight(){return this.height;}int height = 175;
}

这里,数据成员height的初始值为175,而不是默认的0了。

Java中还有其它初始化对象的方式,我将在以后介绍。

总结

return

this, this.field, this.method()

默认初始值,显式初始化

欢迎继续阅读“Java快速教程”系列文章

Java基础02 方法与数据成员相关推荐

  1. java数据成员_Java基础教程之对象的方法与数据成员

    在Java基础教程之从Hello World到面向对象一文中,我们初步了解了对象(object).对象中的数据成员表示对象的状态.对象可以执行方法,表示特定的动作. 此外,我们还了解了类(class) ...

  2. Java基础-02(基础语法)

    Java基础-02(基础语法) 一 注释 加粗样式 注释用来解释和说明程序的文字,注释是不会被执行的. 1.1单行注释 //这是一条单行注释 public int i; 1.2多行注释 /* 这是 * ...

  3. Java基础篇:如何解决成员的访问和继承?

    Java基础篇:如何解决成员的访问和继承? 尽管子类包括超类的所有成员,它不能访问超类中被声明成private的成员.例如,考虑下面简单的类层次结构: /* In a class hierarchy, ...

  4. Java基础学习——方法

    Java基础学习--方法 前言 本文将介绍有关Java面向对象编程的知识之一:方法:其中包括方法的概念,三类方法的格式.方法的重载以及方法的内存 方法的概念 方法是程序中最小的执行单元 方法定义:将一 ...

  5. Java 基础语法(键盘录入数据,水仙花数,各类循环,random,数组,内存分配,方法,面向对象、封装、this、构造方法、标准类、API)

    DAY1 基础语法 1 键盘录入数据,使用变量接收 导包.创建对象.接收数据 import java.util.Scanner; Scanner sc = new Scanner(System.in) ...

  6. Java基础02 面向对象

    文章目录 01 面向对象基础 1.设计对象并使用 1.1 类和对象 1.2 类的几个补充注意事项 2.封装 2.1 封装的概念 2.2 private关键字 3.this关键字 3.1 就近原则 3. ...

  7. java基础-02数据类型

    基本类型 整数 byte byte 数据类型是8位.有符号的,以二进制补码表示的整数 最小值是 -128(-2^7) 最大值是 127(2^7-1) 默认值是 0 byte 类型用在大型数组中节约空间 ...

  8. JAVA基础——toString()方法,java基础面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  9. Java基础(28)数据输入输出流、内存操作流、打印流、随机访问流、序列化与反序列化流、Properties类(集合)

    1. 数据输入输出流 1. 数据输入输出流的概述: (1)以Stream结尾的,一般都是字节流 (2)数据输入流(DataInputStream):数据输入流允许应用程序以与机器无关方式从底层输入流中 ...

最新文章

  1. Python:Scrapy的安装和入门案例
  2. 如何在CentOS/RHEL 7上借助ssm管理LVM卷?
  3. Tomcat的系统架构(以Tomcat5为基础)
  4. “象征界”的奇观:刘天怜花鸟工笔作品印象
  5. [GAN学习系列3]采用深度学习和 TensorFlow 实现图片修复(上)
  6. 【Siddhi】Siddhi 组件架构
  7. 用汇编的眼光看C++(之循环流程)
  8. Matlab实现熵权法并计算权重和综合评分——附增完整代码和测试用例
  9. html5svg在线编辑器,五款超实用的开源SVG工具
  10. 火狐浏览器表单不跳转_火狐浏览器的表单问题,求解_html/css_WEB-ITnose -
  11. 中西医结合儿科疾病 100249
  12. ELI'S CURIOUS MIND
  13. Android中MVP模式
  14. 杰奇小说站PC端跳转WAP端实现方式
  15. Linux基础——防火墙(一)
  16. 带你了解什么是MySQL数据库(一)
  17. 检索匹配的利器:正则表达式
  18. 5G基站: 请叫哥牛逼!
  19. 一文道尽JavaScript 20年的发展史
  20. 3 链表(LinkedList)

热门文章

  1. linux安装jetty部署war包,jetty部署war包
  2. linux进程map,linux下unordered_map和map在小数据下性能差异
  3. c++禁止进程被结束_多进程任务实现
  4. c++ dump某个变量_linux内核调试之 crash分析dump文件
  5. 微信小程序(购物车)--在wxml中设置保留小数位数
  6. 2021-05-10 如何修改Docker的默认镜像存储位置
  7. php内核总结_深入PHP内核之面向对象总结
  8. oracle 获得月最后一天,oracle获取本月第一天和最后一天及Oracle trunc()函数的用法...
  9. @select注解模糊查询_mybatis @SelectProvider 注解, 打赌你没有用过
  10. android组合动画还原,Android - Fragment,View动画,组合动画,属性动画