标签:
对象有状态和行为
类所描述的是对象知道什么和执行什么。
任一类的每个实例都带有相同的方法,但是方法可以根据实例变量的值来表现不同的行为。
比如Song类有title实例变量,不同的实例都可以调用play()方法,但会根据title播放不同的歌曲。
方法会运用形参,调用的一方会传入实参。
实参是传给方法的值,当它传入方法后就成了形参。参数跟局部变量一样,它有类型与名称,可以在方法内运行。
方法可以有返回值,每个方法都声明返回的类型。
如果一个方法声明有返回值,就必须返回所声明类型的值。
方法无法改变调用方所传入的参数
Q&A:
如果想要传入的参数是对象而不是primitive主数据类型会怎样?
在Java中所传递的所有东西都是指,但此值是变量所携带的值。还有,引用对象的变量所携带的是远程控制而不是对象本身。若你对方法传入参数,实际上传入的是远程控制的拷贝。
方法可以声明多个返回值吗?有没有别的方法可以返回多个值?
方法只能声明单一的返回值。可以利用数组来返回多个值
Getter与Setter(Accessor与Mutator),Getter与Setter可让你执行get与set。Getter的目的只有一个,就是返回实例变量的值,Setter的目的就是要取用一个参数来设定实例变量的值。
暴露的意思是可通过圆点运算符来存取,像是:
tehCat.height = 27;
直接通过远程控制修改Cat的实例变量。
数据隐藏
使用公有与私有这两个存取修饰符(access modifier)
以下就是封装的基本原则:将你的实例变量标记为私有的,并提供公有的getter与setter来控制存取动作。
将实例变量标记为private
将getter与setter标记为public
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()来判断两个对象是否在意义上相等。
【Head First Java 读书笔记】(四)对象的行为
标签:
原文地址:http://www.cnblogs.com/six-moon/p/4743195.html