类与对象的相关知识

目录

一、什么是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=其他值

相关推荐
belldeep4 分钟前
python:mido 提取 midi文件中某一音轨的音乐数据
python·track·mido
铭阳(●´∇`●)1 小时前
Python内置函数---breakpoint()
笔记·python·学习
zhanghongyi_cpp1 小时前
python基础语法测试
python
MurphyStar1 小时前
UV: Python包和项目管理器(从入门到不放弃教程)
开发语言·python·uv
linux kernel1 小时前
Python基础语法3
python
阿让啊1 小时前
单片机获取真实时间的实现方法
c语言·开发语言·arm开发·stm32·单片机·嵌入式硬件
种时光的人1 小时前
多线程出bug不知道如何调试?java线程几种常见状态
java·python·bug
Freak嵌入式2 小时前
一文速通Python并行计算:09 Python多进程编程-进程之间的数据同步-基于互斥锁、递归锁、信号量、条件变量、事件和屏障
开发语言·python·多线程·并发·并行
T糖锅G2 小时前
小白自学python第一天
开发语言·python
学Java的小半2 小时前
用键盘实现控制小球上下移动——java的事件控制
java·开发语言·算法·intellij-idea·gui·事件监听