类与对象的相关知识

目录

一、什么是java类

二、什么是java对象

1.创建对象

堆栈内存图

流程

2.类与对象的关系

Student类

Test类

输出:​编辑

修改Test类

输出

原因

三、为什么java会设计对象

1.面向过程的语言--通过方法操作类里面的对象

2.面向对象的语言--方法操作对象中的数据

3.(操作)改变数据的两种方案

(1)在Test类中直接改

(2)修改Student类中的方法,然后Test类调用该方法

4.为什么方法只改变对象中的值,不能改变类当中的数据

Student类

Test类

输出:

执行流程

四、Java对象应该怎么用

1.Student类

2.Test类

3.流程

五、程序的执行流程

1.Student类

2.Test类

3.输出

4.流程


一、什么是java类

我们每次新建的就叫类,用class修饰的(xx.java)(源文件)

执行流程:

二、什么是java对象

java对象是堆里面的一块内存区域

1.创建对象

java 复制代码
public class Test{
    public static void main(String[] args){
        Student s=new Student();//创建Student类的对象,对象名称叫做s
    }
}

(1)第一个Student指的是数据类型,它规定数据在内存中的存储形式

(2)s是变量名/对象名,只是一个名字

(3)=:赋值操作,将堆内存中创建的内存空间的地址赋给s变量

(4)new是关键字,要求在堆内存中开辟内存空间

(5)Student()是构造器,在创建对象的时候给对象赋值

堆栈内存图

流程

(1)main入栈

(2)变量s

(3)new关键字在堆内存中开辟内存空间(这块内存空间的值的形式由当前构造器决定)

2.类与对象的关系

类与对象的关系:类是构建对象的模板

Student类

java 复制代码
public class Student {
    public int age=18;
    public String name="张三";
    public char sex='男';
    public double height=170.5;
    public void run(){
        System.out.println("学生跑得很快");
    }
    public void flay(int num){
        System.out.println("学生能飞"+num+"米");
    }
}

Test类

java 复制代码
public class Test {
    public static void main(String[] args) {
        Student s1=new Student();
        Student s2=new Student();
        String name1=s1.name;
        System.out.println(name1);
        String name2=s2.name;
        System.out.println(name2);
    }
}

输出:

现在只是写了name,换成其他变量,如age、sex等,他们两个的输出也都相同,可以得出:s1和s2这两个对象关于变量的值都是相同的,且这些值都来自Student这个类所决定,为什么?

因为类是构建对象的模板,一个类可以创建多个对象,每个对象的数据的最初来源来自类

修改Test类

java 复制代码
public class Test {
    public static void main(String[] args) {
        Student s1=new Student();
        Student s2=new Student();
        s1.name="李四";
        String name1=s1.name;
        System.out.println(name1);
        String name2=s2.name;
        System.out.println(name2);
    }
}
输出
原因

要想知道为什么就必须清楚类与对象的关系到底是什么,看执行流程:

类是模板,对象是真正意义上的实体

三、为什么java会设计对象

|------|---------|
| C语言 | 面向过程的语言 |
| java | 面向对象的语言 |

什么是面向过程,什么是面向对象

1.面向过程的语言--通过方法操作类里面的对象

2.面向对象的语言--方法操作对象中的数据

就是说:方法操作对象里面的数据并不能直接改变类当中的数据(不能改变类当中的数据,只能改变对象当中的数据)

3.(操作)改变数据的两种方案

Student类和Test类还是上面的两个类

(1)在Test类中直接改

java 复制代码
s1.height=199;

但是这种方法仅限于height是public的情况下,用的多的还是下面这种方法

(2)修改Student类中的方法,然后Test类调用该方法

先把Student类中的flay()方法改一下:

java 复制代码
public void flay(Double num){
    height=num;
}

然后在Test类中调用这个方法

java 复制代码
s1.flay(199.0);

4.为什么方法只改变对象中的值,不能改变类当中的数据

Student类

java 复制代码
public class Student {
    public double height=170.5;

    public double getHeight() {
        return height;
    }

    public void setHeight(double height) {
        this.height = height;
    }
}

Test类

java 复制代码
public class Test {
    public static void main(String[] args) {
        Student s1=new Student();
        s1.setHeight(188.0);
        System.out.println(s1.getHeight());
        
        Student s2=new Student();
        System.out.println(s2.getHeight());
    }
}

输出:

执行流程

可以看出操作来操作去,操作的都是s1这个对象中的数据

四、Java对象应该怎么用

程序执行第一步就是main方法入栈

1.Student类

java 复制代码
public class Student {
    public double height=170.5;

    public double getHeight() {
        return height;
    }

    public void setHeight(double height) {
        this.height = height;
    }
}

2.Test类

java 复制代码
public class Test {
    public static void main(String[] args) {
        Student s1=new Student();
        s1.setHeight(188.0);
        System.out.println(s1.getHeight());

        Student s2=new Student();
        System.out.println(s2.getHeight());
    }
}

3.流程

执行s1.setHeight(188.0)时,调用setHeight()方法就是setHeight()方法入栈,这里面有个变量height(局部变量),传的值是188.0

执行setHeigth()方法里的this.height=height

执行完setHeight()方法出栈,然后调用getHeight()方法并输出

五、程序的执行流程

1.Student类

java 复制代码
public class Student {
    public int flag;
    public void run(){
        if(flag==1){
            System.out.println("flag=1");
        }else{
            System.out.println("flag=其他值");
        }
    }
}

2.Test类

java 复制代码
public class Test {
    public static void main(String[] args) {
        Student s1=new Student();
        Student s2=new Student();
        s1.flag=1;
        s2.flag=2;
        s1.run();
        s2.run();
    }
}

3.输出

4.流程

程序执行第一步是main方法入栈,程序的执行流程就是方法的不断入栈出栈

main方法入栈,创建了s1和s2两个对象

然后执行s1.flag=1;

然后执行s2.flag=2;

然后执行s1.run();//方法操作的是对象当中的数据;输出flag=1,之后run()方法出栈

之后执行s2.run();调用0x2中的run()方法,输出flag=其他值

相关推荐
kiramario15 分钟前
【结束】JS如何不通过input的onInputFileChange使用本地mp4文件并播放,nextjs下放入public文件的视频用video标签无法打开
开发语言·javascript·音视频
豌豆花下猫36 分钟前
Python 潮流周刊#90:uv 一周岁了,优缺点分析(摘要)
后端·python·ai
土豆儿@1 小时前
java之泛型
java·开发语言
橘猫云计算机设计1 小时前
基于SSM的《计算机网络》题库管理系统(源码+lw+部署文档+讲解),源码可白嫖!
java·数据库·spring boot·后端·python·计算机网络·毕设
小伍_Five1 小时前
从0开始:OpenCV入门教程【图像处理基础】
图像处理·python·opencv
m0_748245341 小时前
python——Django 框架
开发语言·python·django
曼巴UE51 小时前
UE5.3 C++ TArray系列(一)
开发语言·c++·ue5
熬夜苦读学习1 小时前
Linux文件系统
linux·运维·服务器·开发语言·后端
菜鸟一枚在这2 小时前
深度解析建造者模式:复杂对象构建的优雅之道
java·开发语言·算法
java1234_小锋2 小时前
一周学会Flask3 Python Web开发-客户端状态信息Cookie以及加密
前端·python·flask·flask3