花几千上万学习Java,真没必要!(十六)

引用数据类型传递:

测试代码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();
    }
}

运行结果如下:

 

 

 

 

 

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值