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

    技术2022-07-10  131

    一、回顾

    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); } }
    Processed: 0.014, SQL: 9