//学生类 //学生类是一个模板,描述了所有学生的共同特征【状态+行为】 //当前类只描述学生的状态信息【属性】 //Student是类,属于引用数据类型,这个类型名就是:Student public class Student{ //类体 = 属性 + 方法 //属性【存储数据采用变量的形式】 //由于变量定义在类体当中,方法体之外,这种变量称为成员变量 //所有学生都有学号信息,但每个学生的学号都是不一样 //所有要访问这个学号必须先创建对象,通过对象去访问学号信息 //学号信息不能直接通过“类”去访问, //所以这种成员变量又被叫做:实例变量 //对象又称为实例,实例变量又称为对象变量【对象级别的变量】 //不创建对象,no变量的内存空间是不存在的, //只有创建了对象,这个no变量内存空间才会创建 int no; //姓名 String name; //年龄 int age; //性别 boolean sex; //住址 String addr; }
/* 对象的创建和使用 */ public class OOTest01 { public static void main(String[] args){ //int是基本数据类型 i是一个变量名 //10是一个int类型的字面值 int i = 10; //通过一个类可以实例化N个对象 //实例化对象的语法:new 类名(); //new是java语言当中的一个运算符 /* new运算符的作用是创建对象, 在JVM堆内存当中开辟新的内存空间 */ /* 方法区内存:在类加载的时候, class字节码代码片段被加载到该内存空间当中 栈内存(局部变量):方法代码片段执行的时候, 会给该方法分配内存空间,在栈内存中压栈 堆内存:new的对象在堆内存中存储 */ //Student是一个引用数据类型, //s是一个变量名 new Student()是一个学生对象 //s是一个局部变量【在栈内存中存储】 //什么是对象? // new运算符在堆内存中开辟的内存空间称为对象 //什么是引用?引用是一个变量, // 只不过这个变量中保存了另一个java对象的内存地址 //java语言当中, //程序员只能通过“引用”去访问堆内存当中对象内部的实例变量 Student s = new Student(); //访问实例变量的语法格式: // 读取数据:引用.变量名 // 修改数据:引用.变量名 = 值 int stuNo = s.no; String stuName = s.name; System.out.println("学号 = " + stuNo); //0 System.out.println("姓名 = " + stuName); //null //再通过类实例化一个全新的对象 //stu是一个引用 也是一个局部变量 Student是变量的数据类型 Student stu = new Student(); } } /* 局部变量在栈内存中储存 成员变量中的实例变量在堆内存的Java对象内部存储 实例变量是一个对象一份,100个对象有100份 */
执行到new的时候
再一个new的时候
//家庭住址类 public class Address { //属性【以下都是成员变量之实例变量】 //城市 //String是一种引用数据类型,city是一个变量名,属于实例变量 //city是一个引用 String city; //街道 String street; //邮编 String zipcode; }
//用户类 public class User { //属性【以下都是成员变量之实例变量】 //用户编号 //int是一种基本数据类型:整数型 //no是一个实例变量,是个引用 int no; //用户名 //String是一种引用数据类型:代表字符串 //name是一个实例变量,是个引用 String name; //家庭地址 //Address是一种引用数据类型:代表家庭住址 //addr是一种实例变量,是个引用 Address addr; }
//测试类 public class OOTest02 { public static void main(String[] args){ //创建user对象 //u是局部变量,是一个引用 User u = new User(); //输出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"; //"jack"是一个java对象,属于String对象 u.addr = new Address(); //在main方法当中目前只能看到一个引用“u” //一切都只能通过u进行访问 System.out.println(u.name + "住在的城市:" + u.addr.city); System.out.println(u.name + "住在的街道:" + u.addr.street); System.out.println(u.name + "邮编:" + u.addr.zipcode); u.addr.city = "北京"; u.addr.street = "朝阳"; u.addr.zipcode = "11111111"; System.out.println(u.name + "住在的城市:" + u.addr.city); System.out.println(u.name + "住在的街道:" + u.addr.street); System.out.println(u.name + "邮编:" + u.addr.zipcode); } }
一开始
最终版
public class OOTest03 { public static void main(String[] args){ //u是引用 //u是局部变量 User u = new User(); //a是引用 //a是局部变量 Address a = new Address(); u.addr = a; System.out.println(u.addr.city); //null a.city = "天津"; System.out.println(u.addr.city); //天津 } }
//丈夫类 public class Husband { //妻子姓名 String name; //丈夫对象中含有妻子的引用 Wife w; }
//妻子类 public class Wife { //丈夫姓名 String name; //妻子对象中含有丈夫的引用 Husband h; }
public class OOTest04 { public static void main(String[] args){ //创建一个丈夫对象 Husband zs = new Husband(); zs.name = "张三"; //创建一个妻子对象 Wife xo = new Wife(); xo.name = "小欧"; //结婚【能通过他们找到对方】 zs.w = xo; xo.h = zs; //得到以上“man”的妻子的名字 System.out.println(zs.name + "之妻:" + zs.w.name); } }
//顾客类 public class Customer { //id int id; }
//测试程序 public class OOTest05 { public static void main(String[] args){ Customer c = new Customer(); System.out.println(c.id); //0 //以下程序编译可以通过,因为符合语法 //运行出现空指针异常 //空引用访问“实例”相关的数据一定会出现空指针异常 //java.lang.NullPointerException c = null; System.out.println(c.id); } } //“实例”相关的数据表示: //这个数据访问的时候必须由对象的参与。 //这种数据就是实例相关的数据
//计算机类 class Computer { String brand; String style; String color; } //学生类 class Student { int no; String name; Computer notepad; } //测试类 public class 教师版OOTest06 { public static void main(String[] args){ //创建笔记本电脑对象 Computer biJiBen = new Computer(); //不采用系统默认值,手动赋值 biJiBen.brand = "华硕"; biJiBen.style = "C00"; biJiBen.color = "黑"; //创建学生对象 Student zhangsan = new Student(); //不采用系统默认值,手动赋值 zhangsan.no = 123; zhangsan.name = "张三"; zhangsan.notepad = biJiBen; //让这个学生和笔记本对象产生关系 //【通过学生找到他的笔记本电脑】 //想知道张三的笔记本的品牌 System.out.println(zhangsan.notepad.brand); //张三买了台新电脑,原来的电脑扔了【垃圾回收了】 zhangsan.notepad = new Computer(); System.out.println(zhangsan.notepad.brand); //null } }
原文:https://www.cnblogs.com/Lerresino/p/13473101.html