(Java)知其然且知其所以然系列2

写在开头

本系列内容主要涵盖我在深入学习Java过程中对一些知识点的深入理解和巩固。如果内容表达不准确或存在谬误,欢迎在评论区或私信中进行补充或指正~

目录

Java面向对象

作为方法参数,基本数据类型和引用数据类型的区别?

        基本数据类型:

        引用数据类型:

        补充

        总结

可变参数如何使用?

        可变参数优势:

        可变参数与其他参数混用 

        与数组作为参数的对比

        注意事项

如何判断是否为方法重载?

        方法名:相同;

        参数:类型 or 个数不同;

对象的实例化过程?

this关键字的相关问题?

        在类的方法中使用this关键字时,它具体指代的是什么?作用是什么?

        在构造器中使用this关键字,这种用法的主要目的是什么?有哪些规则或限制?

        能否在静态方法中使用this关键字?

        this关键字如何与方法链式调用相关联?


本篇内容旨在重新学习和加深印象关于Java面向对象的内容。为便于记忆,本文内容稍有简化。

Java面向对象


  • 作为方法参数,基本数据类型和引用数据类型的区别?

     基本数据类型:

       按值传递

  • 传递的是变量的副本,对该副本的任何修改都不会改变调用方法时传入的变量的值。
public class BasicTypeExample {
    public static void modifyValue(int value) {
        value = 100; // 修改的是副本,不会影响实际参数
        System.out.println("modifyValue Value: " + value); // 输出 100
    }

    public static void main(String[] args) {
        int originalValue = 50;
        modifyValue(originalValue);     // 调用方法,输出 100
        System.out.println("Original Value: " + originalValue); // 输出 50
    }
}
      引用数据类型:

       按引用传递

  • 传递的是对象的引用(即地址)。通过这个引用可以操作实际对象,但重新分配引用不会影响外部变量
public class ReferenceTypeExample {
    static class MyObject {    //自定义一个类
        int value;    // MyObject的成员变量
    }
    public static void modifyObject(MyObject obj) {    //自定义方法
        obj.value = 100; // 修改的是实际对象的属性,会影响到实际参数
    }
    public static void main(String[] args) {
        MyObject originalObject = new MyObject();  //创建MyObject对象originalObject 
        originalObject.value = 50;    //为originalObject的属性赋值50
        modifyObject(originalObject);    //调用方法,修改value 的值
        // 完成修改
        System.out.println("Original Object Value: " + originalObject.value); // 输出 100
    }
}
补充

引用重新指向

虽然传递的是引用,但如果在方法内部重新分配了引用的地址,这个变化不会反映到调用方法的变量中。

public class ReferenceReassignExample {
    static class MyObject {    //自定义一个类
        int value;    // MyObject的成员变量
    }
    public static void reassignObject(MyObject obj) {
        obj = new MyObject(); // 重新分配引用,不会影响实际参数
        obj.value = 100; //为obj的属性赋值50
        System.out.println("reassignObject Value: " + obj .value); // 输出 100
    }    //引用指向的地址发生改变,操作的不是同一个对象,所以对外部变量无影响。
    public static void main(String[] args) {
        MyObject originalObject = new MyObject();  //创建MyObject对象originalObject 
        originalObject.value = 50;    //为originalObject的属性赋值50
        reassignObject(originalObject);    //调用方法
        System.out.println("Original Object Value: " + originalObject.value); // 输出 50
    }
}
总结
  • 基本数据类型:按值传递,方法内部的修改不会影响到外部变量
  • 引用数据类型:按引用传递,方法内部对对象的修改会影响到外部对象,但重新分配引用不会影响外部变量。

  • 可变参数如何使用?

        可变参数优势:
  • 简化方法调用:避免了需要在调用前创建数组的麻烦。
  • 提高代码可变参数与其他参数混用可读性:调用方可以传递任意数量的参数,使代码更简洁。
        可变参数与其他参数混用 

        可变参数与其他参数一起使用,可变参数必须是方法的最后一个参数。

public class VarargsExample {
    public static void printDetails(String name, int... scores) { //最后为可变参数
        System.out.println("Name: " + name);
        System.out.println("Scores: ");
        for (int score : scores) {
            System.out.print(score + " ");
        }
    }
    public static void main(String[] args) {
        printDetails("Alice", 90, 85, 88);
    }
}
/*
输出结果:
Name: Alice
Scores: 
90 85 88 
*/
        与数组作为参数的对比

        使用可变参数可以使调用代码更简洁,而不需要显示地创建一个数组。

public class VarargsExample {
    public static void printNumbers(int... numbers) {
        for (int number : numbers) {
            System.out.println(number);
        }
    }
    public static void main(String[] args) {
        // 使用可变参数,更简洁
        printNumbers(1, 2, 3);
        // 使用数组
        int[] numbersArray = {4, 5, 6};
        printNumbers(numbersArray);
    }
}
注意事项
  • 方法重载:可变参数方法与非可变参数方法在重载时需要注意,可能会导致方法调用的二义性问题。
  • 性能:在性能关键的代码中应谨慎使用,因为每次调用都会创建一个数组。
  • 多个可变参数:一个方法中只能有一个可变参数,而且必须是方法的最后一个参数。

如何判断是否为方法重载?

方法名:相同;
参数:类型 or 个数不同;


对象的实例化过程?

关于在内存中执行对象的实例化过程,可以分为两部分:

this关键字的相关问题?

  • 在类的方法中使用this关键字时,它具体指代的是什么?作用是什么?

        this用于引用当前对象的实例

        它主要有两个作用:

  1. 当成员变量于方法参数名称相同时,使用this可以指明成员变量
  2. 在构造器中调用另一个构造器。
  • 在构造器中使用this关键字,这种用法的主要目的是什么?有哪些规则或限制?
  1. 主要目的是重用构造器代码或调用其他构造器来初始化对象。
  2. 通过this调用构造器时,必须将它放在构造器的第一行,并且只能调用一个构造器。
  • 能否在静态方法中使用this关键字?

       不能。

        因为this关键字指代当前对象的实例,而静态方法是类级别的,没有特定的实例。

  • this关键字如何与方法链式调用相关联?



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值