前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java面向对象基础知识(3)一个典型类的定义和面向对象的内存分析

Java面向对象基础知识(3)一个典型类的定义和面向对象的内存分析

作者头像
徐建国
发布2021-08-03 15:46:48
2360
发布2021-08-03 15:46:48
举报
文章被收录于专栏:个人路线
代码语言:javascript
复制
package proc01;
/**
 * 第一一个类的定义
 * @author 玖点夜谈
 *
 */
public class JDStudent {
  //属性Fild
  int id;
  String name;
  int age;
  Computer comp;//计算机

//方法
  void Study() {
    System.out.println("我在认真学习,使用电脑"+comp.brand );
  }
  void Play() {
    System.out.println("我在玩游戏");
  }
  //构造方法,用于创建这个类的对象,,无参的构造方法可以由系统自动创建
  JDStudent(){

  }
  //程序执行的入口,必须要有
  public static void main(String[] args) {
    JDStudent stu=new JDStudent();//创建一个对象
    stu.Play();

    stu.id=1001;
    stu.name="萌小肆";
    stu.age=21;
    Computer c1=new Computer();
    c1.brand="Dell";
    stu.comp=c1;
    stu.Play();
    stu.Study();//注意语句顺序
  }
static   class Computer {
    String brand;
  }
}

为了让大家对于面向对象编程有更深入的了解,我们要对程序的执行过程中,内存到底发生了什么变化进行剖析,让大家做到“心中有数”,通过更加形象方式理解程序的执行方式。

建议:

  1. 为了让初学者更深入了解程序底层执行情况,为了完整的体现内存分析流程,会有些新的名词,比如:线程、Class对象。大家暂时可以不求甚解的了解,后期学了这两个概念再回头来看这篇内存分析,肯定收获会更大。

Java虚拟机的内存可以分为三个区域:栈stack、堆heap、方法区method area。

栈的特点如下:

  1. 栈描述的是方法执行的内存模型。每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等)

  2. JVM为每个线程创建一个栈,用于存放该线程执行方法的信息(实际参数、局部变量等)

  3. 栈属于线程私有,不能实现线程间的共享!

  4. 栈的存储特性是“先进后出,后进先出”

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

堆的特点如下:

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

  2. JVM只有一个堆,被所有线程共享

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

方法区(又叫静态区)特点如下:

  1. JVM只有一个方法区,被所有线程共享!

  2. 方法区实际也是堆,只是用于存储类、常量相关的信息!

  3. 用来存放程序中永远是不变或唯一的内容。(类信息【Class对象】、静态变量、字符串常量等)

构造器:

 构造器也叫构造方法(constructor),用于对象的初始化。构造器是一个创建对象时被自动调用的特殊方法,目的是对象的初始化。构造器的名称应与类的名称一致。Java通过new关键字来调用构造器,从而返回该类的实例,是一种特殊的方法。

声明格式:

要点:

  1. 通过new关键字调用!!

  2. 构造器虽然有返回值,但是不能定义返回值类型(返回值的类型肯定是本类),不能在构造器里使用return返回某个值。

  3. 如果我们没有定义构造器,则编译器会自动定义一个无参的构造函数。如果已定义则编译器不会自动添加!

  4. 构造器的方法名必须和类名一致!

构造方法的重载

构造方法也是方法,只不过有特殊的作用而已。与普通方法一样,构造方法也可以重载。

代码语言:javascript
复制
package javastart;

public class user11 {
    int id; // id
    String name; // 账户名
    String pwd; // 密码
    public user11() {
 
    }
    public user11(int id, String name) {
        super();//构造方法的第一句总是super
        this.id = id;//this表示创建好的对象
        this.name = name;
    }
    public user11(int id, String name, String pwd) {
        this.id = id;
        this.name = name;
        this.pwd = pwd;
    }
    public static void main(String[] args) {
        user11 u1 = new user11();
        user11 u2 = new user11(101, "萌小肆");
        user11 u3 = new user11(100, "玖点夜谈", "123456");      
    }
}

作者:萌小肆

关于更多。点击java基础知识讲解(一)数据类型和运算符

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 明天也要加油呀 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档