引用数据类型传递:
测试代码1:
package testclass.com;
class MyClass {
int value;
MyClass(int value) {
this.value = value;
}
void setValue(int value) {
this.value = value;
}
int getValue() {
return value;
}
}
public class ReferenceTypesDemo {
//modifyReferenceTypes的参数为:引用数据类型
public static void main(String[] args) {
MyClass myObject = new MyClass(10);
String myString = "Hello";
int[] myArray = {1, 2, 3};
System.out.println("Before method call:");
System.out.println("MyClass value: " + myObject.getValue());
System.out.println("String: " + myString);
System.out.println("Array: " + java.util.Arrays.toString(myArray));
modifyReferenceTypes(myObject, myString, myArray);
System.out.println("\nAfter method call:");
System.out.println("MyClass value: " + myObject.getValue());
System.out.println("String: " + myString); // 注意:字符串在Java中是不可变的
System.out.println("Array: " + java.util.Arrays.toString(myArray));
}
public static void modifyReferenceTypes(MyClass obj, String str, int[] arr) {
obj.setValue(20); // 修改MyClass对象的值
str = "World"; // 重新分配str,但这不会影响main中的myString
arr[1] = 99; // 修改数组的一个元素
arr = new int[]{4, 5, 6}; // 重新分配arr,但这不会影响main中的myArray
}
}
运行结果如下:
测试代码2:数组作为参数传递
package overload.com;
public class ArrayPassingExample {
// 一个方法,接收一个整型数组作为参数,并打印数组的第一个元素
public static void printFirstElement(int[] numbers) {
if (numbers != null && numbers.length > 0) {
System.out.println("第一个元素是: " + numbers[0]);
} else {
System.out.println("数组为空或为null");
}
// 尝试修改数组的第一个元素
numbers[0] = 100; // 如果数组不为空且至少有一个元素,这将修改原始数组的第一个元素
// 下面这行代码不会改变原始数组,而是让参数指向一个新的数组
// numbers = new int[]{1, 2, 3}; // 如果取消注释,这行代码将不会影响原始数组
}
// 主方法
public static void main(String[] args) {
// 创建一个整型数组
int[] myArray = {5, 10, 15, 20, 25};
// 调用方法,传递数组作为参数
printFirstElement(myArray);
// 再次打印数组的第一个元素,以验证它是否已被修改
if (myArray != null && myArray.length > 0) {
System.out.println("修改后,第一个元素是: " + myArray[0]);
}
// 输出将显示原始数组的第一个元素已被修改为100
}
}
运行结果如下:
测试代码3: 接口作为参数传递
package overload.com;
// 定义一个接口
interface Shape {
void draw(); // 定义一个draw方法,但不实现它
}
// 实现Shape接口的Circle类
class Circle implements Shape {
@Override
public void draw() {
System.out.println("Inside Circle::draw() method.");
}
}
// 实现Shape接口的Rectangle类
class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Inside Rectangle::draw() method.");
}
}
// 定义一个类,它有一个接收Shape接口作为参数的方法
public class ShapeTestInterface {
// 这个方法接收一个Shape类型的参数
public static void drawAllShapes(Shape s) {
// 由于s是Shape类型,所以可以调用它的draw方法
// 无论传递给它的是Circle对象还是Rectangle对象
s.draw();
}
// 主方法
public static void main(String[] args) {
// 创建Circle对象
Shape circle = new Circle();
// 调用drawAllShapes方法,并传递circle对象
drawAllShapes(circle);
// 创建Rectangle对象
Shape rectangle = new Rectangle();
// 调用drawAllShapes方法,并传递rectangle对象
drawAllShapes(rectangle);
}
}
运行结果如下:
测试代码4:对象作为参数传递
package overload.com;
public class ReferenceTypeParameterPassing {
// 一个简单的类,用于说明引用类型
static class Person {
String name;
Person(String name) {
this.name = name;
}
// 用于修改Person对象的方法
void setName(String newName) {
this.name = newName;
}
// 用于打印Person对象的信息
void printInfo() {
System.out.println("Person name: " + name);
}
}
// 一个方法,接收一个Person类型的参数
public static void modifyPerson(Person person) {
// 修改Person对象的name属性
person.setName("New Name");
// 并没有改变person引用的值,只是修改了它所指向的对象的属性
// 如果尝试改变person引用的值,如下:
// person = new Person("Another Person");
// 那么这种改变将不会影响到原始引用
}
// 主方法
public static void main(String[] args) {
Person originalPerson = new Person("Old Name");
originalPerson.printInfo(); // 打印原始Person对象的信息
// 调用方法,传递originalPerson作为参数
modifyPerson(originalPerson);
// 再次打印Person对象的信息,查看是否发生了变化
originalPerson.printInfo(); // 将显示"Person name: New Name",说明对象的属性被修改了
}
}
运行结果如下:
测试代码5:一个简单的商品管理系统
package tes.com.merchandise;
//创建商品类
public class Product {
private int id;
private String name;
private double price;
public Product(int id, String name, double price) {
this.id = id;
this.name = name;
this.price = price;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}
package tes.com.merchandise;
import java.util.ArrayList;
//用ArrayList<Product>存储商品信息。
public class ProductManagementSystem {
private ArrayList<Product> products;
public ProductManagementSystem() {
this.products = new ArrayList<>();
}
public void addProduct(Product product) {
products.add(product);
}
public void removeProduct(int id) {
for (Product product : products) {
if (product.getId() == id) {
products.remove(product);
break;
}
}
}
public void displayAllProducts() {
for (Product product : products) {
System.out.println("商品ID: " + product.getId());
System.out.println("商品名称: " + product.getName());
System.out.println("商品价格: " + product.getPrice());
System.out.println("-----------------------");
}
}
}
package tes.com.merchandise;
public class CommodityManagementSystem{
public static void main(String[] args) {
// 创建商品管理系统实例
ProductManagementSystem system = new ProductManagementSystem();
// 添加商品
system.addProduct(new Product(1, "手机", 1999.99));
system.addProduct(new Product(2, "电视", 2999.99));
system.addProduct(new Product(3, "电脑", 3999.99));
// 显示所有商品
system.displayAllProducts();
// 删除商品
system.removeProduct(2);
// 再次显示所有商品
system.displayAllProducts();
}
}
运行结果如下: