博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Head First Java 读书笔记】(四)对象的行为
阅读量:5116 次
发布时间:2019-06-13

本文共 3058 字,大约阅读时间需要 10 分钟。

状态影响行为,行为影响状态

对象有状态和行为

类所描述的是对象知道什么和执行什么。

同一类型的每个对象能够有不同的方法行为吗?

任一类的每个实例都带有相同的方法,但是方法可以根据实例变量的值来表现不同的行为。

比如Song类有title实例变量,不同的实例都可以调用play()方法,但会根据title播放不同的歌曲。

方法的参数,你可以传值给方法

方法会运用形参,调用的一方会传入实参。

实参是传给方法的值,当它传入方法后就成了形参。参数跟局部变量一样,它有类型与名称,可以在方法内运行。

从方法中取返回值

方法可以有返回值,每个方法都声明返回的类型。

如果一个方法声明有返回值,就必须返回所声明类型的值。

Java是通过传递的,也就是说通过拷贝传递

方法无法改变调用方所传入的参数

 

Q&A:

如果想要传入的参数是对象而不是primitive主数据类型会怎样?

在Java中所传递的所有东西都是指,但此值是变量所携带的值。还有,引用对象的变量所携带的是远程控制而不是对象本身。若你对方法传入参数,实际上传入的是远程控制的拷贝。

方法可以声明多个返回值吗?有没有别的方法可以返回多个值?

方法只能声明单一的返回值。可以利用数组来返回多个值

要点:

  • 类定义对象所知及所为。
  • 对象所知者为实例变量。
  • 对象所为者是方法。
  • 方法可以根据实例变量来展现不同的行为
  • 方法可使用参数,这代表你可以传入一个或多个值给方法
  • 传给方法的参数必须符合声明时的数量、顺序和类型。
  • 传入与传出方法的值类型可以隐含地方法或者明确地缩小。
  • 方法必须声明返回类型。使用void类型代表方法不返回任何东西。
  • 如果方法声明了非void的返回类型,那就一定要返回与声明对象类型相同的值。

运用参数与返回类型

Getter与Setter(Accessor与Mutator),Getter与Setter可让你执行get与set。Getter的目的只有一个,就是返回实例变量的值,Setter的目的就是要取用一个参数来设定实例变量的值。

封装(Encapsulation)

暴露的意思是可通过圆点运算符来存取,像是:

tehCat.height = 27;

直接通过远程控制修改Cat的实例变量。

数据隐藏

使用公有与私有这两个存取修饰符(access modifier)

以下就是封装的基本原则:将你的实例变量标记为私有的,并提供公有的getter与setter来控制存取动作。

将实例变量标记为private

将getter与setter标记为public

封装GoodDog

public class GoodDog {    private int size;    public int getSize() {        return size;    }    public void setSize(int size) {        this.size = size;    }    void bark() {        if (size > 60) {            System.out.println("Wooof!Wooof!");        } else if (size > 14) {            System.out.println("Ruff!Ruff!");        } else {            System.out.println("Yip!Yip!");        }    }}
public class GoodDogTestDriver {    public static void main(String[] args) {        GoodDog one = new GoodDog();        one.setSize(70);        GoodDog two = new GoodDog();        two.setSize(8);        System.out.println("Dog one:" + one.getSize());        System.out.println("Dog two:" + two.getSize());        one.bark();        two.bark();    }}

结果:

Dog one:70

Dog two:8
Wooof!Wooof!
Yip!Yip!

声明与初始化实例变量

变量声明至少需要名称和类型,同时也可以初始化(赋值)变量,但如果你没有初始实例变量时,调用getter会发生什么事?也就是说实例变量在初始化之前的值是多少?

public class PoorDog {    private int size;    private String name;    public int getSize() {        return size;    }    public void setSize(int size) {        this.size = size;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}public class PoorDogTestDrive {    public static void main(String[] args) {        PoorDog one = new PoorDog();        System.out.println("Dog size is" + one.getSize());        System.out.println("Dog size is" + one.getName());    }}运行结果:Dog size is0Dog size isnull

实例变量永远都会有默认值,就算没有明确的赋值给实例变量,或者没有调用setter方法,实例变量还是会有值

integer  0;

floating points 0.0

booleans false

references null

实例变量与局部变量之间的差别

1.实例变量是声明在类内而不是方法中

2.局部变量是声明在方法中的。

3.局部变量在使用前必须初始化(局部变量没有默认值!如果变量被初始化之前就使用的话,编译期就会显示错误)

Q&A

那方法的参数呢?局部变量的规则也适用于它们身上么?

方法的参数基本与局部变量是相同的,他们都是在方法中声明的。而参数并没有未声明的问题,所以编译器也不可能对这种事情显示出错误。如果调用方法而没有赋值参数时编译器就会显示错误。所以说参数一定会被初始化,编译器会确保方法被调用时会有与声明所相符的参数,且参数会自动地被赋值进去。

变量的比较(primitive主数据类型或引用)

使用==来比较两个primitive主数据类型,或者判断两个引用是否引用同一个对象。

使用equals()来判断两个对象是否在意义上相等。

 

转载于:https://www.cnblogs.com/six-moon/p/4743195.html

你可能感兴趣的文章
Use XSLT in wix
查看>>
[转] Kmeans与Meanshift、EM算法的关系
查看>>
CVE-2010-2883Adobe Reader和Acrobat CoolType.dll栈缓冲区溢出漏洞分析
查看>>
学习笔记——矩阵(1) 02.15
查看>>
cross compile ZThread for ios && android
查看>>
lucene 类介绍
查看>>
phpstudy手动把mysql数据库从5.5.56升级到5.6.41
查看>>
#1.如何使用Git命令从远程Clone项目到本地
查看>>
fiddler修改返回的值
查看>>
命令行导入、导出dmp文件
查看>>
新开博客,随时记录我的学习过程
查看>>
chrome cheatsheet 快捷键
查看>>
Datatable的Select()方法简介
查看>>
浅谈hesders底下的Host,Origin和Referer的区别
查看>>
[No0000EA]C# 可空类型(Nullable)
查看>>
All about Built-inTypes
查看>>
Android入门
查看>>
吃得菜根,百事可为。
查看>>
用ASP.NET MVC仿站糗事百科
查看>>
安装 ant
查看>>