java面对对象笔记

一、面对过程和面对对象

1、面对过程

    面对过程的程序设计思想  又简称(POP)

    其关注的焦点在过程:过程就是操作数据的步骤,当过程中的实现代码出现大量重复出现,可以用将这个过程抽取为函数,使复杂的代码被大大的简化,方便维护。

    经典的语言:c语言。

    代码结构:是以函数为组织单位。

    特点:是一种执行者思想,适合解决简单的问题,

    将一个问题分解为一个个步骤,然后逐个解决,

代码的扩展性弱,不方便维护。

2、面对对象

    面对对象的程序设计思想  又简称(OOP)

    其关注的焦点在:在计算机程序设计过程中,类是对现实事物的属性特征、行为特征进行抽象概括的描述。

    典型的语言:Java、C#、C++、Python、Ruby和PHP等。

    代码结构:是以为组织结构,每一种事物都具有自己的 属性 和 行为 / 功能。

    特点:是一种设计者思想,适合解决复杂问题。

    代码扩展性强,方便维护

3.思维的区分

例一:如何开车

    只需分为     汽车打火------->踩离合,松手刹,挂挡------->松离合,踩油门------->汽车行进

    这就是利用面对过程的思想将开车这个问题分为几步依次进行,面对过程适用于简单,不需要相互协作的问题。

例二:如何造车

    这里就不能思考“如何按特定的步骤进行造车”而是“怎样造车”,这就是面对对象的思想,所以面对对象的思想更契合人的思维方式。

    这里将“怎样造车”分为:发动机、底盘、座椅、玻璃、轮胎、车壳,这几个步骤,这几个步骤又通过面对过程的思维进行分解,最后可以得到一辆车。

    这个例子可以体现出面对对象是对事物宏观上的理解,面对过程是微观上的体现。

    当需求单一,或者简单时,我们一步步去操作没问题,并且效率也挺高。 可随着需求的更改,功能的增多,发现需要面对每一个步骤很麻烦了,这时就需要开始思索,能不能把这些步骤和功能进行封装,封装时根据不同的功能,进行不同的封装,功能类似的封装在一起。这样结构就清晰了很多。用的时候,找到对应的类就可以了。这就是面向对象的思想。

   注意: 面对对象与面对过程是相辅相成的,面对对象离不开面对过程。

例三:人将大象关进冰箱

面对过程

1.人打开冰箱

2.大象关进冰箱

3.人关闭冰箱

面对对象

人{
   打开(冰箱){
        冰箱.开门();
   }
   操作(大象){
             大象。进入(冰箱);
   }
   关闭(冰箱){
          冰箱.关门();
   }
}

冰箱类{
      开门(){}
      关门(){}
}

大象类{
      进入(冰箱){   }
}

二、类和对象

    类(Class)和对象(Object)是面向对象的核心概念

  什么是类?

    类:具有相同特征的事物的抽象描述,是抽象的、概念上的定义。

  什么是对象

    对象:实际存在的该类事物的每个个体,是具体的,因而也称为实例。

可以理解为:

    类 => 抽象概念的人;对象 => 实实在在的某个人

    类=>汽车图纸; 对象=>实际存在的一辆汽车,拥有类中定义的功能,可以被使用

1.类的结构

变量:事物属性的描述(名词) 

方法:事物的行为(可以做的事情 动词) 

构造方法:初始化对象 

块:一段没有名称的代码块 

内部类: 即在类体中声明的类

  第一步:发现类

    根据不同类型的车,抽象出“车类” 各种车

    类的声明格式为:

 [访问权限修饰符] [修饰符] class Car{

 }

    访问修饰符有两种public,无(默认)

    修饰符:final,abstract

    关键字class用来定义一个类

    Java类名的命名规范: 类名首字母大写,见名知意,驼峰表示

  第二步:发现类的共有属性(成员变量)

package day1.Cardemo;

public class Car {
/*成员变量(因为变量直接定义在类中,所以称为类的成员)
      名词 属性
      成员变量在类中定义时,可以不给其默认值,系统会自动初始化赋值
        默认值:引用类型 - null
              float - 0.0
              int long - 0
              boolean - false
              char - ' '
    */
    String name;
    float price;
    String color;
}

  声明成员变量的格式为: [访问权限修饰符] [修饰符]

  成员变量是定义在类中,方法体之外的变量。

  成员变量可以使用Java语言中任何一种数据类型(包括基本类型和引用类型)。

  在定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化。

  成员变量可以被类中方法、构造方法和特定类的语句块访问。

  成员变量的作用范围为整个类体。

第三步:发现类的共有行为(成员方法)

package day1.Cardemo;

public class Car {

    String name;
    float price;
    String color;

/*成员方法

     */
    public void run(){
        System.out.println("汽车开始行驶");
    }
    
    public void stop(){
        System.out.println("汽车停止");
    }
    public void showInfor(){
        System.out.println(" 姓名 :"+name+" 价格 :"+100000000+" 颜色 :"+color);
    }
}

2.如何创建并使用对象

kage day1.Cardemo;

public class TestCar {
    public static void main(String[] args) {
        /*
        什么是对象
           对象是类的实例,是以类为模板,在内存中创建出的一个实际存在的实例(对象)
        如何创建对象
           使用new关键字,Car()--类的构造方法,类中会自动提供的
           new Car()  使用new关键字创建一个具体的对象,对象存在内存中
           Car bm/lsls(引用变量)  声明一个Car类型变量
            = 把右边创建的对象内存的地址赋给左边的变量,左边的变量就可以表示内存中的对象了。
        类和对象的关系
        */
        /*
        类是抽象定义的概念,如果要调用,需要定义一个类的实例
        类名  什么都调用不了
         */
        /*
           类是模板,是定义
           对象是具体实例
             万事万物(具体存在)皆为对象
         */
        /*同一类的每个对象有不同存储空间。
          对象是类的一个实例,必然具备该类事物的属性和行为(即方法)。
          使用对象名.属性或对象名.方法的方式访问对象成员(包括属性和方法)
        */
        Car bm = new Car();
        bm.name = "宝马";
        bm.price = 300000;
        bm.color = "白色";
        bm.stop();
        bm.showInfor();

        Car lsls = new Car("劳斯莱斯幻影",100000000,"黑色");

        Car lsls2 = new Car("劳斯莱斯幻影","红色",100000000);
        lsls.run();
        lsls.stop();
        lsls.showInfor();
    }

 3.总结类与对象

    总结类和对象 类是一类事物的抽象概念,是一个模型. 对象是由这个模型所创造的,一个个具体存在的,实实在在存在的实例. 所以创建对象的过程也叫实例化对象.

    现实生活中先有对象后有类,而编程时先设计类后创建对象.

三、构造方法

   package day1.Cardemo;

public class Car {


   
    String name;
    float price;
    String color;

    /*
    构造方法
    功能  构造方法名与类名相同,没有返回值,不需要使用void修饰
    作用  在构造方法中为创建的对象成员变量初始化赋值
    特点  每一个类都有构造方法,如果没有显式地为类定义构造方法,java中将会为该类提供一个默认的无参构造方法,
    public {
        String name = null;
        float price = 0.0;
        String color = null;
    }
    但是只要定义了一个有参构造方法,默认的无参构造方法就会失效
    所以如果定义一个有参构造方法后还需要无参构造方法时,需要重新定义一个无参构造方法
    由方法重载可以引出一个类可以有多个构造方法
     */

   
    public Car(){

    }
    public Car(String n,float a,String g){
        String name = n;
        float price = a;
        String color = g;
    }
    
    public void run(){
        System.out.println("汽车开始行驶");
    }
    
    public void stop(){
        System.out.println("汽车停止");
    }
    public void showInfor(){
        System.out.println(" 姓名 :"+name+" 价格 :"+100000000+" 颜色 :"+color);
    }
}

四、方法的重载

  方法的重载是指一个类中具有相同的名字,但参数不同的多个方法。 l参数不同(可以有三方面的不同)

  数量不同

  类型不同

  顺序不同 

 调用时,会根据不同的参数表选择对应的方法。

注意:方法重载跟方法的返回值类型没有任何关系

package day1.Cardemo;

public class Car {


    String name;
    float price;
    String color;
 public Car(){

    }

  //方法重载
    public Car(String n,float a,String g){
        String name = n;
        float price = a;
        String color = g;
    }
    public Car(String n,String g,float a){
        String name = n;
        float price = a;
        String color = g;
    }

//方法重载
  public void run(){
        System.out.println("汽车开始行驶");
    }
    public  void run(String rate){
        System.out.println("汽车以"+rate+"开始行驶");
    }
    public void stop(){
        System.out.println("汽车停止");
    }
    public void showInfor(){
        System.out.println(" 姓名 :"+name+" 价格 :"+100000000+" 颜色 :"+color);
    }
}

五、对象与引用

(1)右边的“new Car()”,是以Car类为模板,在堆空间里创建一个Car类对象。

(2)左边的“Car bm”创建了一个Car类型引用变量。所谓Car类的引用,就是以后可以用来指 向Car对象的对象引用。

(3)”=”操作符使对象引用指向刚创建的那个Car对象。 我们可以把这条语句拆成两部分:

    Car bm;

    bm= new Car();

这样写,就比较清楚了,有两个实体:一个是对象引用变量,一个是对象本身

    new Car(); 这个语句在堆空间里创建了实体,尽管它们也是确确实实存在的实体,但是, 我们看不见,也摸不着。

    对象没有名字,也就没法直接访问它。我们需要通过对象引用来间接访问对象。

    对象好比是一只很大的气球,但是我们抓不住它。引用变量是一根绳,可以用来系汽球。

    Car car1; (1)创建一根绳子,一根还没有系上任何一个汽球的绳;

    Car car2;(2)又做了一根绳,还没系上汽球,

    car1 = new Car();(3)给car1 系上气球;

    car2 = car1 ;(4)这里,发生了复制行为。要说明的是,对象本身并没有被复制,被复 制的只是对象引用。

  结果是,car2也指向了car1所指向的对象。两根绳系的是同一只汽球

值传递

java中进行方法调用时传参分为两种

    第一种  值传递(形参数类型是基本数据类型):

  方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。

package day2.value;

public class Test1 {
    /*

    形参改变后,实参是没有影响的

     */
    public static void main(String[] args) {
        int a = 10;
        Test1 test = new Test1();
        test.test1(a);
        System.out.println("a="+a);
    }
    public void test1(int b){
        b = 20;
        System.out.println("b="+b);
    }
}

    第二种  引用传递  (形参数类型是引用数据类型参数):

  也称为传地址。方法调用时,实际参 数是对象,这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的 操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法 执行中形式参数的改变将会影响实际参数。

package day2.value;

public class Test2 {
    /*
    引用类型传递-- 引用数据类型作为参数传递,   传递的只是对象的地址,  实参和形参指向的是同一个对象,
    任何一方改变对象的值,另一方也会改变
     */
    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.name = "小白";
        Test2 a = new Test2();
        a.test2(cat);
        System.out.println("小猫叫:"+cat.name);
    }
    public void test2(Cat c){
        c.name = "花花";
        System.out.println("小猫叫:"+c.name);
    }
}

    基本类型传递的是该数据值本身。引用类型传递的是对对象的引用,而不是对象本身 。 但是无论是值传递还是引用传递,其本质都是传值,所以也都统称值传递。

  • 27
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值