首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java基础系列(九):方法参数

前言 首先,我们要认识到一点Java方法参数的传递都是按值调用的,方法得到的是所有参数值的一个拷贝,它并不能修改传递给它的参数变量的值。下面我们就来详细了解一下,为什么会这么说?...也就是说,一个方法不可能修改一个基本数据类型的参数。...对象 对象引用作为参数的话,是可以修改参数的状态的,但是修改的是这个对象引用的地址值所对应的对象的状态,而不是修改了对象的地址值,也就是说实际上方法参数是对象的话,虽然可以修改参数的状态,但是并没有修改参数的值...tripSalary方法应用于这个地址值所指向的对象,也就是说u和user的值指向的内存中的对象的薪水提高了20%(发生了改变) 方法结束后,参数变量u不再使用,但是由于这个过程中方法参数的值并没有发生任何改变...总结 Java方法参数的使用情况: 一个方法不能修改一个基本数据类型的参数 一个方法可以改变一个对象参数所指向对象的状态 一个方法不能让对象参数引用到别的对象

38360

java方法参数传递机制

Man.staticswap(a, b); System.out.println(a + "\n" + b); } } 运行结果是 图片 对象 a b 的 引用并没有发生改变 下面就说说 java...的参数传递机制 先说结论:java参数传递并不是引用传递,而是值传递 看下图 图片 swap方法中,a b 向 x y 传递的是值,是 a b 在栈中的值,此处的 传递=拷贝 也就是说,a b 与  x...y 除了类型一致外、值相等(指向了堆的同一地址),没有任何相同处  a b与x y完完全全不相干 都不相干了,x y 不管这么改变自身的值 ,与 a b 有什么关系呢 所以, 方法退出,a b 的引用并没有发生变化...再看下一个 改写swap方法, public static void swap(Man m) { m = new Man("xx",88); } 调用运行 图片 传递的是值 传递的是值

76200
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java之invoke与方法参数注解

    上一节中我们说了Java之中非常主要的一个实例---注解的入门,这节我们结合反射中的invoke动态调用看看注解的作用域问题 继承是Java的一个重要特性而覆写是Java继承中不可获取的,而编辑器对于覆写的地方会只能添加...Java源码中这么解释:1 Override只是说明告诉开发者这个方法是被覆写啦,并未功能性的含义。还有这个是给编辑器看的也就是做idea开发人员需要开发的功能 看了这些对我们有什么用呢?...System.out.println("run before"); animal.move(); System.out.println("run after"); } 这次我们把注解放置到方法参数位置...---参数注解,对应的我们需要修改我们的注解让其可以在runtime时使用,它修饰目标为方法参数 @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.PARAMETER...的层面Class实例可以动态创建,方法可以动态绑定创建 Object strInstance = Class.forName("java.lang.String").newInstance();

    3.5K20

    java中给方法参数设置默认值,java设置可选参数

    今天在调整一个定时任务时需要将固定写死的查询日期通过外部传参来控制,如果没有传值给个默认值,于是了解了下java函数的参数默认值在 Java 中,方法参数没有直接提供默认值的功能,但可以通过方法重载或者使用可选参数的方式实现类似的效果...方法重载(Method Overloading):可以编写多个具有不同参数方法来实现类似的功能,其中某些方法可以省略一些参数,并在方法内部使用默认值。...}在这个例子中,第一个方法 myMethod 只接受一个参数 a,而第二个方法 myMethod 接受两个参数 a 和 b。...2.可选参数(Optional Parameters):Java 8 引入了 java.util.Optional 类,可以使用它来实现可选参数的功能。...请注意,这种方法也需要调用者在提供参数时使用 Optional 类型来包装可选参数。这些方法提供了一些方式来模拟默认参数值的行为,但它们并不是直接支持默认参数值的语言特性。

    6.7K20

    零基础学Java(13)方法参数

    前言 首先回顾一下在程序设计语言中关于如何将参数传递给方法的一些专业术语。按值调用表示方法接收的是调用者提供的值。而按引调用表示方法接收的是调用者提供的变量地址。...方法可以修改按引用传递的变量的值,而不能修改按值传递的变量的值。 Java传参 Java程序设计语言总是采用按值调用。也就是说,方法得到的是所有参数值的一个副本。...具体来讲,方法不能修改传递给它的任何参数变量的内容。...x乘以3以后等于30,但是percent仍然是10 这个方法结束之后,参数变量x不再使用。 然而,有两种类型的方法参数: 基本数据类型(数字、布尔值)。...总结 总结一下在Java中对方法参数能做什么和不能做什么: 方法不能修改基本数据类型的参数(即数值型和布尔型) 方法可以改变对象参数的状态 方法不能让一个对象参数引用一个新的对象 实战例子 public

    77110

    Java 基础篇】Java可变参数:灵活处理不定数量的方法参数

    Java编程中,可变参数是一项强大的功能,它允许你编写更加灵活的方法,接受不定数量的参数。本文将详细解释Java可变参数的用法、语法以及最佳实践。 什么是可变参数?...可变参数Java 5引入的一项功能,它允许你在方法中传递不定数量的参数。可变参数用三个点(...)表示,放置在方法参数的类型之前。可变参数实际上是一个数组,允许你传递任意数量的参数值。...方法重载 可变参数允许你编写方法的重载,而无需为每种参数数量编写不同的方法。...参数类型 可变参数的类型可以是任意合法的Java类型,包括自定义对象类型。...结语 Java可变参数是一项强大的功能,使方法的设计更加灵活,并允许接受不定数量的参数。通过了解其基本语法和最佳实践,您可以更好地利用可变参数来编写更加通用和可维护的Java代码。

    1.3K20

    java杂谈之方法参数的前世今生

    到此, 引出本文的主题:java方法参数的传递机制。 3、值传递?引用传递? java方法参数的传递到底是值传递还是引用传递???...以前看过一些网上资料说java方法参数如果是基本类型则为值传递,如果是引用类型则为引用传递,这样的说法的得来是有现象推导出的结论,如下所示: 3.1 基本类型时: public static void...4、 参数传递本质 Java里的方法参数传递类似于西游记里的孙悟空,孙悟空复制了一个假的孙悟空,这个假孙悟空具有与孙悟空相同的能力,可除妖或被砍头,但不管假孙悟空遇到什么事,真孙悟空不会受到任何影响。...同样印证了java方法参数传递是值传递的理论。...6、结论 java方法参数的传递不论参数是基本类型还是应用类型都是值传递(也就是栈区副本传递),具体需要结合java内存模型分析,回过头来看原本的问题: cellIds = cellIds.stream

    45530

    Java、Groovy、Python和Golang如何把方法当作参数

    接下来分享Java、Groovy、Python和Golang中是如何把方法当做参数的。 Part1Java Java是我最早接触的语言,用的也比较多,通过本次重新复习Java知识,我又学到了新知识。...之前我以为Java在把闭包中都是java.util.function.Function,后来我发现这个类只能通过一个参数和一个返回值。...如果想多传参数或者不使用参数可以使用java.util.function.BiFunction和java.util.function.Supplier。...7定义方法闭包 ff:= func(f int) int{return f * 11} 多个参数方法省略…… 8方法中返回闭包和使用闭包 返回方法闭包: func out() func(int) int...f(i * 3) } PS:其实除了Java不同参数数量和类型需要额外定义使用不同的类以外,其他语法都可以规避掉这一点。

    79630

    Java基础:二、方法参数和返回值(6)

    Java方法决定了一个对象能够接收什么样的消息。...参数列表给出了要传给方法的信息的类型和名称 方法名和参数列表,合起来被成为“方法签名”唯一地标识出某个方法 Java中的方法只能作为类的一部分来创建,方法只有通过对象才能被调用。...如果试图在某个对象上调用它并不具备的方法,那么在编译时就会得到一条错误消息 通过对象调用方法时,需要先列出对象名,紧接着句点,然后是方法名和参数列表,参数列表包含在小括号里: objectName.methodName...面向对象的程序设计通常简单地归纳为“向对象发送消息” 参数列表 方法参数列表指定要传递给方法什么样的消息。...参数列表中必须指定每个所传递对象的类型及名字,像Java这种任何传递对象的场合一样,这里传递的实际上也是引用,并且引用的类型必须正确。

    85610

    优雅的Java编程:将接口对象作为方法参数

    theme: smartblue 目录 概述 在Java编程中,方法参数传递方式通常是通过基本类型、对象引用或者集合等方式。然而,一种更加优雅且灵活的设计模式是将接口对象作为方法参数。...降低耦合性 将接口对象作为方法参数可以有效地降低方法的耦合性。通过接口,方法不再依赖于具体的实现类,而是依赖于接口。这使得方法更加通用,能够接受实现了相同接口的不同类的实例,从而提高了代码的灵活性。...通过接口作为参数,使得方法更加稳定,更容易进行单元测试和模块替换。...实现回调机制 接口对象作为方法参数的一种常见应用是实现回调机制。方法可以接受实现了某个回调接口的对象,并在适当的时机调用该接口的方法,从而实现一种异步通知或处理机制。...结语 将接口对象作为方法参数是一种强大的设计模式,它提高了代码的可维护性、可扩展性和可读性。通过实现多态性、降低耦合性、遵循依赖倒置原则等,我们能够写出更加优雅、灵活的Java代码。

    63640

    Java 开发中可变参数个数的方法

    在 J2SE 5 以前,可以使用数组来实现向一个方法中传入个数可变的参数的目的,比较典型的应用场景就是 main 方法。...定义个数可变参数方法如下:     在类型与参数名称之间加上三个连续的点符号 “...”。...public static int sum(int... values) { //TODO } 这一语法有两项约束:     1、只有最后一个参数才能进行这样的定义;     2、如果方法还有其它参数,...必须放在这样进行定义的参数之前;     3、编译器在对这样的方法进行编译时,会将这样进行定义的参数进行转换,转换的结果就是一个数组(编译生成的class文件上会有一个记号标明这个参数是实参个数可变的)...,因为这个原因,不能在一个类中定义两个方法,其中一个使用了可变参数语法,而另外一个方法使用的是数组,且这两个方法参数的名称相同。

    1.1K20

    【小家javajava8新特性之---反射获取方法参数

    方法参数名,在很多时候我们是需要反射得到的。但是在java8之前,代码编译为class文件后,方法参数的类型是固定的,但参数名称却丢失了,这和动态语言严重依赖参数名称形成了鲜明对比。...比如mybatis的Dao层接口方法,需要特意用个注解@Param来显示标识出参数名,当时写的时候我觉得挺傻X的一件事,所以java8来了,带来的新特性解决了这一问题 获取方法参数名称 方法一:采用javassit...,调试时看到方法名称是通过jdk代理过的,拿不到参数名。...方法三:通过Java8的Parameter类 现在,Java 8开始在class文件中保留参数名,给反射带来了极大的便利。...其实并不是,因为java8为了保持向下兼容,默认编译是不能获取到参数名称的。

    1.2K40

    java getmethod 使用_java – 使用子类作为方法参数调用getMethod「建议收藏」

    是否可以调用一个方法,其中参数对象或参数类是一个子类,并且该方法本身将超类作为参数?...我试图调用这个方法public void setNewProblem(Problem problem);具体实现了抽象类的问题.不幸的是,我得到了NoSuchMethodException异常....解决方法: 你必须要问它的确切类型.这是因为您可以拥有多个可能的重载方法,并且需要准确了解您想要的内容. 所以你可以用一个子类来调用,但你不能在不在那里的情况下要求一个子类....您可以做的是查看所有方法并找到匹配项. 如果您需要的只是属性的setter或getter,我建议您查看BeanIntrospector,它将找到该属性的所有属性和getter / setter方法....标签:superclass,invoke,java,reflection,subclass 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

    1.2K10

    Java 可变参数

    Java1.5增加了新特性:可变参数:适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。注意:可变参数必须位于最后一项。...当可变参数个数多余一个时,必将有一个不是最后一项,所以只支持有一个可变参数。...因为参数个数不定,所以当其后边还有相同类型参数时,java无法区分传入的参数属于前一个可变参数还是后边的参数,所以只能让可变参数位于最后一项。...可变参数的特点: (1)只能出现在参数列表的最后;  (2)位于变量类型和变量名之间,前后有无空格都可以; (3)调用可变参数方法时,编译器为该可变参数隐含创建一个数组,在方法体中一数组的形式访问可变参数

    1.6K100
    领券