java:对象的建立和使用,内存分析

对象的建立和使用

首先定义一个学生类
是一个模板,描述了所有学生的共同特征(状态+行为)
当前只描述属性

public class Student // student是类,属于引用数据类型
{
 
	//变量定义在类体中,方法体之外,这种变量叫做成员变量
	//每个学生都有学号信息,每个学生的学号不同
	//要访问这个学号必须先创建独享,通过对象去访问学号信息

	//所以学号信息不能通过类去访问,所以这种成员变量叫做实例变量
	//对象又被叫做实例,实例变量又被称为对象变量(对象级别的变量)
	//不创建对象,这个no变量的内存空间是不存在的。

	int no;
    //姓名
	String name;
	//性别
	boolean sex;
	//地址
	String addr;
   // 如果不赋值就都是默认值,引用数据类型的默认值是null
}

对于学生类的具体建立和使用


/*
对象的建立和使用
*/

public class OOTest
{
	public static void main(String[]args){

		
	//int 是基本数据类型
	//i是一个变量名
	//10是一个int类型的字面值


	int i =10;
	
	//通过一个类可以实例化N个对象
	//实例化对象语法:new 类名();
	//new运算符的作用是创建对象,在JVM堆内存中开辟新的内存空间
	//方法区内存:在类加载的时候,class字节码代码片段被加载到该内存空间中
	//栈内存(存储局部变量):方法代码片段执行的时候,会给该方法分配内存空间,在栈内存中压栈
	//堆内存:new的对象在堆内存在堆存储



	Student s = new Student();
	//student是一个引用数据类型
	//s是变量名,是一个局部变量(在栈内存储)
	//s在栈中存储,存储的是student对象实例在堆中的内存地址
	//s叫做引用,new在堆内存中开辟的内存空间叫做对象
	//引用是一个变量,只不过变量中保存了另一个java对象的内存地址。经过引用的方式才能访问堆内存中的对象(没有指针)
	//new student()是一个学生对象


	//访问实例变量的方法:
	//读取数据:引用.变量名
	//修改数据:引用.变量名=值
	int stuNo = s.no ;
	String stuName=s.name;
	boolean stuSex =s.sex;
	String stuAddr=s.addr;

	System.out.println("学号"+ stuNo);   //或者直接是s.no
	System.out.println("姓名"+ stuName);
	System.out.println("性别"+ stuSex);
	System.out.println("住址"+ stuAddr);

	s.no=10;
	s.name="jack";
	s.sex=true;
	s.addr="Beijing";


	System.out.println("学号"+ s.no);   
	System.out.println("姓名"+ s.name);
	System.out.println("性别"+ s.sex);
	System.out.println("住址"+ s.addr);

	//还可以再通过实例化创建一个新的对象
	Student.stu=new Student();
	
	
	}
}
/* 局部变量在栈内存中存储
成员变量的实例变量在堆内存的java对象内部存储
实例对象是一个对象一份

*/

变量定义在类体中,方法体之外,这种变量叫做成员变量·

每个学生都有学号信息,每个学生的学号不同
要访问这个学号必须先创建对象,通过对象去访问学号信息
所以学号信息不能通过类去访问,所以这种成员变量叫做实例变量
对象又被叫做实例,实例变量又被称为对象变量(对象级别的变量)
不创建对象,这个no变量的内存空间是不存在的。

通过一个类可以实例化N个对象

实例化对象语法:

new 类名();

new运算符的作用是创建对象,在JVM堆内存中开辟新的内存空间

  1. 方法区内存:在类加载的时候,class字节码代码片段被加载到该内存空间中
  2. 栈内存(存储局部变量):方法代码片段执行的时候,会给该方法分配内存空间,在栈内存中压栈
  3. 堆内存:new的对象在堆内存在堆存储

student是一个引用数据类型
s是变量名,是一个局部变量(在栈内存储)s在中存储,存储的是student对象实例在堆中的内存地址
s叫做引用,new在内存中开辟的内存空间叫做对象
引用是一个变量,只不过变量中保存了另一个java对象的内存地址。经过引用的方式才能访问堆内存中的对象(没有指针)
new student()是一个学生对象

访问实例变量的方法:

读取数据:引用.变量名
修改数据:引用.变量名=值

局部变量在内存中存储
成员变量的实例变量在堆内存的java对象内部存储
实例对象是一个对象一份
student的内存空间

新的例子

定义user类


public class User
{

	//用户名
	String name;

	//用户编号
	int no;   //no是一个实例变量

	//家庭住址
	Address addr;  //引用数据类型,addr是一个实例变量

}

定义address类


//家庭住址类
public class Address
{
	/*
	城市
	街道
	邮编
	*/
	String city;  //city是一个变量名,属于实例变量,也是一个引用
	String street;
	String code;
}

测试程序:


public class OOTest02
{
	public static void main(String[]args){
		
			User u=new User();

			System.out.println(u.no);  //0
			System.out.println(u.name); // null
			System.out.println(u.addr);  //null

			//修改user实例对象的值
			u.no=110;
			u.name="jack";  //不用new也会在堆中创建String对象,会把内存地址传到name里
			u.addr = new Address(); 

			//在main方法中目前只能看到一个引用u
			
			//一切都要通过u来访问
			System.out.println(u.name + "居住在哪个城市" + u.addr.city);

			System.out.println("=============");

			u.addr.city="大连";
			u.addr.street="南沙街";
			u.addr.code="879457";

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

	}

}

OOTest02内存空间

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值