Java面向对象概述

一、面向对象和面向过程

      面向过程:Procedure Oriented  是一种自顶向下的编程

      面向对象:Object Oriented  是将事物高度抽象化,必须先建立抽象模型(有属性和行为),之后直接使用模型就行 

例:人把大象装进冰箱
         面向过程:

                 1)打开冰箱

                 2)把大象放进去

                 3 )关闭冰箱门
         面向对象:
                  人{
                        打开(冰箱){

                               冰箱.开开()

                        }
                       操作(大象){

                              大象.进入(冰箱)

                       }
                      关闭(冰箱){

                              冰箱.合上()

                       }
                    }

               大象{
                     进入(冰箱){   }

                     }
               冰箱{
                     开开(){   }

                     合上(){   }

                    }

      面向对象的三大特征:封装、继承和多态

二、类的相关知识

      类是对现实生活中一类具有共同特征的事物的抽象,比如所有的鸟都会飞,由属性(成员变量或Field)  &行为(成员方法或Method)组成。对象是实际存在的该类事物的每个个体,是类的具体实例化。 

      成员变量和局部变量  

             在方法体外,类体内声明的变量称为成员变量,分为实例变量(不以static修饰)和类变量(以static修饰),实例变量存在于对象所在的堆内存中,可以有修饰符,如果在声明的时候,不显式的赋值,

那么不同数据类型会有不同的默认初始化值;在方法体内部声明的变量称为局部变量,分为形参(方法签名中定义的变量)、方法局部变量(在方法内定义)、代码块局部变量(在代码块内定义),

局部变量存在于栈内存中,没有修饰符,与所在的方法修饰符相同,一定要显式的赋值(局部变量没有默认初始化值)  

package com.yyx.pratice;

public class Person {
    // 成员变量
    private String name;
    private int age;

    // 成员方法
    public void eatFood() {
        //局部变量
        String foodName = "汉堡";
        System.out.println("我在吃" + foodName);
    }

    public static void main(String[] args) {
        Person person=new Person();
        person.eatFood();
    }
} 

三、类的内存分析

      所有的对象名称都在栈内存中保存,而对象的具体内容则保存在对应的堆内存中,必须使用new关键字才能开辟堆内存空间

类属于引用数据类型,引用数据类型就是指一段堆内存空间可以同时被多个栈内存指向

package com.yyx.pratice;

public class TestZoom {
    public static void main(String[] args) {
        Animal a1 = new Animal();
        a1.name = "花花";// 对象.属性直接赋值
        a1.setAge(3);// 封装思想
        System.out.println(a1.name + " " + a1.getAge());

        Animal a2=new Animal();
        System.out.println(a2.name + " " + a2.getAge());
        
        Animal a3=new Animal();
        a3=a1;
        System.out.println(a3.name + " " + a3.getAge());
    }
}

class Animal {
    String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

}
运行结果:花花 3
        null 0
        花花 3

四、类的构造方法

  •        构造方法的方法名必须与类名一样
  •        构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型,不能被static、final、synchronized、abstract、native修饰
  •       一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行任何代码
  •       构造方法不能由编程人员调用,而由系统调用
  •       构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域

     类对象的属性赋值的先后顺序:

  1. 属性的默认初始化
  2. 属性的显式初始化
  3. 通过构造器给属性初始化
  4. 通过"对象.方法"的方式给属性赋值
package com.yyx.pratice;

public class Person {
    private String name;
    private int age;
    
    /*
     * 无参构造方法,在定义类时没有定义构造方法,
     * 则编译系统会自动插入一个无参数的默认构造器
     */
    public Person() {
        super();
    }

    /*
     * 有参构造方法
     */
    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public static void main(String[] args) {
        Person person1 = new Person();
        person1.setName("张三");
        person1.setAge(23);
        System.out.println(person1.getName() + " " + person1.getAge());
        Person person2 = new Person("李四", 21);
        System.out.println(person2.getName() + " " + person2.getAge());
    }

}

                

猜你喜欢

转载自www.cnblogs.com/xianya/p/9095392.html