目录
一、设计对象并使用
这一节重点是学习获取已有对并使用和学习自己设计对象并使用
1、学习获取已有对并使用学
之前学习的键盘录入技术就是对已有的对象进行使用
public class Test { public static void main(String[] args) { // 1、得到一个随机数对象,用于得到随机数 Random r = new Random(); int data = r.nextInt(10) + 1 ; // 生成 1-10之间的随机数 System.out.println(data); // 2、创建一个扫描器对象,用于接收用户输入的数据 Scanner sc = new Scanner(System.in); System.out.println("请您输入您的年龄:"); int age = sc.nextInt(); System.out.println(age); } }
这里面对Random r = new Random()的调用就是获取已有对象并使用
2、学习如何自己设计对象并使用
在java中必须先设计类,才能获得对象
类相当于设计图:是对象共同特征的描述。
对象:是真实存在的具体实例
如何定义类呢
如何得到类的对象呢
如何使用对象呢
下面用具体案例表示
这里面Car就是类
3、定义类的补充注意事项
成员变量的完整定义格式是: 修饰符 数据类型 变量名称 = 初始化值; 一般无需指定初始化值,存在默认值。(看下图)
类名首字母建议大写,且有意义,满足“驼峰模式”。
一个Java文件中可以定义多个class类,且只能一个类是public修饰,而且public修饰的类名必须成为代码文件名。
实际开发中建议还是一个文件定义一个class类。
二、面向对象内存机制
1、多个对象内存图
对于以下代码
类
public class Car { // 成员变量(属性) String name; double price; // 方法(行为) public void start(){ System.out.println(name+"启动了!"); } public void run(){ System.out.println("售价为:" + price +"的" + name+"跑的快!"); } }
对象
public class Test { public static void main(String[] args) { Car c1 = new Car(); c1.name = "奔驰GLC"; c1.price = 39.78; System.out.println(c1.name); System.out.println(c1.price); c1.start(); c1.run(); Car c2 = new Car(); c2.name = "宝马X3"; c2.price = 38.98; System.out.println(c2.name); System.out.println(c2.price); c2.start(); c2.run(); } }
如何去分析其中内存的原理呢·
如下图,先分析方法区,在对象中新建了一个Car c1,由于用了new,这里面的会放在堆中,而Car在类中,其中的String name 和price皆为地址,且均为空,其指向成员方法。
它会把这些地址给Car c1,且c1指向与堆内存
总结
1.对象放在哪个位置?
堆内存中
2. Car c = new Car(); c变量名中存储的是什么?
存储的是对象在堆内存中的地址。
3. 成员变量(name、price)的数据放在哪里,存在于哪个位置?
对象中,存在于堆内存中。
2、两个变量指向同一个对象内存图
对于以下代码
类
public class Student { String name; char sex; String hobby; // 爱好 public void study(){ System.out.println(“名称:” + name + “,性别:” + sex + “,爱好:" + hobby + "的学生:开始学习了!"); } }
对象
public class Test { public static void main(String[] args) { Student s1 = new Student(); s1.name = "小明"; s1.sex = '男'; s1.hobby = "游戏、睡觉、听课"; s1.study(); // 把学生类型的s1变量赋值给学生类型的s2变量 Student s2 = s1; s2.hobby = "爱提问"; System.out.println(s2.name); System.out.println(s2.sex); System.out.println(s1.hobby); s2.study(); } }
这里面定义了一个s2,s2存的也是s1存的地址,用了s2.hobby 会把s1.hobby的内容改掉,同样变成爱提问
3、补充(垃圾回收)
垃圾回收
注意:当堆内存中的 类对象 或 数组对象 ,没有被任何变量引用(指向)时,就会被判定为内存中的 “垃圾”。
Java存在自动垃圾回收器,会定期进行清理
就比如在上面的代码中填写到 s1= null, s2=null。就会出现 name,hobby,sex里面存储的东西皆被释放掉