java----内存模型
内存模型
一个对象的内存图
方法区开始运行,先找到Main函数,然后将这个方法入栈.new将会在堆空间中开辟空间,里面有成员变量和成员方法(注意,成员方法保存的是方法区的成员方法的地址值).new将会把地址返回给创建的对象,保存起来.访问成员变量只需要一步,访问成员方法需要两步.并且将成员方法入栈.方法调用完之后会弹栈.
两个对象的内存图
1.程序运行时先让main函数进栈,new开辟的内存都在堆空间中.注意开辟成员方法是地址值.
2.方法执行的时候也要进栈.
类的代码
import org.w3c.dom.ls.LSOutput;
public class Phone {
//定义成员变量
String brand;
String soc;//处理器
double price;
String color;
String charge;//充电速度
//定义成员方法
public void call(String who)//打电环
{
System.out.println("给"+who+"打电话");
}
public void sendSmS(String who)//发短信
{
System.out.println("给"+who+"发短信");
}
public void music()//播放音乐
{
System.out.println("正在播放音乐");
}
}
main里面的代码
public class text {
public static void main(String[] args) {
//1.导包
//2.创建对象 类名 对象名 = new 类名();
Phone one =new Phone();
//创建一个手机的对象
//访问成员变量
System.out.println(one.soc);//null
System.out.println(one.brand);//null
System.out.println(one.charge);//null
System.out.println(one.color);//null
System.out.println(one.price);//0.0
System.out.println("============");
//修改成员变量
one.soc="新一代骁龙8+";
one.brand="小米";
one.charge="120w极速闪充";
one.color="火焰红";
one.price=1999.0;
System.out.println(one.soc);
System.out.println(one.brand);
System.out.println(one.charge);
System.out.println(one.color);
System.out.println(one.price);
//使用成员方法
System.out.println("============");
one.call("雷军");
one.sendSmS("卢伟冰");
one.music();
System.out.println("============");
//1.导包
//2.创建对象 类名 对象名 = new 类名();
Phone two =new Phone();
//创建一个手机的对象
//访问成员变量
System.out.println(two.soc);//null
System.out.println(two.brand);//null
System.out.println(two.charge);//null
System.out.println(two.color);//null
System.out.println(two.price);//0.0
System.out.println("============");
//修改成员变量
two.soc="第二代骁龙8";
two.brand="苹果";
two.charge="20w极速闪充";
two.color="玫瑰金";
two.price=6999.0;
System.out.println(two.soc);
System.out.println(two.brand);
System.out.println(two.charge);
System.out.println(two.color);
System.out.println(two.price);
//使用成员方法
System.out.println("============");
two.call("库克");
two.sendSmS("何同学");
two.music();
System.out.println("============");
}
}
一个对象引用另一个对象的内存图
类的代码
import org.w3c.dom.ls.LSOutput;
public class Phone {
//定义成员变量
String brand;
String soc;//处理器
double price;
String color;
String charge;//充电速度
//定义成员方法
public void call(String who)//打电环
{
System.out.println("给"+who+"打电话");
}
public void sendSmS(String who)//发短信
{
System.out.println("给"+who+"发短信");
}
public void music()//播放音乐
{
System.out.println("正在播放音乐");
}
}
main函数内的代码
public class text {
public static void main(String[] args) {
//1.导包
//2.创建对象 类名 对象名 = new 类名();
Phone one =new Phone();
//创建一个手机的对象
//访问成员变量
System.out.println(one.soc);//null
System.out.println(one.brand);//null
System.out.println(one.charge);//null
System.out.println(one.color);//null
System.out.println(one.price);//0.0
System.out.println("============");
//修改成员变量
one.soc="新一代骁龙8+";
one.brand="小米";
one.charge="120w极速闪充";
one.color="火焰红";
one.price=1999.0;
System.out.println(one.soc);
System.out.println(one.brand);
System.out.println(one.charge);
System.out.println(one.color);
System.out.println(one.price);
//使用成员方法
System.out.println("============");
one.call("雷军");
one.sendSmS("卢伟冰");
one.music();
System.out.println("============");
//1.导包
//2.创建对象 类名 对象名 = new 类名();
Phone two = one;
//访问成员变量
System.out.println(two.soc);//新一代骁龙8+
System.out.println(two.brand);//小米
System.out.println(two.charge);//120w极速闪充
System.out.println(two.color);//火焰红
System.out.println(two.price);//1999.0;
System.out.println("============");
//修改成员变量
two.soc="第二代骁龙8";
two.brand="苹果";
two.charge="20w极速闪充";
two.color="玫瑰金";
two.price=6999.0;
System.out.println(two.soc);
System.out.println(two.brand);
System.out.println(two.charge);
System.out.println(two.color);
System.out.println(two.price);
//使用成员方法
System.out.println("============");
two.call("库克");
two.sendSmS("何同学");
two.music();
System.out.println("============");
}
}
使用对象作为方法的参数
内存图
Student类代码
public class Student {
/*
创建一个学生类
*/
//下面是成员变量
String name;//
int age;
int weight;
//下面是成员方法
public void eat ()
{
System.out.println("吃饭");
}
public void sleep()
{
System.out.println("睡觉");
}
public void study()
{
System.out.println("学习");
}
}
main函数代码
public class text {
public static void main(String[] args) {
//1.导包
//2.创建对象 类名 对象名 = new 类名();
Phone one =new Phone();
//创建一个手机的对象
one.soc="骁龙730";
one.price=2099.0;
one.color="火焰红";
one.charge="18w";
one.brand="红米";
getPhone(one);
}
public static void getPhone(Phone two)
{
System.out.println(two.brand);
System.out.println(two.price);
System.out.println(two.soc);
System.out.println(two.color);
System.out.println(two.charge);
}
}
使用对象作为方法的返回值
内存图
Student类代码
public class Student {
/*
创建一个学生类
*/
//下面是成员变量
String name;//
int age;
int weight;
//下面是成员方法
public void eat ()
{
System.out.println("吃饭");
}
public void sleep()
{
System.out.println("睡觉");
}
public void study()
{
System.out.println("学习");
}
}
main函数代码
public class text {
public static void main(String[] args) {
//1.导包
//2.创建对象 类名 对象名 = new 类名();
Phone two=getPhone();
System.out.println(two.brand);
System.out.println(two.price);
System.out.println(two.soc);
System.out.println(two.color);
System.out.println(two.charge);
}
public static Phone getPhone()
{
Phone one =new Phone();
//创建一个手机的对象
one.soc="骁龙730";
one.price=2099.0;
one.color="火焰红";
one.charge="18w";
one.brand="红米";
return one;
}
}