java基础(一)

之前在校学习java,学习各种框架,虽然学到了很多,但是长时间没有复习,多数知识有点遗忘了。近期假期在家无聊,打算将java系统的复习一遍,复习的过程中,发现了一些以前没有在意过,却实实在在存在的知识点,因为在写项目或平时的程序代码中几乎没有用到过,反而觉得很有意思。因此打算边复习边整理,本文不针对所有的java基础知识,而是对日常少见、缺乏思考、或疑难知识的探讨。

1.可变参数列表

1)demo1: 以求和为例

package com.susu;

public class ArgsDemo {
	//求和
	public void sum(int...n) {
		//使用增强for循环
		int sum = 0;
		for(int a:n) {
			sum +=a; 
		}
		System.out.println("sum="+sum);
	}
	public static void main(String[] args) {
		ArgsDemo argsDemo = new ArgsDemo();
		argsDemo.sum(1);   //1个参数
		argsDemo.sum(1,2);  //2个参数
		argsDemo.sum(1,2,3);  //多个参数
	}
}

 2)demo2: 以查找为例

注:a.可变参数列表可以与数组进行兼容,即可以把数组传递给可变参数列表(如以下代码中,方法2)

       b. 以下代码,会认为当前的两个search方法重复定义,而不是重载。会报错
    /*public void search(int a1, int[] a) {
        //数组作为参数时,是不能将多个值传递给数组的。
        //即在主方法中,argsDemo1.search(2,1,2,3,4,)就会报错了
    }*/

      c.一个方法中只能有一个可变参数。

package com.susu;

public class ArgsDemo1 {
	//查找
	public void search(int a1, int... a) {   //可变参数放到最后一个位置,否则报错
		boolean flag = false; //默认没有找到
		//使用增强for循环
		for(int n:a) {
			if(a1==n) {
				flag = true;
				break;
			}
		}
		if(flag) {
			System.out.println("已经找到");
		}else {
			System.out.println("没有找到");
		}
	}

    //注:以下代码,会认为当前的两个search方法重复定义,而不是重载。会报错
	/*public void search(int a1, int[] a) {
		//数组作为参数时,是不能将多个值传递给数组的。
		//即在主方法中,argsDemo1.search(2,1,2,3,4,)就会报错了
	}*/

	public static void main(String[] args) {
		ArgsDemo1 argsDemo1 = new ArgsDemo1();
		//方法一:输入多个参数
		argsDemo1.search(2, 1,2,3,4);   //控制台:已经找到
		//方法二:将多个参数看作一个数组
		int[] arr = {1,2,3,4};
		argsDemo1.search(2, arr);       //控制台:已经找到
	}
}

2.调试

1)debug中,设置断点,按F6 可以进行单步调试。

2)按F5可以跳到方法内部执行,结合F6单步执行。

3)F7作用:由方法内部返回调用处。如:按F5跳到方法内部,F6单步执行。如果此时方法中语句较长,想要跳到主方法中,按F7。

ps: 大家可任意选择程序进行调试,程序中最好包含主方法和普通方法,熟悉调试按键,感受调试流程。


3.方法的传值问题

1)基本数据类型传值

方法中对参数的修改,会对主方法中传来的数组产生影响

2)引用数据类型传值

方法中对数组的改变,会影响主方法中传来的数组

下面用三个例子进行演示:

eg. demo1: 方法中对a,b值有交换,可是主方法中没有。==》普通变量传值,传递的只是值,不是变量的地址

   m,n只是传值给a和b, a和b所作的操作与m,n无关。

package com.susu;

public class ExchangeDemo {
	//交换方法
	public void swap(int a,int b) {
		int temp;
		System.out.println("交换前:a="+a+",b="+b);
		temp = a; 
		a = b;
		b = temp;
		System.out.println("交换后:a="+a+",b="+b);
	}
	public static void main(String[] args) {
		int m= 4, n=3;
		ExchangeDemo ed = new ExchangeDemo();
		System.out.println("交换前:m="+m+",n="+n);
		ed.swap(m, n);
		System.out.println("交换后:m="+m+",n="+n);
	}
	/**
	 * 控制台输出
	 * 交换前:m=4,n=3
		交换前:a=4,b=3
		交换后:a=3,b=4
	    交换后:m=4,n=3
	 */
}

eg. demo2: n的值在方法内部发生改变,主方法中的n值没有改变。

package com.susu;

public class ExchangeDemo1 {
	public void add(int n) {
		n++;
		System.out.println("方法中n="+n);
	}
	public static void main(String[] args) {
		int n = 10;
		System.out.println("方法调用前n的值"+n);
		ExchangeDemo1 ed1 = new ExchangeDemo1();
		ed1.add(n);
		System.out.println("方法调用后n的值:"+n);
		/**控制台输出:
		 * 方法调用前n的值10
			方法中n=11
		    方法调用后n的值:10
		 */
	}
}

eg. demo3: 数组作为方法参数的传值问题

    调用方法进行数组传值的时候,是把方法中的参数,即名字为a的数组,也指向了a1数组的第一个元素1,所以此时a和a1数组指向了同一片内存空间,即指向了同一个数组,所以当在方法中对数组中的某个元素值进行修改的时候,也影响到了主方法中a1数组。最终最后的结果是:两个数组中的值都进行了影响。

(ps:大家要区分普通变量传值和数组传值的不同,数组是引用数据类型。包括后面我们将学习的面向对象当中:对象作为方法参数时,也会对对象内容进行影响。因为对象是用类来声明,本身也属于引用数据类型。)

package com.susu;

public class ArrayDemo {
	//定义一个用于修改某个数组元素值的方法
	public void updateArray(int[] a) {
		a[3] = 15;
		System.out.println("数组a的元素为:");
		for(int n:a) {
			System.out.print(n+" ");
		}
		System.out.println();
	}
    public static void main(String[] args) {
		ArrayDemo ad = new ArrayDemo();
		int[] a1 = {1,2,3,4,5};
		System.out.println("方法调用前数组a1的元素为:");
		for(int n:a1) {
			System.out.print(n+" ");
		}
		System.out.println();
		ad.updateArray(a1);
		System.out.println("方法调用后数组a1的元素为:");
		for(int n:a1) {
			System.out.print(n+" ");
		}
//		控制台的输出:
//		方法调用前数组a1的元素为:
//		1 2 3 4 5 
//		数组a的元素为:
//		1 2 3 15 5 
//		方法调用后数组a1的元素为:
//		1 2 3 15 5 
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值