【Head First Java 读书笔记】(四)对象的行为

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

对象有状态和行为

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

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

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

比如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 is0
Dog size isnull

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

integer  0;

floating points 0.0

booleans false

references null

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

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

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

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

Q&A

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

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

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

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

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

时间: 2024-10-10 14:52:57

【Head First Java 读书笔记】(四)对象的行为的相关文章

Effective Java 读书笔记(2创建和销毁对象)

第一章是引言,所以这里不做笔记,总结一下书中第一章的主要内容是向我们解释了这本书所做的事情:指导Java程序员如何编写出清晰.正确.可用.健壮.灵活和可维护的程序. 2.1考虑用静态工厂方法代替构造器 静态工厂方法与构造器相比有四大优势: (1)静态工厂方法有名称,具有适当名称的静态工厂方法易于使用.易于阅读: (2)不必每次在调用它们的时候都创建一个新的对象: (3)可以返回原返回类型的任何子类型的对象: (4)在创建参数化类型实例的时候,它们使代码变得更加简洁. 同时静态工厂方法也有两大缺点

Effective Java读书笔记(3对于所有对象都通用的方法)

3.1 覆盖equals时请遵守通用约定 什么时候应该覆盖Object.equals()方法呢? 如果类具有自己特有的"逻辑相等"概念(不同于对象等同的概念),而且超类还没有覆盖equals以实现期望的行为,这时我们就需要覆盖equals方法. Object.equals()方法具有自反性.对称性.传递性.一致性和与null比较返回false的特点. 实现高质量equals方法的诀窍: (1)使用==操作符检查"参数是否为这个对象的引用".如果是,则返回true,这

《大型网站技术架构》读书笔记四:瞬时响应之网站的高性能架构

一.网站性能测试 (1)性能测试指标:①响应时间:②并发数:③吞吐量:④性能计数器: (2)性能测试方法:①性能测试:②负载测试:③压力测试:④稳定性测试: (3)性能优化策略: ①性能分析:检查请求处理各个环节的日志,分析哪个环节响应时间不合理,检查监控数据分析影响性能的因素: ②性能优化:Web前端优化,应用服务器优化,存储服务器优化: 二.Web前端性能优化 (1)浏览器访问优化: ①减少http请求:因为http是无状态的,每次请求的开销都比较昂贵(需要建立通信链路.进行数据传输,而服务

think in java 读书笔记

java中没有单独函数的概念,依赖类的方法. java中优化了向前引用,类可以在调用者之后. java中包的命名方法实际上是网址的倒转. c++中因为存在全局变量和函数所以会存在一个变量名冲突的问题,但是java中不存在全局变量,不同程序设计者通过不同的类将相同名字的变量和方法隔离. static关键字 通常,我们创建类时会指出那个类的对象的外观与行为.除非用new 创建那个类的一个对象,否则实际上并 未得到任何东西.只有执行了new 后,才会正式生成数据存储空间,并可使用相应的方法. 但在两种

Effective Java读书笔记(4 类和接口)

4.1 使类和成员的可访问性最小化 要区别设计良好的模块和设计不好的模块,最重要的因素在于,这个模块对于外部的其他模块而言,是否隐藏其内部数据和其他实现细节.设计良好的模块会隐藏所有的实现细节,把它的API与它的实现清晰的隔离开来,然后模块之间只通过API进行通信,一个模块不需要知道其他模块内部的工作情况,这个概念被称为信息隐藏或封装,是软件设计的基本原则之一. 4.2 在公有类中使用访问方法而非公有域 坚持面向对象程序设计思想:如果类可以在它所在的包的外部进行访问,就提供访问方法,以保留将来改

【java读书笔记】——java的异常处理

程序在实际环境的运行过程中,安全成为需要首先考虑的重要因素之一,这也是用户和程序员最关心的问题.同时,Java语言健壮性也体现在了能够及时有效地处理程序中的错误,准确的说是Java的异常处理机制为解决安全问题提交了一份满意的答卷. 先从整体上看一下本文要介绍的内容,然后进行详细的分析: 1.异常的概念 异常又称为例外,是特殊的运行错误对象,对应着Java语言特定的运行错误处理机制. 上面的概念是书本上说的,下面我谈一下自己的看法 其实异常处理机制提供了统一的机制来识别和响应程序错误,异常可以为我

《高效能程序员的修炼》读书笔记四

第一章第三节:如何培养写作习惯 -------------------------------- 我个人一直坚信要成为一名优秀的程序员,其实和写代码是没有多大关系的(刚好本书作者也是这样的想法).当然,作为一名程序员的话,具有一定水平的技术能力还是需要的.但,个人觉得更重要的是良好地沟通技巧. 本书作者的合伙人Joel Spolsky有过这样一段话: 杰出的程序员跟勉强过得去的程序员之间的差别,不在于他们掌握了多少种编程语言,也不在于他们谁更擅长Python或Java.真正的关键是,他们能不能把

【java读书笔记】——java开篇宏观把控 + HelloWorld

学完java有一段时间了,一直没有做相应的总结,总觉得有一种缺憾.从这篇博客开始,将自己平时的学习笔记进行总结归纳,分享给大家. 这篇博客主要简单的介绍一下java的基础知识,主要的目的是扫盲.原来只是听说过java,现在自己真正开始学习了,看完了第一集视频之后,问自己,你知道java是什么吗?问完之后才发现一无所知,上完查一查,简单了解一下,给自己扫盲. 介绍 知道java是一种可跨平台应用软件的面向对象的程序设计语言,就可以了. 组成 Java由四方面组成:java编程语言,java类文件格

【java读书笔记】JSTL,快速精通

JSTL并不是什么新颖的技术而且很简单,甚至有人认为JSTL已经过时了.但是我认为它既然存在,就有存在的道理,作为技术人员就应该知道它们是什么,怎么使用,有什么优点. JSTL包含两部分:标签库和EL语言.下面先介绍标签库,再介绍EL语言,最后总结一下JSTL的优点. JSTL JSTL简介 JSTL(JavaServer Page Standard Tag Library,即:JSP标准标签库),是由SUN公司提供的简化JSP页面设计的标签.JSTL是由Core(核心库).Format(格式化

R实战读书笔记四

第三章 图形入门 本章概要 1 创建和保存图形 2 定义符号.线.颜色和坐标轴 3 文本标注 4 掌控图形维数 5 多幅图合在一起 本章所介绍内容概括如下. 一图胜千字,人们从视觉层更易获取和理解信息. 图形工作 R具有非常强大的绘图功能,看下面代码. > attach(mtcars) > plot(wt, mpg) > abline(lm(mpg~wt)) > title("Regression of MPG on Weight") > detach(m