对象的建立和使用
首先定义一个学生类
是一个模板,描述了所有学生的共同特征(状态+行为)
当前只描述属性
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堆内存中开辟新的内存空间
- 方法区内存:在类加载的时候,class字节码代码片段被加载到该内存空间中
- 栈内存(存储局部变量):方法代码片段执行的时候,会给该方法分配内存空间,在栈内存中压栈
- 堆内存:new的对象在堆内存在堆存储
student是一个引用数据类型
s是变量名,是一个局部变量
(在栈内存储)s在栈
中存储,存储的是student对象实例在堆中的内存地址
s叫做引用
,new在堆
内存中开辟的内存空间
叫做对象
引用是一个变量,只不过变量中保存了另一个java对象的内存地址。经过引用的方式才能访问堆内存中的对象(没有指针)
new student()是一个学生对象
访问实例变量的方法:
读取数据:引用.变量名
修改数据:引用.变量名=值
局部变量在栈
内存中存储
成员变量的实例变量在堆内存的java对象内部存储
实例对象是一个对象一份
新的例子
定义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);
}
}