d.bark(3);
方法 会运用形参。调用的一方会传入实参。
实参是传给方法的值。当传入放后就成了形参。参数跟局部(local)变量是一样的。
它有类型与名称,可以在方法内运用。
重点是:如果某个方法需要参数,你就一定得传东西给它。那个东西得是适当类型的值。
Dog d =new Dog();
d.bark(3);
void bark (int numOfBarks){
while (numOfBark>0){
System.out.println(“ruff”);
numOfBark = numOfBark -1;
}
}
方法可以有返回值。每个方法都声明返回的类型。还可以设成返回void类型,这代表并没有返回任何东西。
void go(){
}
我们可以声明一个方法,回传给调用方指定的类
int giveSecret(){
return 42
}
方法可以有多个参数。在声明的时候 要用逗号分开,传入的时候也是用逗号分开。最重要的是,如果方法有参数,你一定以正确的数量、类型、和顺序来传递参数。
调用需要两个参数的方法,并传入两个参数:
void go(){
TestStuff t = new TestStuff();
t.takeTwo(12.34);
}
//传入的参数全以相同的顺序赋值。第一个实参全赋值给第一个形参,以此类推
void takeTwo(int x,int y){
int z = x +y;
System.out.println(“Total is”+z );
}
你也可以将变量当作参数传入,只哟啊类型相符就可以:
void go(){
int foo=7;
int bar=3;
t.takeTwo(foo.bar);
}
void takeTwo(int x,int y){
int z = x +y;
System.out.println(“Total is”+z );
}
要点
运用参数与返回类型
我们已经看过参数与返回类型的工作,接下来就要有效地利用了:来看Getter与Setter。
Getter与Setter可计你执行get与set。Getter的目的只有一个,就是返回实例变量的值。毫无意外的,Setter的目的就是要取用一个参数来设定实例变量的值。
ElectrioGuitar
brand
numOfPickupsrockStarUsesit
getBrand()
setBrand()
getNumOfPickups()setNumOfPickups()
getRockStarUsesit()setRockStarUsesit()
class lectricGuitar{
string brand;
int numofPickups;
boolean rockStarUsesIt;
String getBrand(){
return brand;
}
void setBrand(string aBrand){
brand =Brand;、
}
int getNumofPickups(){
return numfPickups;
}
void setNumofPickups(int num){
numofPickups= num;
boolean getRockstarUsesIt(){
return rockstarUsesIt;
}
void setRockstarUsesIt(boolean yesOrNo){
rockStarUsesIt =yesOrNo;
}
}
我们并没有注意到数据会被全世界的人看到,甚至还可以被改动
你可能经历过暴露出实例变量的不愉快感觉。
暴露的意思是可通过圆点运算符来存取像是:
tehCat.height=27;
你可以把这件事情看做是直接通过远程控制修改Cat的实例变量。若远程控制落入不当之人的手上,变量就可能会成为杀伤力强大的武器。因为你无法防止下面的操作。
theCat.height=0;
这一定会很糟糕。所以我们需要创建Setter这个方法给所有的实例变量,并寻求某种方法强制其他程序都必须通过Setter来设定变量而不是直接的存取。
integers 0
floating points 0.0
booleans false
references nul
实例变量与局部变量之间的差别
class Horse{
private double height =15.2;
private String breed;
class AddThing{
int a;
int b= 12;
}
publie int add(){int total =a+b;
return total;
}
class Foof{
public void go(){
int X;
int z=x+ 3;}
}
无法编译!你可以声明没有值的x,但若要使用时编译器就会给出肇示
有时你需要知道两个primitive主数据类型是否相等。很简单,只要使用=-这个运算符就可以。有时你想要知道两个引用变量是否引用到堆上的同一个对象。这也很容易,也是使用--运算符。但有时你会需要知道两个对象是否真的相等。此时你就得使用cquals()这个方法。相等的意义要视对象的类型而定。举例来说,如果两个不同的String带有相同的字符,它们在涵义上是相等的。但对Dog来说,你认为尺寸大小或名字一样的Dog是相等的吗?所以说是否被视为相等要看对象类型而定。现在我们要知道的是--只用来比对两个变量的字节组合,实质所表示的意义则不重要。字节组合要么就是相等,要么就是不相。
使用==来比对primitive主数据类型
这个运算式可以用来比较任何类型的两个变量,它只是比较其中的字节组合。
int a -3;
byte b=3;
if(a == b){ // true )
使用==来判别两个引用是否都指向同一对象
要记得,这只是在比较字节组合的模样。此规则适用于引用与primitive主数据类型。因此--运算符对参照相同对象的引用变量会返回值。在此情况下我们还是无法得知字节组合的样式,但可以确定的是所参照的相同的对象。
Foo a = new roo();
Foo b = new Foo();
Foo c = a
if(a == b) { // false }
if(a == c) { // true }
if(b == c) { // false }