大一学生自学Java之面向对象基础(一)

前面的文章作者写过有关编程语言分为面向过程和面向对象两种,而Java是和python一样面向对象的编程语言,作为编程语言的核心知识,作者将分为几个部分对该部分进行讲解。

首先我们创建一个student的模板,并在模板中设置几个属性如姓名,语文成绩,数学成绩,和一些方法用于计算总分和平均成绩即对属性进行一些处理,代码如下

package wxb.object;

public class student {
    String name;
    double chinese;
    double math;

    public  void printscore(){
        System.out.println(name + "的总成绩是:" + (chinese + math));
    }
    public  void printavergescore(){
        System.out.println(name + "的平均成绩是:" + (chinese + math)/2.0);
    }
}

那么一个学生对象的模板我们就设计好了,此时还未对其进行封装数据,接下来我们将运用它得到一个一个的所谓的学生对象来封装一个一个的学生数据

我们创建另外一个test,来说明student这个类如何使用,首先我们创建一个学生对象,封装wxb的数据,new一个student()调用前面写的模板,并将其赋值给一个变量,且这个变量为student类,接下来我们使用变量.加模板中的属性或方法进行调用。对象说通过类new出来的,有了类即可创建对象(类名 对象名 = new 类名();)

package wxb.object;

public class Tes {
    public static void main(String[] args) {
        //面向对象编程快速入门
        //创建一个学生对象,封装数据

        student s1= new student();
        s1.name = "wxb";
        s1.chinese=100;
        s1.math=100;
        s1.printscore();
        s1.printavergescore();
        //创建一个学生对象,封装数据
        student s2 = new student();
        s2.name="wmn";
        s2.chinese=59;
        s2.math=100;
        s2.printscore();
        s2.printavergescore();
    }
}

运行该程序即可获得对应对象的数据。

那么对象在计算机中的原理是怎么样的呢?

在计算机中有三块位置分别为栈,堆,和方法区

栈:栈是一个线程私有的运行时数据区,用于储存临时变量,方法参数,方法返回值以及方法调用时的临时数据

堆:堆是由一个或多个线程共享的运行时数据区。它用于储存对象实例的地方,几乎所有的对象实例和数组都会被分配到堆上。堆的储存空间是动态分配的

方法区:方法区也是一个各个线程共享的运行时数据区,用于存储类信息,常量池,静态变量,即时编译器编译后的代码等数据

了解完三个分区的作用后,下面为对象在计算机中的执行原理,首先将test类加载到方法区中,然后执行test类中的main方法,main方法是提到栈里面执行,执行main方法的第一行代码即创建学生对象,方法区首先会碰这个学生类,因此会把这个学生类也加载到方法区里面来,接着栈会用这个学生类定义一个s1变量,然后在方法区的main方法中开辟一块变量空间代表s1这个变量,接着执行等号右边的代码来new一个学生对象,并在堆内存中开辟一块内存空间代表这个学生对象,可以把这块内存空间理解为一张学生表,有了这个学生对象,那么这个学生对象就会有自己的一个地址,接着这个学生对象还会按照学生类的要求,在这里面开辟变量空间,这些变量一开始装的数据都是一些默认值,接着这个对象里面还有一个类的地址信息,这个地址是指向当前这个学生对象,是由那一个类创建出来的,由于这个学生对象是由下面这个学生类创建出来的,因此这个地址会指向下面的这个学生类,这样一个对象就算做好了,接着堆会把这个学生对象的地址交给s1变量,那么s1变量会更加堆记住的地址去指向这个学生对象,这就是创建学生对象的这行代码,在计算机中运行的原理,接着程序向下走,下面的程序通过s1里面的变量里面的地址,去找到堆内存中的学生对象,然后把学生对象里面的变量记住的数据全部变成wxb的数据,接着会通过s1变量里面的地址去找到堆内存中的学生对象,再通过类的地址去找到方法区的这个学生类,然后通过方法名定位到要调用的是两个方法,因为这两个方法是通过学生对象找到的,那么它处理的也是当前这个学生对象的数据,也就是wxb的数据,因此执行结果是wxb总分为200,平均分为100,当我们再次创建一个学生对象会重复上面的操作。

  • 17
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值