对象的行为-状态影响行为,行为影响状态

小白Java学习记录4

  • 一周掌握 Java 入门知识

学习内容:

  1. 对象的行为

学习产出:

你可以传值给方法

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;

       }

}

  1. 调用Dog的bark()方法,并传入“3”这个值(作为此方法的参数)。
  2. 以int类型的值3会传递给bark()。
  3. 此值会传给nunmOfBark这个参数(int类型的变量)。
  4. 把numOfBarks当作一般的变量使用。

你可以从方法中取返回值

方法可以有返回值。每个方法都声明返回的类型。还可以设成返回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 );

}

要点

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

运用参数与返回类型
我们已经看过参数与返回类型的工作,接下来就要有效地利用了:来看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;
          }
}

封装(Encapsulation)


我们并没有注意到数据会被全世界的人看到,甚至还可以被改动
你可能经历过暴露出实例变量的不愉快感觉。
暴露的意思是可通过圆点运算符来存取像是:
tehCat.height=27;
你可以把这件事情看做是直接通过远程控制修改Cat的实例变量。若远程控制落入不当之人的手上,变量就可能会成为杀伤力强大的武器。因为你无法防止下面的操作。
theCat.height=0;
这一定会很糟糕。所以我们需要创建Setter这个方法给所有的实例变量,并寻求某种方法强制其他程序都必须通过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主数据类型或引用)


有时你需要知道两个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 }

  • 使用==来比较两个primitive主数据类型,或者判断两个引用是否引用同一个对象。
  • 使用equals()来判断两个对象是否在意义上相等。

你可能感兴趣的:(java,学习,开发语言)