• Java基础_0302:类和对象


    定义类

    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型变量只能存放一个数值),所以每一块栈内存只能够保留一块堆内存地址;

    内存分析图

    声明两个对象
    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
    
    
    分步实例化对象

    对象引用传递
    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
    
    引用传递与垃圾产生
  • 相关阅读:
    如何用VSCode手动编译Ace Editor
    libuv源码分析
    二叉平衡查找树---红黑树
    tcp滑动窗口与拥塞控制
    ceph架构剖析
    腾讯面试总结
    协程的实现原理
    dhcp协议交互报文
    libuv源码分析前言
    Protobuf使用规范分享
  • 原文地址:https://www.cnblogs.com/xuwei1/p/8339815.html
Copyright © 2020-2023  润新知