Day9 一. 面向对象思想 二. 内存区域分析 三. 成员变量与局部变量

一. 面向对象思想

面向过程与面向对象都是解决问题的一种思路

面向过程:根据业务逻辑,从上到下写代码;强调的是步骤、过程、每一步都是自己亲自去实现的。

面向对象:创建对象,使用对象,指挥对象做事情。

面向对象的编程思想:

将复杂的事情简单化,将我们从执行者转变成指挥者

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

1.1 相关概念

对象:程序世界中万事万物皆对象,是一组相关的属性和行为的集合。对象是实体

类:一组相同对象的集合。类是抽象的

属性 就是该事物的描述信息

行为 就是该事物能够做什么

1.2 学生类的定义

属性:姓名、年龄、性别

行为:学习、睡觉

1.3 手机类的定义

属性:品牌、价格

行为:打电话、玩游戏

二. 内存区域分析

jvm在运行java应用程序过程中,会把它所管理的内存划分为若干不同的数据区域。

为什么要有堆和栈?这样设计有什么好处?

  1. Java自动管理堆和栈,程序员不能直接地设置栈和堆。

  2. Java的堆是一个运行时数据区。堆是由JVM的垃圾回收器自动管理的。堆的优势是可以在程序运行时,动态地分配内存大小,但是正是由于这个原因,它的存取速度较慢。

  3. 栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小和生存期是必须确定的,缺乏灵活性。

  4. 栈有一个很重要的特性,就是存在栈中的数据可以共享。

栈:每一个方法被执行的时候,都会在栈区创建一块空间

栈的特点:先进后出

方法被调用直至执行完毕的过程,对应入栈到出栈的过程

栈是由系统自动分配,速度快,栈式一个连续的内存空间

堆:堆用于存储创建好的对象和数组(数组也是对象)

堆是一个不连续的内存空间,分配灵活,速度慢

方法区:

方法区属于堆。用来存储类、常量等相关信息

也叫静态区。用来存放程序中永远不变或唯一的内容(类信息、静态变量、字符串、常量等)

 

 

 

Day9 一. 面向对象思想 二. 内存区域分析 三. 成员变量与局部变量

A:在类中的位置不同

成员变量:在类中方法外

局部变量:在方法定义中或者方法声明上

B:初始化值不同

成员变量:有默认初始化值

局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。

C:在内存中的位置不同

成员变量:在堆内存(成员变量属于对象,对象进堆内存)

局部变量:在栈内存(局部变量属于方法,方法进栈内存)

D:生命周期不同

成员变量:随着对象的创建而存在,随着对象的消失而消失

局部变量:随着方法的调用而存在,随着方法的调用完毕而消失

注意事项:

局部变量名称可以和成员变量名称一样,在方法中使用的时候,取值采用的是就近原则。

基本数据类型变量包括哪些:byte,short,int,long默认值是0

float,double默认值是:0.0

boolean:false

char:’\u0000’

引用数据类型变量包括哪些:数组,类,接口,、String ,引用数据类型作为成员变量时:初始化的默认值是:null


方法的形式参数是类名的时候如何调用(掌握)

A:方法的参数是类名public void print(Student s){}//print(new Student());

如果你看到了一个方法的形式参数是一个类的类型(引用类型),这里其实需要的是该类的对象。

匿名对象的概述和应用(掌握)

匿名对象的定义:没有名字的对象

匿名对象应用场景

需要通过该对象去调用方法,仅仅只调用一次的时候。

匿名对象调用的好处

节省代码

注意:调用多次的时候,不适合。匿名对象调用完毕就是垃圾。可以被垃圾回收器回收。

匿名对象可以作为实际参数传递

public class Demo1 {

    public static void main(String[] args) {

        int a =0;
        System.out.println(a);
        method();
    }

   static  void method(){
        int a = 0;
    }
    
}
public class Demo2 {


    public static void main(String[] args) {
        Student s1 = new Student();
        System.out.println("这个学生的姓名是:"+s1.name);//null 引用数据类型的默认值  空的null
        System.out.println("这个学生的姓名是:"+s1.age);//null 引用数据类型的默认值  空的null
    }
}
public class Demo3 {

    int x ; //成员变量  默认值0

    public static void main(String[] args) {
        int x = 10;  //局部变量
        //局部变量名称可以和成员变量名称一样,在方法中使用的时候,取值采用的是
        // 就近原则
       // System.out.println(x);

        Demo3 d1 = new Demo3();
        d1.x = 888;

        Demo3 d2 = new Demo3();
        d2.x = 999;
        System.out.println(d1.x);

    }
}
public class Student { //作用:  从两方面描述学生类   Student类
    //不能单独运行 依赖一个主类(测试类)
    /*
    属性:  ---->变量 体现
        微信名、姓名、年龄、性别
    行为:  ----->方法 体现(能够完成某个功能的代码块)
        说话、学习、打游戏
    */
    String wechatName;//微信名
    String name; //姓名
    int age;//年龄
    char sex;//性别

    //方法  不加任何任何修饰符
    void speak(){
        System.out.println("讲得好");
        System.out.println("花");
    }

    void show(){//展示自己的信息
        System.out.println("我叫"+name+",今年:"+age+",性别是:"+sex);
    }

    void study(){
        System.out.println("看视频");
        System.out.println("敲代码");
        System.out.println("写作业");
    }

    void playGame(){
        System.out.println("找人");
        System.out.println("去网吧");
        System.out.println("开黑");
    }
}
public class TestStudent {//TestStudent类 :  程序的基本单元,一个应用程序是由多个类组成的

    //TestStudent里面有main()方法   这个TestStudent类 可以称之为 主类(测试类)  才能运行
    //入口
    public static void main(String[] args) {
        //测试 Student类
        Student s1 = new Student();
        //给属性赋值   对象名.属性名 = 值;
        s1.wechatName = "Shmily";
        s1.name = "李杨";
        s1.age = 16;
        s1.sex = '男';

        //通过对象去调用方法   指挥对象做事
        s1.playGame();
        s1.speak();
        s1.study();
        s1.show();

        //再来一个对象
        Student s2 = new Student();
        s2.wechatName = "温温温";
        s2.name = "温译为";
        s2.age = 18;
        s2.sex = '男';
        s2.show();
        System.out.println("----------------------------");

        Student s3 = s1;//赋值  引用地址
        s3.sex = '女';
        s1.show();
        s3.show();

    }
}

上一篇:十七、centeros7安装docker


下一篇:关于javascript中的内置函数