2019-7-1 [JavaSE] 方法调用 成员与局部变量 方法参数传递 引用参数 可变参数 命令行传参

文章目录

  • 1.方法定义
  • 2.成员变量和局部变量的区别
  • 3.带参方法定义
  • 4.方法参数传递
  • 5.引用参数
  • 6.可变参数
  • 7.命令行传参
  • 8.编程:用方法 反转 判偶 阶乘 相加
  • 9.编写:方法 测试手机
  • 10.注意

1.方法定义

2019-7-1 [JavaSE] 方法调用 成员与局部变量 方法参数传递 引用参数 可变参数 命令行传参_第1张图片
一个文件中定义多个类注意:
1.只能有一个类是 public修饰的;
2.主方法所在的类的名字 与文件名一致;
3.通常 主方法所在的类 用public修饰。

举例:

/**
 * 这是一个狮子类
 * @author 郭靖
 * @version 1.0 
 */
class Lion{
	/** 颜色 */
	String color;
	/** 品牌 */
	String brand;
	/** 价格 */
	double price;
	/**
	 * 这是 跑 的功能实现
	 */
	public void run() {
		System.out.println(color + "颜色的"
				+ brand + "品牌的" 
				+ price +"价格的电动狮子在跑");
	}
	/**
	 * 这是 返回声音的方法
	 * @return 得到的是一个字符串 声音
	 */
	public String sound() {
		return "吼声………………";
	}
}
/**
 * 这是一个测试类
 * @author 郭靖
 * @version 1.0
 */
public class TestLion {
	/**
	 * 这是主方法,运行代码
	 * @param args  这是一个字符串数组
	 */
	public static void main(String[] args) {
		Lion lion = new Lion();
		lion.color = "黄色";
		lion.brand = "爱学习";
		lion.price = 55.5;
		lion.run();
		String s = lion.sound();
		System.out.println(s);
	}
}

2.成员变量和局部变量的区别

成员变量:在类中定义的变量。
局部变量:在方法中定义的变量。
区别:1.作用域
成员变量在整个类中都有效;
局部变量 只能在声明它的方法中有效。
2.优先级
成员变量和局部变量同名,在局部变量作用域内优先使用局部变量。
区分: this.成员变量名
3.初始值
局部变量 需要自己初始化后才能使用;
成员变量系统自动初始化。
整数: 0
浮点: 0.0
布尔: false
字符: ‘\u0000’
引用: null
举例:

/**
 * 变量
 */
public class TestDemo {
	//
	int n1 = 11;
	int num;
	public void f1() {
		//
		int n1 = 33;
		//int n2 = 22;
		System.out.println(n1);
		System.out.println(this.n1);
	}
	public void f2() {
		int n2 = 22;
		System.out.println(n1);
		System.out.println(n2);
	}
	public void f3() {
		int n ;
		//n = 44;//显示初始化
//		System.out.println(n);//没有初始化
	}
	public static void main(String[] args) {
		TestDemo test = new TestDemo();
		System.out.println(test.num);
		//System.out.println(test.n1);
//		test.f1();
	}
}

3.带参方法定义

2019-7-1 [JavaSE] 方法调用 成员与局部变量 方法参数传递 引用参数 可变参数 命令行传参_第2张图片
传参:
参数的 个数,类型,顺序要一致。

class Juicer{

	//                       形式参数 (局部变量) 
	public String juicing(String food , String food1) {// String food = "西瓜";
		return food + food1 + "汁";
	}
}
public class TestJuicer {

	public static void main(String[] args) {
		Juicer juicer001 = new Juicer();
		//                           实际参数 (数据)
		String s = juicer001.juicing("西瓜","苹果");
		s = s + "做点心";
		System.out.println(s);
	}

}

4.方法参数传递

1、值类型

2019-7-1 [JavaSE] 方法调用 成员与局部变量 方法参数传递 引用参数 可变参数 命令行传参_第3张图片

public class TestParam {

	public void f1(int n) {// int n = 11;
		n = 22;
	}
	public static void main(String[] args) {
		TestParam test = new TestParam();
		int n = 11;
		test.f1(n);
		System.out.println(n);//11
	}
}

2、引用类型
1)
2019-7-1 [JavaSE] 方法调用 成员与局部变量 方法参数传递 引用参数 可变参数 命令行传参_第4张图片

class Param{
	int value;
}
public class TestParam {
	public void f2(Param p ) {// Param p = p;
		p.value = 22;
	}
	public static void main(String[] args) {
		TestParam test = new TestParam();
		Param p = new Param();
		p.value = 11;
		test.f2(p);
		System.out.println(p.value);//22
		
	}

}

2019-7-1 [JavaSE] 方法调用 成员与局部变量 方法参数传递 引用参数 可变参数 命令行传参_第5张图片

class Param{
	int value;
}
public class TestParam {
	public void f3(Param p ) {// Param p = p;
		p = new Param();
		p.value = 22;
	}
	public static void main(String[] args) {
		TestParam test = new TestParam();
		Param p = new Param();
		p.value = 11;
		test.f3(p);
		System.out.println(p.value);//11
	}

5.引用参数

1)5个数求和

2019-7-1 [JavaSE] 方法调用 成员与局部变量 方法参数传递 引用参数 可变参数 命令行传参_第6张图片

public int sum(int[] arr) {// int [] arr = arr;
		int num = 0;
		for(int i = 0; i < arr.length; i++) {
			num += arr[i];
		}
		return num;
	}
	public static void main(String[] args) {
		TestParam1 test = new TestParam1();
		int [] arr = {1,2,3};
		int num = test.sum(arr);// int 
		System.out.println(num);
	}

2)5个数反转
2019-7-1 [JavaSE] 方法调用 成员与局部变量 方法参数传递 引用参数 可变参数 命令行传参_第7张图片

public int [] reverse(int[]  arr) {
		int [] arr1 = new int[arr.length];
		for(int i = 0,j = arr.length-1; i < arr1.length; i++,j--) {
			arr1[i] = arr[j];
		}
		return arr1;
	}		
	public static void main(String[] args) {
		TestParam1 test = new TestParam1();
		int [] arr = {1,2,3};
		System.out.println(Arrays.toString(test.reverse(arr)));
    }

6.可变参数

2019-7-1 [JavaSE] 方法调用 成员与局部变量 方法参数传递 引用参数 可变参数 命令行传参_第8张图片
语法: …
好处:传递参数灵活
数组参数 和 可变参数 区别:

  1. 可 变参数 传递 可以 是 一个或多个数字,也可以是一个数组;
    数组 参数传递 必须是 数组类型;
  2. 可变参数 只能有一个;
    数组 参数 可以有多个;
    3.可变参数 必须放在最后;
    数组参数 位置任意。
public class TestVarParam {

	public void method(int [] arr) {
		System.out.println(Arrays.toString(arr));
	}
	// ...底层是数组
	public void method1(int ...arr) {
		System.out.println(Arrays.toString(arr));
		System.out.println(arr.length);
	}
	//   可变参数 放在最后
	public  void method2(int n ,int ...arr) {
		
	}
	//  可变参数只能有一个
	public void method2(int ...arr1) {
		
	}
	public static void main(String[] args) {
		TestVarParam test = new TestVarParam();
		int [] arr = {11,22,33};
//		test.method(arr);
//		test.method1(arr);//[11, 22, 33]
//		test.method1(11);//new int[]{11}
//		test.method1(11,22);// new int[]{11,22}
		test.method1();// new int[]{}
	}

}

7.命令行传参

2019-7-1 [JavaSE] 方法调用 成员与局部变量 方法参数传递 引用参数 可变参数 命令行传参_第9张图片
2019-7-1 [JavaSE] 方法调用 成员与局部变量 方法参数传递 引用参数 可变参数 命令行传参_第10张图片

public static void main(String[] args) {
		System.out.println(args.length);
		System.out.println(Arrays.toString(args));
	}

8.编程:用方法 反转 判偶 阶乘 相加

import java.util.Scanner;

class Math1{
	/**
	 * 数字反转
	 * @param n 用户输入一个数字
	 * @return  反转后的数字
	 */
	public int reverse(int n) {
		int num;
		int sum = 0;
		while(n > 0) {
			num = n % 10;// 2345
			
			sum = sum * 10 + num;
			n = n / 10;
		}
		return sum;
	}
	/**
	 * 判断是否是偶数
	 * @param n 数字
	 * @return 是否是偶数,true是
	 */
	public boolean isEven(int n) {
		if(n % 2 == 0) {
			return true;
		}else {
			return false;
		}
	}
	/**
	 * 计算阶乘
	 * @param n 数字
	 * @return  累乘的结果
	 */
	public int fac(int n) {
		int sum = 1;
		for(int i = 1; i <= n; i++) {
			sum *= i;
		}
		return sum;
	}
	/**
	 * 计算两个数字范围的累加和
	 * @param start  起始数字
	 * @param end    终止数字
	 * @return       累加和
	 */
	public int sum(int start ,int end) {
		if(start > end) // 100 ,1
			return 0;
		int sum = 0;
		for(int i = start ; i <= end; i++) {
			sum += i;
		}
		return sum;
	}
}
public class TestMath_exam {

	public static void main(String[] args) {
		Math1 test = new Math1();
		Scanner input = new Scanner(System.in);
		System.out.println("--输入一个数字:");
		int n = input.nextInt();
		System.out.println( test.reverse(n));
		System.out.println("--输入一个数字:");
		n = input.nextInt();
		System.out.println(test.isEven(n));
		System.out.println("--输入一个数字:");
		n = input.nextInt();
		System.out.println(test.fac(n));
		System.out.println("--输入起始位置和终止位置");
		int start = input.nextInt();
		int end = input.nextInt();
		System.out.println(test.sum(start, end));
	}
}

9.编写:方法 测试手机

/**
 * 方法调用
 * */
class Phone{
	//成员变量: 实例成员变量,类域
	String color;
	public String download() {
		return "小苹果";
	}
	public void play() {
		System.out.println(color + "颜色的手机在播放:" + download());
	}
	public void charging() {
		//变量: 局部变量
		Cell cell = new Cell();//装一块电池
		cell.brand = "华为";
		cell.storage();//蓄电
	}
}
class Cell{
	String brand;
	public void storage() {
		System.out.println(brand + "品牌的电池在蓄电");	
	}
}
public class TestPhone_exam {

	public static void main(String[] args) {
		Phone huawei = new Phone();
		huawei.color = "白色";
		huawei.charging();//先充电
		huawei.play();//在播放歌曲
	}
}

10.注意

1.同一个程序包下不能定义同名的类
2.对象放在堆里面,不会被频繁销毁
3.主方法的参数传递,采取命令行参数传递的方式

你可能感兴趣的:(java,Java,学习路线记录)