java输入输出与方法详细代码示例
目录
- 输入与输出
- 输出
- 输入
- Random
- 方法
- 方法调用的执行过程
- 形参和实参的关系(重要重要!!)
- 基本数据类型
- 引用数据类型
- 方法重载
- 方法签名(了解即可)
- 递归
- 总结
输入与输出
不论哪一个语言,都离不了输入与输出,下面我们来分别对输入和输出进行详细介绍。
输出
在Java中输出的语法如下:(在idea中,可以输sout简写形式,然后会有提示)
System.out.println("换行的"); System.out.print("不换行的"); String s = "格式化的"; System.out.printf("s=%s\n",s);
在Java中输出有以上三种形式,println是带换行的,print是不带换行的,printf是格式化输出的。
对于格式化字符串如下表:输入
Java中的输入是Scanner函数,使用Scanner时需要引入包后再使用Scanner方法
import java.util.Scanner Scanner scanner = new Scanner(System.in); //从控制台上输入一个整数 int num = scanner.nextInt();
这里我来给大家介绍一下Scanner常用的一些方法:
- hasNextInt:一般用作循环输入整数的时候,判断是否有下一个整数输入,有进行一些操作。
- nextInt:从键盘输入一个整数
- nextDouble:从键盘输入一个小数
- nextLine:一般用于获取字符串,可以获取带空格的字符串
- next:也用于字符串的获取,但如果字符串中有空格,则只能的到空格前面的内容。
当然Scanner还有很多方法,这里给大家推荐个软件,在这里可以查看某些类里面的方法等。
Random
这里穿插讲述一个函数,随机数函数也就是Random,这个函数用来生成随机数。对于我们自己练习的时候应该会用到。在这里我就不做过多的一些官方解释了,我这就主要介绍主要用法。
//种子为系统的时间,随机数生成器每次运行时生成的随机数不同 Random random = new Random(); //种子为自己填写的一个数,每次根据这个数生成随机数,由于种子确定了,所以每次生成的随机数都一样。 Random random = new Random(32);
用于获取一个整数随机数包含两个方法nextInt()和nextInt(number)
前者数字的范围并不确定,而是默认的范围,生成的随机数会很大。一般我们都采用后者,当我们设置number=100时,生成的随机数范围为[0,100)这个范围就可控了,在我们的掌控中了。
当然Random也有很多不同的方法,大家详细可以去上面我分享的软件中查阅。
方法
在C语言中方法也称为函数,为什么会有方法呢?目的是为了可以模块化管理代码,对于重复使用代码的地方,只需要调用即可,减少了代码量。
那么方法是如何定义的呢?
修饰符 返回值类型 方法编程客栈名称([参数类型 形参编程客栈 ...]){ 方法体代码; [return 返回js值]; }
修饰符有很多,但初期我们刚编写的时候先可以都写成public static,其余的我们后面详细介绍。
返回值类型,一个方法可以没有返回值,也就是void,也可以有不同类型的返回值,看自己需要什么样的,int,double,数组,String等
方法名称为自己取的方法名字,这里要命名规范,需要为小驼峰形式。
参数类型,也就是基本数据类型或者引用类型
形参,也就是在方法中定义的变量名
方法体代码也就是具体操作的部分
return 返回值,看前面返回类型是啥,若是void就不用返回,如果为Int就得返回一个int类型的数,返回值类型应与返回的值类型对应。
注意!
- Java中方法不用声明。
- Java中方法不可以嵌套定义。下面那样就是错误的。
public static void func(int a) { System.out.print("方法一"); public static void func2(int a) { System.out.print("方法二"); } }
- Java中的方法需要在类中定义。
- 定义方法的时候,不会执行方法体里面的语句。只有调用的时候才会执行里面的语句。
- 一个方法可以被调用多次。
方法调用的执行过程
我们可以在idea中调试,来一www.devze.com步一步的看执行过程,这里我用例子来给大家描述一下执行过程。
public static int add(int a, int b) { System.out.println("方法中"); return a + b; } public static void main(String[] args) { int num = add(2,3); System.out.println(num); }
- 程序运行进入到main方法中(main方法为程序的入口),然后执行里面的代码。
- 看到调用了方法add,并且传递了参数2,3。
- 计算机找到方法地址,进入到方法add中。
- 执行add方法里面的代码,先进行了输出,然后返回了一个值。
- 返回值也就代表方法中的内容已经结束了,我们回到main方法中,将返回的值赋给了num。
- 最后输出num。
形参和实参的关系(重要重要!!)
什么是形参什么是实参呢?
上面橙色框框的是形参,下面红色框框的是实参。那他俩究竟有什么关系呢?
基本数据类型
如果参数类型是基本数据类型,那么她们两者之间的关系就是将实参拷贝到形参。然后形参再去完成一些操作。这里需要记住一个知识点,局部变量是存储到栈上的。
public static void add(int a, int b) { android a++; b++; } public static void main(String[] args) { int a = 2; int b = 3; add(2,3); System.out.println(a + "," + b); }
这个代码最后运行结果是2,3。希望下面的图示能让大家明白形参和实参的关系。
到最后一步,我们也就知道了为什么输出的是2,3了,你在add方法中改变的是拷贝后的a和b的值,并不是原来的。
引用数据类型
对于引用数据类型,这里面形参和实参也比较重要了!也比较容易出错。这里我们用数组来举例。这里也要注意一个知识点,就是对象是存储到堆上的。我们同样图示方法展示。
public static void change(int [] arr) { arr[0] = 10; } public static void main(String[] args) { int[] array = {1,2,3,4}; change(array); System.out.println(Arrays.toString(array));//Arrays.toString是将数组转为字符串,快速输出。后续讲数组的时候再详细讲。 }
该代码的最后结果为[10,2,3,4]。数组为引用数据,变量里面存储的为地址。
希望大家看到这个图示能懂得引用类型形参和实参的关系。数组还有一个点喜欢考,也是形参和实参的关系。
public static void change(int[] array) { array = new int[10]; array[0] = 1; System.out.println(Arrays.toString(array)); } public static void main(String[] args) { int[] array = {1,2,3,4,5}; change(array); }
上面这个,虽然实参将地址传过去了,但是在方法中,又新创建了一个对象,然后array指向了新对象,修改的数据也是新对象里面的,然后当方法执行完毕后,返回main方法,形参不再指向任何东西,创建的新对象由于没有人指向,会被系统自动回收。
方法重载
这个和后面要学到的重写要进行区分,在这我们来介绍一下什么是方法重载。
在Java中我们如果要用到方法时候,肯定得给方法起名字。但如果功能都一样,只不过操作的数据类型不一样,还得继续重新起名字,那不是很让人头疼嘛。所以这也就用到了重载。也就允许同样功能的方法,方法名字可以一样。如下:
public static int add(int a, int b) { return a + b; } public static double add(double a, double b) { return a + b; } public static void main(String[] args) { System.out.println(add(1,2)); System.out.println(add(1.5,3.6)); }
这里我们定义了两个add方法,分别求两个整数的和,两个小鼠的和。
重载的要求:- 方法名字必须相同
- 参数列表必须不同(可以是参数个数不同,参数顺序不同,参数数据类型不同)
- 对于方法返回类型,对于重载没有影响,可以相同,可以不同。
方法签名(了解即可)
对于同样名字的方法,系统怎么知道我们要用哪一种呢?这就和方法签名有关系了。
方法签名:经过编译器编译修改过之后方法最终的名字。具体方式:方法全路径名+参数列表+返回值类型,构成方法完整的名字。
例子如下:
对于其签名中有一些特殊符号,解释如下:
递归
递归就是指自身又调用自己的方法。在解决一些问题的时候,递归的方式会提高效率。
在用递归解决问题的时候,往往都需要将问题拆分成一个个小问题来解决。
递归需要满足条件:1.必须有结束条件(递归结束的出口)2.必须可以将原问题能拆分成子问题,并且子问题和原问题解决方法一致。
递归是如何执行的呢?请见下图。
对于递归这一块,不要着急,可以多做些题,慢慢就熟练了,加油!
总结
到此这篇关于java输入输出与方法的文章就介绍到这了,更多相关java输入输出与方法内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论