zoukankan      html  css  js  c++  java
  • 面向对象、值与引用传参、变量与堆栈

    学习内容

    1.面向对象与面向过程

    面向过程:

    根据需求,分析解决该需求所需要的步骤,利用函数(方法)将这些步骤一一实现,使用时在进行依次调用。

    面向对象:

    把需求分解成一个个的功能,利用函数(方法)将这些功能一一实现,使用时调用功能。

    在面向对象的思维中,不考虑每个功能具体需要哪些步骤、是怎么实现的,简单来说就是你办事我放心。

    例:

    如何把大象装入冰箱?

    面向对象:1.打开冰箱门(方法)2.把大象装进冰箱(功能)3.关闭冰箱门(功能)

    整个过程需要三个方法:打开,装载,关闭,一个对象:大象。

    2.对象内存图解

    class Car{
          String color;
          int wheels;

      public void run(){
         System.out.print(color+":"+wheels);

      }

    }

    class TestCar{
        public static void main(String[] args){
               Car w = new Car();
               w.color = "red";
               w.wheels = 4;
               w.run();
        }
        
    }

    3.类与对象

    类指的是对某一类对象的抽象解释,例如动物、人类,而对象则是类具体化的体现,例如猫、中国人,创造对象的过程就是实例化类。

    class Human{
         String country;
         int age;
         public static void main(String[] args){
               Human chinese = new Human();
               chinese.country = "中国";
               chinese.age = 20;
         }   
    }

    4.基本类型与引用类型传参

    基本类型:

    a的值被复制一份传入方法change,方法内改变a的值,只在方法内生效,方法执行完毕,弹栈,主方法内的a不改变。

    class Test{
        public static void change(int a){
                a = 10;
         }
        public static void main(String[] args){
              int a = 5;
              change(a);
              System.out.print(a);
        }
    }

     

    引用类型:

    引用类型传参是把其物理地址传入方法,此时会有两个引用指向该物理地址,即主方法里的参数a,change方法内的形参a,此时方法内改变a[0],

    则直接会对堆内的数据进行改变,所以主方法内的a[0]也随之改变。

    class Test{
        public static void change(int[] a){
                a[0] = 10;
         }
        public static void main(String[] args){
              int[] a = {5,15,20};
              change(a);
              System.out.print(a[0]);
        }
    }

     

    5.成员变量与局部变量

    区别一:定义的位置不同

    定义在类体中、方法外的变量是成员变量

    定义在方法中或者{}语句(代码块)里面的变量是局部变量

    区别二:在内存中的位置不同

    成员变量存储在对内存的对象中

    局部变量存储在栈内存的方法中

    区别三:生命周期不同

    成员变量随着对象的出现而出现在堆中,随着对象的消失而从堆中消失

    对象被实例化,成员变量(除静态变量外,静态变量不论有没有实例化对象都会被初始化)就会被初始化!

    局部变量随着方法的运行而出现在栈中,随着方法的弹栈而消失

    区别四:初始化不同

    成员变量因为在堆内存中,有默认的初始化值,可直接使用其默认值。

    局部变量在栈内存中,没有默认的初始化值,必须手动的给其赋值才可以使用。

     栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(对象可能在常量池里)(字符串常量对象存放在常量池中。)
     堆:存放所有new出来的对象。
    静态域:存放静态成员(static定义的)
    常量池:存放字符串常量和基本类型常量(public static final)。

  • 相关阅读:
    我了解到的新知识之----如何使用Python获取最新外汇汇率信息
    软工实践个人总结
    第06组 Beta版本演示
    第06组 Beta冲刺(5/5)
    第06组 Beta冲刺(4/5)
    第06组 Beta冲刺(3/5)
    第06组 Beta冲刺(2/5)
    第06组 Beta冲刺(1/5)
    第06组 Alpha事后诸葛亮
    第06组 Alpha冲刺(6/6)
  • 原文地址:https://www.cnblogs.com/whwjava/p/8651951.html
Copyright © 2011-2022 走看看