JAVA学习之对象的创建和使用

一、回顾

public class Student{
		//类体=属性+方法
		//属性【存储数据采用变量的形式】
		//由于变量定义在类体中,方法体之外,这种变量称为成员变量
		//每个学生都有学号,但每个学生的学号不同
		//所以要访问这个学号必须先创建对象,通过对象去访问学号信息
		//学号信息不能直接通过类去访问,所以这种成员变量又被叫做实例变量
		//对象又被称为实例,实例变量又被称为对象变量【对象级别变量】
		//不创建对象,no变量的内存空间不存在
		int no;
		String name;
		int age;
		boolean sex;
		
}

二、对象的创建和使用

public class OOTest01 {
    public static void main(String[] args){
/*        通过一个类可以实例化N个对象
        实例化对象的语法:new 类名();
        new是java语言中的一个运算符
        new运算符的作用时创建对象,在JVM堆内存中开辟新的内存空间
        方法区内存:在类加载的时候,class字节码代码片段被加载到该内存空间中
        栈内存(局部变量):方法代码片段执行的时候,会给该方法分配内存空间在栈内存中压栈
        堆内存:new的对象在堆内存中存储
        */
        Student s = new Student();
        //Student是一个引用数据类型,s是一个变量名,new Student()是一个学生对象
        //把堆内存对象的地址赋值给s
        //什么是对象:new运算符在堆内存中开辟的内存空间称为对象
        //什么是引用:引用是一个变量值,这个变量中保存的是对象的内存地址
        //java中,程序员不能直接操作堆内存,java中没有指针,只能通过引用去访问堆内存当中对象内部的实例变量
        int stuno = s.no;
        String stuname = s.name;
        int stuage = s.age;
        boolean stusex = s.sex;
        System.out.println("学号:"+ s.no);
        System.out.println("姓名:"+ s.name);
        System.out.println("年龄:"+ s.age);
        System.out.println("性别:"+ s.sex);

        s.no = 2020;
        s.name = "jack";
        s.age = 20;
        s.sex = true;

        System.out.println("学号:"+ s.no);
        System.out.println("姓名:"+ s.name);
        System.out.println("年龄:"+ s.age);
        System.out.println("性别:"+ s.sex);

    }
}

套娃使用

public class Address {
    //城市
    String city;
    String street;
    String zipcode;
}

public class User {
    //用户名、编号、住址
    String name;
    int no;
    Address addr;//Address是引用数据类型,代表家庭住址
}

public class OOTest02 {
    public static void main(String[] args) {
        User u = new User();
        System.out.println(u.no);
        System.out.println(u.name);
        System.out.println(u.addr);

        u.no = 110;
        u.name = "tom";
        u.addr = new Address();
        u.addr.city = "BeiJing";
        u.addr.street = "王府井";
        u.addr.zipcode = "010";

        System.out.println(u.no);
        System.out.println(u.name);
        System.out.println(u.addr);
        System.out.println(u.name + "居住在哪个城市:"+u.addr.city);
        System.out.println(u.name + "居住在哪个街道:"+u.addr.street);
        System.out.println(u.name + "的邮编:"+u.addr.zipcode);



    }
}

三、JVM内存分析

在这里插入图片描述
1.JVM(JAVA虚拟机)主要包括三块内存空间,分别是:栈内存、堆内存、方法区内存

2.堆内存和方法区内存各有一个、一个线程一个栈内存

3.方法调用的时候,该方法所需要的内存空间在栈内存中分配,称为压栈,方法执行结束后。该方法所属的空间释放,称为弹栈。

4.栈中主要存储的方法体当中的局部变量
5.方法的代码片段以及整个类的代码片段都被存储到方法区内存中,在类加载的时候代码段会载入
6.在程序执行过程中使用new运算符创建的java对象,存储在堆内存中,对象内部有实例变量,所以实例变量存储在堆内存中
7.变量分类:

  • 局部变量【方法体中声明】
  • 成员变量【方法体外声明】
    *实例变量【前面修饰符没有static】
    *静态变量【前面修饰符有static】
    8.静态变量存储在方法区中
    9.三块内存中变化最频繁的是栈内存,最先有数据的是方法区内存,垃圾回收器主要针对的是堆内存。
    10.自动垃圾回收机制,什么时候考虑将某个java对象的内存回收?
  • 当堆内存当中的java对象成为垃圾数据的时候,会被垃圾回收
  • 什么时候堆内存中的java对象会变成垃圾呢?
    :没有更多的引用指向他的时候,这个对象无法被访问,因为访问对象智能通过引用的方式访问

四、关联关系

A has a B【A对象中含有B对象的引用】
Student对象中含有no对象的引用:Student no

五、复习

public class Laptop {
    String brand;
    String no;
    String color;
    double price;
    String owner;
}

public class Student {
    int idno;
    String name;
    Laptop notepad;
}

public class OOTest {
    public static void main(String[] args) {
        //新建一个学生对象
        Student lisi = new Student();
        //新建一个电脑对象
        Laptop computer = new Laptop();

        //让电脑和学生联系起来
        lisi.notepad = computer;

        //具体赋值
        computer.brand = "Dell";
        computer.color = "Black";
        computer.no = "XPS9550";
        computer.price = 9999.0;
        System.out.println("李四的笔记本的品牌是"+ lisi.notepad.brand);
        lisi.notepad.brand = "苹果";
        System.out.println("李四的笔记本的品牌是"+ lisi.notepad.brand);
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值