首页编程java编程java 形式参数是什么意思 Java中实际参数和形式参数的区别

java 形式参数是什么意思 Java中实际参数和形式参数的区别

编程之家2023-10-14101次浏览

大家好,如果您还对java 形式参数是什么意思不太了解,没有关系,今天就由本站为大家分享java 形式参数是什么意思的知识,包括Java中实际参数和形式参数的区别的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

java 形式参数是什么意思 Java中实际参数和形式参数的区别

Java中实际参数和形式参数的区别

形参和实参有以下显著的区别:

1、形参不能离开方法。形参只有在方法内才会发生作用,也只有在方法中使用,不会在方法外可见。而实参可以再程序的任何地方都使用。

2、形参代表一个合集,具有不确定性,而形参代表一个独立事物,具有确定性(即使是为null)。也就是说,形参不能代表具体的对象,只能代表这些对象共同的属性(比如超类、各种其他自定义属性等等),而实参则是具体的对象(比如超类的实例)。

java 形式参数是什么意思 Java中实际参数和形式参数的区别

3、形参的值在调用时根据调用者更改,实参则用自身的值更改形参的值(指针、引用皆在此列)、

JAVA中的形参和实参是什么意思

Java——形参和实参的区别形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用。

实参出现在主调函数中,进入被调函数后,实参变量也不能使用。

java 形式参数是什么意思 Java中实际参数和形式参数的区别

形参和实参的功能是作数据传送。发生函数调用时,主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。

1.形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。

函数调用结束返回主调函数后则不能再使用该形参变量。

2.实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。

因此应预先用赋值,输入等办法使实参获得确定值。

3.实参和形参在数量上,类型上,顺序上应严格一致,否则会发生“类型不匹配”的错误。

4.函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。

因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。

5.当形参和实参不是指针类型时,在该函数运行时,形参和实参是不同的变量,他们在内存中位于不同的位置,形参将实参的内容复制一份,在该函数运行结束的时候形参被释放,而实参内容不会改变。

如果函数的参数是指针类型变量,在调用该函数的过程中,传给函数的是实参的地址,在函数体内部使用的也是实参的地址,即使用的就是实参本身。所以在函数体内部可以改变实参的值。

java 参数中含有… 是什么意思啊

main方法的签名其实可以这样写:

public static void main(String... args)//方法1

它也可以运行.

并且,如果同时还存在

public static void main(String[] args)//方法2

会报已经存在重复的方法的错误.

由此可见,String... args跟String[] args对于虚拟机来说其实是一回事.

而且,在方法内,通过...传进来的参数的使用方法也跟一个数组完全无二,可以for循环,甚至可以直接转换:

public static void main(String... args)

{

String[] ss=args;

}

但对于程序员来说却还是有差别的.

1.调用

我们只能这样调用方法2:

main(new String[]{});

即,方法2只能接受String数组做参数.

而我们陌生的方法1可强了,用以下参数调用,照单全收:

main();

main(null);

main(null,null);

main(null,null,null);

......

main("a");

main("a","b");

main("a","b","c");

......

main(new String[]{});

(String...匹配String*,而null也可以是一个特殊的String)

2.参数位置

使用...的参数只能是最后一个参数.不然谁知道你调用的时候,点点点匹配到哪个实参?

public static void main(String[] args,int index)//可以

public static void main(String... args,int index)//不行!

3.重载

假设有以下两个方法:

public static void main(String... args)//方法1

public static void main(String a,String... args)//方法3

从语法上来看,这个重载完全没有错误,eclipse也没有报错.但是当调用时使用的参数个数大于这些方法中点点点参数前面的参数个数时,eclipse就会发现这个错误了.很拗口是不是?嘿嘿~还是举例来说吧.以上这两个方法,如果调用时

main();

编译器会认出这个调用的是方法1.但是如果调用时

main("");

编译器就疯了...因为一个String参数,既符合方法1的点点点,也符合方法3的String+点点点,编译器就不知道调用的是哪个方法了.

String[]参数不会有这种问题.

所以重载时要注意,如果点点点参数前面有跟它类型相同的参数...最好的方法,似乎就是换回数组形式了,要么就给方法改个名字吧.

4.遇上泛型加外包

用个实例来说

java.util.Arrays是个工具类,所有方法都是静态的,对数组的操作.里面有个方法asList(T... args),用来把类型T的数组转化成List<T>.

这是个很有用的方法,在绝大多数情况下都能如你所愿.

但是,你可以试试下面的写法

int[] is=...//自定义的数组,或者从什么地方获取来的数组

List<Integer> list=Arrays.asList(is);

很不幸,不要说执行,编译都通不过.错误的意思大概是:

不能将List<int[]>转化成List<Integer>

明白了吧?

你的设想是,把int[]中的每一个元素对应T...中的每一个点,

可编译器不这么想.因为int是原始类型,不是Object的子类.而泛型T隐含的条件是T extends Object.所以编译器不会把每一个int看做T,不会把int[]看做T点点点.虽然java已经支持自动将原始类型封包成外包类,但那是单个的情况.

而数组(不管什么类型)则是一种特殊的类型,是Object的子类,所以编译器觉得整个int[]对应一个T,你调用的方法是asList<int[]>(int[]... args)而不是你想象中的asList<Integer>(Integer...)

java编译报错:实际参数列表和形式参数列表长度不同

以下是我给你修改的代码,有注释的行是你需要改的。纯手写,求财富值!(下种子用...T_T)

import java.util.*;

import java.util.Calendar;

public class Student{

int id, Byear;

double eng,math,com;

public Student(int id, int Byear, double eng,double math,double com){//参数列表要这么改

this.id= id;

this.Byear= Byear;

this.eng= eng;

this.math= math;

this.com= com;

};

public int getId(){

return id;

}

public int getBYear(){

return Byear;

}

public double getEng(){

return eng;

}

public double getMath(){

return math;

}

public double getCom(){

return com;

}

public double getSum(){

return this.eng+ this.math+ this.com;

}

public int getAge(int Byear) throws Exception{//Byear参数类型改为int

Calendar cal= Calendar.getInstance();

if( cal.get(Calendar.YEAR)< Byear){//把当前年份和输入年份比较

throw new IllegalArgumentException(

"The birthYear is before Now.It's unbelievable!");

}

int yearNow= cal.get(Calendar.YEAR);//得到当前年份

// cal.setTime(Byear);不要了

// int yearBirth= cal.get(Calendar.YEAR);不要了

int age= yearNow- Byear;//相减得到年龄

return age;

}

public static void main(String[] args){

Date NowYear= new Date();//输出当前时间

System.out.println(NowYear);

Student stu= new Student(1054,1993,78,84,90);//这时按照你的构造函数实例化Student类

System.out.println("总成绩:"+stu.getSum());

System.out.println("年龄:"+stu.getAge());

//System.out.println(stu.toString());你没有@Override toString()函数,别这么写

}

}

文章到此结束,如果本次分享的java 形式参数是什么意思和Java中实际参数和形式参数的区别的问题解决了您的问题,那么我们由衷的感到高兴!

null在java是什么意思,java中null 代表着什么意思的关键字java $ 什么意思,java中$是什么意思