狂神JAVASE系列-面向对象编程01

1. 面向过程 VS 面向对象?   

面向过程编程:

        讲究一手按部就班,解决问题思考的方式按照步骤,第一步做什么,第二步做什么,适合处理一些较为简单的问题。

面向对象编程(Object-Oriented Programming,OOP):

        讲究分类的思维,解决问题首先需要思考的是需要用到哪些分类,然后对分类在进行单独的思考,最后对具体的分类下的细节在做面向过程的探索。适合处理较为复杂的问题,尤其是利于多人协作

        总而言之,面向对象和面向过程相辅相成,面向对象从宏观上把握,但是涉及到微观操作还是需要面向过程的思维方式。

==================================================================

什么是面向对象编程?

        面向对象的编程的本质思想就是:以类的方式组织代码,以对象组织(封装)数据(好好体会本句)。

面向对象编程的三大特性:

       

类是抽象的,对象是具体的事物。例如:狗就是类,XX家的狗旺财就是一个对象。

 2. 方法基础回顾

        

 

 

方法定义示例:      

//main方法
    public static void main(String[] args) {
        /*
        下述为定义方法的这个语法(规范)
        修饰符 返回值类型 方法名(参数列表){
            //方法体
            return 返回值;
        }
         */
    }
    //return结束方法,返回一个结果
    public String sayHello(){
        return "sayHello";
    }
    public void print(){
        return;  //没有返回值 直接return  或者不写
    }
    public int max(int a,int b){
        return a > b ? a : b;//三元运算符
    }

  关于方法调用的问题:

        静态方法的调用

    非静态方法调用

分析:

        静态方法,也就是带有static关键字的,例如上面示例,对于静态方法,可以直接通过类名.方法名的方式直接调用,例如Student.say(),而非静态方法就无法直接通过类名.方法名的方式调用,会报错。

        那么非静态方法怎么去调用?

       非静态方法:就需要将这个类首先先实例化,也就是new一个对象出来,然后在对象.方法名去调用。具体如下所示

================

   public void a(){
        b();
    }
    public void b(){
        
    }
======================
   public static void a(){
        b();
    }
    public static void b(){
        
    }
//前两个都是不会报错的,非静态去调用非静态 静态去调用静态
=============================
//为什么会报错?
一个是静态方法,一个是非静态方法
//static静态方法 是和类一起加载的  
   public static a(){
        b();  //这样调用会报错
    }
//下面这个非静态方法,是需要类实例化之后才存在,也就是那一个存在的去调用不存在的显然是有问题
    public void b(){
        
    }

关于参数传递和引用传递   

public class Demon03 {
    public static void main(String[] args) {
        //实际参数和形式参数的类型要对应
       int add = Demon03.add(1,2); //因为这个static是和类一起加载的,因此不用new直接就可以调用
        System.out.println(add);
    }
    public static  int add(int a,int b){
        return a+b;
    }
}
//值传递
public class Demon04 {
    public static void main(String[] args) {
        int a = 1;
        System.out.println(a); //1
        Demon04.change(a);
        System.out.println(a); //1

    }
    public static void change(int a){
        a = 10;
    }
}
    public static void main(String[] args) {
        Person person = new Person();
        System.out.println(person.name); //null
        Demon05.change(person);
        System.out.println(person.name); //小君

    }
    public static void change(Person person){
        /*
        persom是一个对象,指向的-->Person person = new Person();
         这是一个具体的人,可以改变属性
         */

        person.name="小君";

    }
}
//定义了一个Person类,有一个属性name
class Person{
    String name;
}

思考为什么上述值传递就没有改变值?而引用传递就改变了?

3. 类与对象的创建

        类和对象是什么关系?

  •  类是一种抽象的数据类型,是对某一类事物整体描述/定义,但是并不能代表某一个具体的事物

                动物,植物等

                Person类 Pet类 Car类 

  • 对象就是抽象概念的具体实例

        李四?李四家里的狗子 旺财就是一个具体实例

        如何创建和初始化对象

  • 使用new关键字创建对象
  • 使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象,进行默认的初始化以及对类中构造器的调用。
  • 类中的构造器,其实就是构造方法,是在进行创建对象的时候必须要调用的。并且构造器有两个特点.(构造器相当重要
    • 1:必须和类名相同
    • 2:必须没有返回类型,也不能写void

4. 构造器(构造方法)详解

        

java文件经过编译会生产class文件(字节码),对比Person.java 和这个Person.class文件可知,在new对象的时候,默认帮我们加了一个方法。且这个方法没有返回值,其方法名和类名是相同的。

        由此可得出:

                一个类即使什么都不写,也会存在一个方法(构造器)

                显示的定义构造器  可以初始化一些值

构造器走完了之后,才生成对象。

构造器核心的作用就两个:

        1:使用new关键字,必须要有构造器。(默认是无参构造)也就是new一个对象,本质是在调用构造器,

         2:用来初始化值

报错信息如下:

 定义了有参构造之后,无参构造就显式空在那里即可。

 如上图所示:在new对象的时候传递参数之后,它自动就调用有参构造了,也就是会根据参数去判断,为什么?---------------------------------方法重载。(理解方法重载即可明白此处含义)

一个快捷键:alt+insert   一键生成构造器的快捷键

  默认是生产一个有参构造器,

如果是生成无参构造器,点击红色标注框即可。

构造器 总结:

        1:和类名相同

        2:没有返回值

作用:

        1:new  本质是在调用构造方法

        2:初始化对象的值

注意点:定义有参构造之后,如果想使用无参构造,必须显式的定义一个无参构造,否则就会报错找不到。

        

5. 创建对象内存分析

 

6. 总结

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值