• java学习笔记 --- 面向对象2


    一、匿名对象 
      (1)没有名字的对象
      (2)应用场景
          A:调用方法,仅仅只调用一次的时候。

          

    class Car
    {
        //描述属性。颜色,轮胎数。
        String color;
        int number;
        //描述行为。
        void run()
        {
            System.out.println(color+":"+number);
        }
    }
    class CarDemo
    {
        public static void main(String[] args)
        {    
            //采用匿名对象调用方法
            new Car().run();
            new Car().run();
         }
    }


          B:可以作为实际参数传递。

        

    
    
    class Student {
        public void show() {
            System.out.println("我爱学习");
        }
    }
    
    class StudentDemo {
        public void method(Student s) {
            s.show();
        }
    }
    
    class NoNameDemo {
        public static void main(String[] args) {
            //带名字的调用
            Student s = new Student();
            s.show();
            s.show();
            System.out.println("--------------");
            
            //匿名对象
            //new Student();
            //匿名对象调用方法
            new Student().show();
            new Student().show(); //这里其实是重新创建了一个新的对象
            System.out.println("--------------");
            
            
            //匿名对象作为实际参数传递
            StudentDemo sd = new StudentDemo();
            //Student ss = new Student();
            //sd.method(ss); //这里的s是一个实际参数
            //匿名对象
            sd.method(new Student());
            
            //在来一个
            new StudentDemo().method(new Student());
         }
    }
    
    
    
    
    

      

    二、基本类型和引用类型作为参数传递的区别

       1、基本类型作为参数传递(main方法中值不变)

    class Demo

    {

           public static void main(String[] args)

           {

                  int x = 4;

                  show(x);

                  System.out.println("x="+x);//4

           }

           public static void show(int x)

           {

                  x = 5;

                 

           }

    }

     

      说明:

        基本类型作为参数传递时,其实就是将基本类型变量x空间中的值复制了一份传递给调用的方法show(),当在show()方法中x接受到了复制的值,再在show()方法中对x变量进行操作,这时只会影响到show中的x。当show方法执行完成,弹栈后,程序又回到main方法执行,main方法中的x值还是原来的值。

    2、引用参数作为值传递

      

    说明:

      当引用变量作为参数传递时,这时其实是将引用变量空间中的内存地址(引用)复制了一份传递给了show方法的d引用变量。这时会有两个引用同时指向堆中的同一个对象。当执行show方法中的d.x=6时,会根据d所持有的引用找到堆中的对象,并将其x属性的值改为6,show方法弹栈。由于是两个引用指向同一个对象,不管是哪一个引用改变了引用的所指向的对象的中的值,其他引用再次使用都是改变后的值。

    三、封装

      (1)隐藏实现细节,提供公共的访问方式
       (2)好处:
          A:隐藏实现细节,提供公共的访问方式
          B:提高代码的复用性
          C:提高代码的安全性
       (3)设计原则
          把不想让外界知道的实现细节给隐藏起来,提供公共的访问方式
       (4)private是封装的一种体现。
          封装:类,方法,private修饰成员变量

      (5)使用setXXX(),getXXX()对外提供

    四、构造方法

      (1)作用:用于对对象的数据进行初始化
      (2)格式:
            A:方法名和类名相同
            B:没有返回值类型,连void都不能有
            C:没有返回值

         修饰符 构造方法名(参数列表){

          }

    /*
        构造方法:
            给对象的数据进行初始化
    
        格式:
            A:方法名与类名相同
            B:没有返回值类型,连void都没有
            C:没有具体的返回值
    */
    class Student {
        private String name; //null
        private int age; //0
        
        public Student() {
            System.out.println("这是构造方法");
        }
    }
    
    class ConstructDemo {
        public static void main(String[] args) {
            //创建对象
            Student s = new Student();
            System.out.println(s); //Student@e5bbd6
        }
    }


      
              思考题:构造方法中可不可以有return语句呢?
              可以。而是我们写成这个样子就OK了:return;
              其实,在任何的void类型的方法的最后你都可以写上:return;
       (3)构造方法的注意事项
          A:如果我们没写构造方法,系统将提供一个默认的无参构造方法
          B:如果我们给出了构造方法,系统将不再提供默认构造方法
             如果这个时候,我们要使用无参构造方法,就必须自己给出。
             推荐:永远手动自己给出无参构造方法。

         C:一个类中可以有多个构造函数,多个构造函数是以重载的形式存在的

         D:构造函数中也是有return语句的,用于结束初始化动作。

         E:构造函数是可以被private修饰的,作用:其他程序无法创建该类的对象
       (4)给成员变量赋值的方式
          A:setXxx()
          B:带参构造方法

       (5)一般方法和构造方法的区别    

        构造函数在对象创建时就执行了,而且只执行一次。

        一般函数是在对象创建后,需要使用时才被对象调用,并可以被多次调用。

       思考:

          有了构造函数之后可以对对象的属性进行初始化,那么还需要对应的set和get方法吗?

          需要相应的set和get方法,因为对象在创建之后需要修改和访问相应的属性值时在,这时只能通过set或者get方法来操作。

     五、this关键字

        (1)代表当前类的引用对象
            记住:哪个对象调用方法,该方法内部的this就代表那个对象

        (2)调用其他构造函数的语句必须定义在构造函数的第一行,原因是初始化动作要最先执行。

  • 相关阅读:
    【宁夏区域赛】G.Pot!
    【C#】上机实验二
    【C#】上机实验三
    Luogu P1437 敲砖块
    Luogu P1463 反素数
    Luogu P1445 樱花
    GHOJ 926 小X的AK计划
    【题解】Beads
    【题解】Antisymmetry
    【题解】A Horrible Poem
  • 原文地址:https://www.cnblogs.com/flei/p/6602406.html
Copyright © 2020-2023  润新知