学习007---Java方法method
method
注:本系列学习自狂神说(Java):
当前的目标是建造自己的网页!
俺的博客:startsmaple
方法类似于其他语言里的函数
语法
修饰符 返回值类型 方法名(参数类型 参数名){
。。。
方法体
return 返回值;
}
package com.starsmaple.method;
public class Demo01 {
//main 方法
public static void main(String[] args) {
int sum = add(1,2);//调用
System.out.println(sum);
test();
}
//加法
public static int add(int a,int b){
return a+b;
}
public static void test(){
for (int i = 0; i < 1000; i++) {
if (i%5 == 0) {
System.out.print(i + "\t");
}
if (i%(5*3) == 0){
System.out.println();
}
}
}
}
package com.starsmaple.method;
public class Demo02 {
public static void main(String[] args){
int max1 = max(10,20);//返回值int
double max2 = max(10,30);//返回值double
System.out.println(max1);
System.out.println(max2);
}
//方法重载:相同函数名称,参数不同(个数,类型,排列顺序
//比大小
public static int max(int num1,int num2){
int result = 0;
if(num1==num2)
{
System.out.println("num1 = num2");
return 0;//终止方法
}
if(num1>num2){
result = num1;
}else{
return num2;
}
return result;
}
public static double max(double num1,double num2){
double result = 0;
if(num1==num2)
{
System.out.println("num1 = num2");
return 0;//终止方法
}
if(num1>num2){
result = num1;
}else{
return num2;
}
return result;
}
}
java是值传递
- 对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量.
- (引用传递)对非基本类型变量而言的,传递的是该对象地址的一个副本, 并不是原对象本身 。
int a = 10;
String str = "helloworld"
package com.starsmaple.method;
import java.util.Arrays;
public class test {
public static void main(String[] args) {
int i = 10;
int[] arr ={10,20,30};
String str = "helloworld";
change(i,arr,str);
System.out.println(i);//10
System.out.println(Arrays.oString(arr));//[10 20 30]
System.out.println(str);//helloworld
}
public static void change(int i,int[] arr,String str){
i = 100;
arr = new int[]{100,200,300};
str = "rnmmsr";
}
}
Java中在方法里的赋值都是对副本的修改,即方法新定义了一个变量,用来接收你传进去的值,而你修改时都是修改这个新定义的变量
可以使用StringBuilder.append()直接修改地址里的值
public class test {
private static final Logger logger = LoggerFactory.getLogger(test.class);
public static void main(String[] args) {
StringBuilder number = new StringBuilder("111");
StringBuilder number01 = new StringBuilder("111");
change(number, number01);
System.out.println("number:" + number); // 改变
System.out.println("number01:" + number01); // 不变
}
public static void change(StringBuilder number, StringBuilder number01) {
number.append("222"); // 对象的地址值不变,但是会在原地址值上改变对应的内容
number01 = new StringBuilder("222"); // 创建了新的对象
}
}
方法重载
目的:相同名称可以放入不同类型的数据处理
如:相同的比较大小函数max(),传入int类型数值和传入double类型时调用的函数不一样
ge com.starsmaple.method;
public class Demo02 {
public static void main(String[] args){
int max1 = max(10,20);//返回值int
double max2 = max(10,30);//返回值double
System.out.println(max1);
System.out.println(max2);
}
//方法重载:相同函数名称,参数不同(个数,类型,排列顺序
//比大小
public static int max(int num1,int num2){
int result = 0;
if(num1==num2)
{
System.out.println("num1 = num2");
return 0;//终止方法
}
if(num1>num2){
result = num1;
}else{
return num2;
}
return result;
}
public static double max(double num1,double num2){
double result = 0;
if(num1==num2)
{
System.out.println("num1 = num2");
return 0;//终止方法
}
if(num1>num2){
result = num1;
}else{
return num2;
}
return result;
}
}
命令行传参
package com.starsmaple.method;
public class Demo03 {
//命令行传参
public static void main(String[] args) {
for (int i = 0; i < args.length; i++) {
System.out.println("args[" + i + "]: "+ args[i]);
}
}
}
- 打开当前文件夹
- 退到src目录
- 运行并传递参数!
可变参数
本质即数组
也叫不定项参数(从JDK1.5)
package com.starsmaple.method;
public class Demo04 {
//可变参数
public static void main(String[] args) {
Demo04 demo04 = new Demo04();
demo04.test(1,2,3,4,5,25);
printMax(32,23,5,6,7);
}
public void test(int... i){
System.out.println(i[0]);
System.out.println(i[1]);
System.out.println(i[2]);
System.out.println(i[3]);
System.out.println(i[4]);
}
public static void printMax(double... numbers){
if (numbers.length == 0){
System.out.println("No argument passed");
return;
}
//求最大值
double result = numbers[0];
for(int i = 1;i< numbers.length;i++){
if(numbers[i]>result){
result = numbers[i];
}
}
System.out.println("The max value is "+result);
}
}
递归
A方法内部调用 A方法
- 递归头:什么时候不调用自身方法,如果没有头,会进入死循环
- 递归体:什么时候需要调用自身方法
package com.starsmaple.method;
public class Demo05 {
//递归
//递归头:什么时候不调用自身方法,如果没有头,会进入死循环
//递归体:什么时候需要调用自身方法
//死循环,千万别这么做
public static void main(String[] args) {
Demo05 test = new Demo05();
test.test();
}
public void test(){
test();
}
}
应用:计算阶乘
package com.starsmaple.method;
public class Demo06 {
//计算阶乘
public static void main(String[] args) {
int x = f(7);
System.out.println(x);
}
public static int f(int n){
if(n==1)
return 1;
else
return n*f(n-1);
}
}
图解