Java面向对象基础--引用传递分析

简介: <pre name="code" class="java">class Demo{ int temp = 30 ; // 此处为了方便,属性暂时不封装};public class RefDemo01{ public static void main(String args[]){ Demo d1 = new Demo() ; // 实例化Demo对象,实例化之后里面的temp
class Demo{
	int temp = 30 ;		// 此处为了方便,属性暂时不封装
};
public class RefDemo01{
	public static void main(String args[]){
		Demo d1 = new Demo() ;	// 实例化Demo对象,实例化之后里面的temp=30 
		d1.temp = 50 ;		// 修改temp属性的内容
		System.out.println("fun()方法调用之前:" + d1.temp) ;
		fun(d1) ;
		System.out.println("fun()方法调用之后:" + d1.temp) ;
	}
	public static void fun(Demo d2){		// 此处的方法由主方法直接调用
		d2.temp = 1000;						// 修改temp值
	}
};

public class RefDemo02{
	public static void main(String args[]){
		String str1 = "hello" ;			// 实例化字符串对象
		System.out.println("fun()方法调用之前:" + str1) ;
		fun(str1) ;						// 调用fun()方法
		System.out.println("fun()方法调用之后:" + str1) ;
	}
	public static void fun(String str2){		// 此处的方法由主方法直接调用
		str2 = "MLDN" ;					// 修改字符串内容
	}
};


class Demo{
	String temp = "hello" ;		// 此处为了方便,属性暂时不封装
};
public class RefDemo03{
	public static void main(String args[]){
		Demo d1 = new Demo() ;	// 实例化Demo对象,实例化之后里面的temp=30 
		d1.temp = "world" ;		// 修改temp属性的内容
		System.out.println("fun()方法调用之前:" + d1.temp) ;
		fun(d1) ;
		System.out.println("fun()方法调用之后:" + d1.temp) ;
	}
	public static void fun(Demo d2){		// 此处的方法由主方法直接调用
		d2.temp = "MLDN";						// 修改temp值
	}
};


class Person{			// 定义Person类
	private String name ;	// 姓名
	private int age ;		// 年龄
	private Book book ;		// 一个人有一本书
	private Person child ;	// 一个人有一个孩子
	public Person(String name,int age){
		this.setName(name) ;
		this.setAge(age) ;
	}
	public void setName(String n){
		name = n ;
	}
	public void setAge(int a){
		age = a ;
	}
	public String getName(){
		return name ;
	}
	public int getAge(){
		return age ;
	}
	public void setBook(Book b){
		book = b ;
	}
	public Book getBook(){
		return book ;
	}
	public void setChild(Person c){
		child = c ;
	}
	public Person getChild(){
		return child ;
	}
};
class Book{				// 定义Book类
	private String title ;	// 标题
	private float price ;	// 价格
	private Person person ;	// 一本书属于一个人
	public Book(String title,float price){
		this.setTitle(title) ;
		this.setPrice(price) ;
	}
	public void setTitle(String t){
		title = t ;
	}
	public void setPrice(float p){
		price = p ;
	}
	public String getTitle(){
		return title ;
	}
	public float getPrice(){
		return price ;
	}
	public void setPerson(Person p){
		person = p ;
	}
	public Person getPerson(){
		return person ;
	}
};
public class RefDemo06{
	public static void main(String arg[]){
		Person per = new Person("张三",30) ;
		Person cld = new Person("张草",10) ;	// 定义一个孩子
		Book bk = new Book("JAVA SE核心开发",90.0f) ;
		Book b = new Book("一千零一夜",30.3f) ;
		per.setBook(bk) ;		// 设置两个对象间的关系,一个人有一本书
		bk.setPerson(per) ;		// 设置两个对象间的关系,一本书属于一个人
		cld.setBook(b) ;		// 设置对象间的关系,一个孩子有一本书
		b.setPerson(cld) ;		// 设置对象间的关系,一本书属于一个孩子
		per.setChild(cld) ;		// 设置对象间的关系,一个人有一个孩子
		System.out.println("从人找到书 --> 姓名:" + per.getName()+";年龄:" 
			+ per.getAge() +";书名:" + per.getBook().getTitle() + ";价格:" 
			+ per.getBook().getPrice()) ;	// 可以通过人找到书
		System.out.println("从书找到人 --> 书名:" + bk.getTitle() + ";价格:"
			+ bk.getPrice() + ";姓名:" + bk.getPerson().getName() + ";年龄:"
			+ bk.getPerson().getAge()) ;	// 也可以通过书找到其所有人
		// 通过人找到孩子,并找到孩子所拥有的书
		System.out.println(per.getName() + "的孩子 --> 姓名:"
			+ per.getChild().getName() + ";年龄:" + per.getChild().getAge()
			+ ";书名:" + per.getChild().getBook().getTitle() + ";价格:"
			+ per.getChild().getBook().getPrice()) ;
	}
};


目录
相关文章
|
2月前
|
安全 Java 编译器
new出来的对象,不一定在堆上?聊聊Java虚拟机的优化技术:逃逸分析
逃逸分析是一种静态程序分析技术,用于判断对象的可见性与生命周期。它帮助即时编译器优化内存使用、降低同步开销。根据对象是否逃逸出方法或线程,分析结果分为未逃逸、方法逃逸和线程逃逸三种。基于分析结果,编译器可进行同步锁消除、标量替换和栈上分配等优化,从而提升程序性能。尽管逃逸分析计算复杂度较高,但其在热点代码中的应用为Java虚拟机带来了显著的优化效果。
72 4
|
8天前
|
存储 Java Go
【Java】(3)8种基本数据类型的分析、数据类型转换规则、转义字符的列举
牢记类型转换规则在脑海中将编译和运行两个阶段分开,这是两个不同的阶段,不要弄混!
93 2
|
8天前
|
Java Go 开发工具
【Java】(9)抽象类、接口、内部的运用与作用分析,枚举类型的使用
抽象类必须使用abstract修饰符来修饰,抽象方法也必须使用abstract修饰符来修饰,抽象方法不能有方法体。抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接 口、枚举)5种成分。抽象类的构造器不能用于创建实例,主要是用于被其子类调用。抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类abstract static不能同时修饰一个方法。
89 1
|
19天前
|
Java
Java基础语法与面向对象
重载(Overload)指同一类中方法名相同、参数列表不同,与返回值无关;重写(Override)指子类重新实现父类方法,方法名和参数列表必须相同,返回类型兼容。重载发生在同类,重写发生在继承关系中。
86 1
|
1月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
|
1月前
|
存储 Java 关系型数据库
Java 项目实战基于面向对象思想的汽车租赁系统开发实例 汽车租赁系统 Java 面向对象项目实战
本文介绍基于Java面向对象编程的汽车租赁系统技术方案与应用实例,涵盖系统功能需求分析、类设计、数据库设计及具体代码实现,帮助开发者掌握Java在实际项目中的应用。
50 0
|
2月前
|
安全 Java 编译器
Java面向对象
本文深入讲解了Java面向对象编程(OOP)的四大特性:封装、继承、多态与抽象,以及方法的设计与使用。通过示例展示了如何用类和对象组织代码,提升程序的可维护性与扩展性。
|
2月前
|
机器学习/深度学习 安全 Java
Java 大视界 -- Java 大数据在智能金融反洗钱监测与交易异常分析中的应用(224)
本文探讨 Java 大数据在智能金融反洗钱监测与交易异常分析中的应用,介绍其在数据处理、机器学习建模、实战案例及安全隐私等方面的技术方案与挑战,展现 Java 在金融风控中的强大能力。
|
3月前
|
存储 Java 大数据
Java 大视界 -- Java 大数据在智能家居能源消耗模式分析与节能策略制定中的应用(198)
简介:本文探讨Java大数据技术在智能家居能源消耗分析与节能策略中的应用。通过数据采集、存储与智能分析,构建能耗模型,挖掘用电模式,制定设备调度策略,实现节能目标。结合实际案例,展示Java大数据在智能家居节能中的关键作用。
|
3月前
|
存储 Java 测试技术
Java基础 - 面向对象
面向对象编程是Java的核心,包含封装、继承、多态三大特性。封装隐藏实现细节,提升代码可维护性与安全性;继承实现类间IS-A关系,支持代码复用;多态通过继承、重写与向上转型,实现运行时方法动态绑定,提升系统扩展性与灵活性。

热门文章

最新文章