Java基础_0302:类和对象

时间:2024-06-08 17:06:56

定义类

class Book { 				// 定义一个新的类
String title; // 书的名字
double price; // 书的价格
/**
* 输出对象完整信息
*/
public void getInfo() { // 此方法将由对象调用
System.out.println("图书名称:" + title + ",价格:" + price);
}
}
对象定义格式
格式一:声明并实例化对象
类名称 对象名称 = new 类名称 () ;
格式二:分步完成
声明对象:类名称 对象名称 = null ;
实例化对象:对象名称 = new 类名称 () ;
操作类结构:
对象.属性:表示要操作类中的属性内容;
对象.方法():表示要调用类中的方法。
使用类 —— 在主类中使用Book类
class Book { 					// 定义一个新的类
String title; // 书的名字
double price; // 书的价格
public void getInfo() { // 此方法将由对象调用
System.out.println("图书名称:" + title + ",价格:" + price);
}
}
public class TestDemo {
public static void main(String args[]) {
Book bk = new Book() ; // 声明并实例化对象
bk.title = "Java开发" ; // 操作属性内容
bk.price = 89.9 ; // 操作属性内容
bk.getInfo() ; // 调用类中的getInfo()方法
}
} 程序执行结果:
图书名称:Java开发,价格:89.9
对象内存分配

类本身属于引用数据类型,对于引用数据类型的执行分析就必须结合内存操作来看,首先给出读者两块内存空间的概念

  • 堆内存(heap):保存每一个对象的属性内容,堆内存需要用关键字new才可以开辟,如果一个对象没有对应的堆内存指向,那么将无法使用;
  • 栈内存(stack):保存的是一块堆内存的地址数值,可以把它想象成一个int型变量(每一个int型变量只能存放一个数值),所以每一块栈内存只能够保留一块堆内存地址;

Java基础_0302:类和对象

内存分析图

Java基础_0302:类和对象

声明两个对象
public class TestDemo {
public static void main(String args[]) {
Book bookA = new Book() ; // 声明并实例化第一个对象
Book bookB = new Book() ; // 声明并实例化第二个对象
bookA.title = "Java开发" ; // 设置第一个对象的属性内容
bookA.price = 89.8 ; // 设置第一个对象的属性内容
bookB.title = "JSP开发" ; // 设置第二个对象的属性内容
bookB.price = 69.8 ; // 设置第二个对象的属性内容
bookA.getInfo() ; // 调用类中的方法输出信息
bookB.getInfo() ; // 调用类中的方法输出信息
}
}
程序执行结果:
图书名称:Java开发,价格:89.8
图书名称:JSP开发,价格:69.8
分步的方式实例化对象
public class TestDemo {
public static void main(String args[]) {
Book bk = null; // 声明对象
bk = new Book(); // 实例化对象(开辟了堆内存)
bk.title = "Java开发"; // 操作属性内容
bk.price = 89.9; // 操作属性内容
bk.getInfo(); // 调用类中的getInfo()方法
}
}
程序执行结果:
图书名称:Java开发,价格:89.9
分步实例化对象

Java基础_0302:类和对象

对象引用传递
public class TestDemo {
public static void main(String args[]) {
Book bookA = new Book() ; // 声明并实例化第一个对象
Book bookB = null ; // 声明第二个对象
bookA.title = "Java开发" ; // 设置第一个对象的属性内容
bookA.price = 89.8 ; // 设置第一个对象的属性内容
bookB = bookA ; // 引用传递
bookB.price = 69.8 ; // 利用第二个对象设置属性内容
bookA.getInfo() ; // 调用类中的方法输出信息
}
}
程序执行结果:
图书名称:Java开发,价格:69.8
深入观察引用传递
public class TestDemo {
public static void main(String args[]) {
Book bookA = new Book() ; // 声明并实例化第一个对象
Book bookB = new Book() ; // 声明并实例化第二个对象
bookA.title = "Java开发" ; // 设置第一个对象的属性内容
bookA.price = 89.8 ; // 设置第一个对象的属性内容
bookB.title = "JSP开发" ; // 设置第二个对象的属性内容
bookB.price = 69.8 ; // 设置第二个对象的属性内容
bookB = bookA ; // 引用传递
bookB.price = 100.1 ; // 利用第二个对象设置属性内容
bookA.getInfo() ; // 调用类中的方法输出信息
}
}
程序执行结果: 图书名称:Java开发,价格:100.1
引用传递与垃圾产生