Java循环结构

1.Scanner从键盘接受不同类型数据的方法罗列

表格中没有接受字符数据的方法,要想接收字符数据可采用以下策略

2.do-while循环注意事项

while语句后需加分号;

根据具体业务需求决定是否选用;

3.for循环注意事项

(1)无论三个表达式是否书写,两个分号都得写;

(2)如果for()中不写第三个表达式n++,那么就必须在循环体内添加n++,以防死循环;(其他两个表达式类似,不写时,应该采用应对策略)

4.三种循环的应用场景(看看就行,有点扯)

(1)for循环:循环次数固定;

(2)while循环:适于不知道循环次数,循环与否===是否满足某个条件

(3)do-while循环:类似while循环,但循环至少被执行一次。

5.嵌套循环,涉及变量的更新和复位

(1)嵌套循环中,对于内外重循环变量,需要注意内重循环变量的更新与 “复位” ;其他在嵌套循环中用到的变量也要注意是否需要复位;

6.break语句和continue语句

(1)break语句只跳一层,即当前循环;

(2)continue语句只在循环结构中使用,且其只针对continue语句所在循环起作用,对外层循环无作用;

(3)由内层循环,直接终止本次外层循环,直接开始下次外层循环:采取什么策略?

(7)eclipse调式快捷键

eclipse工具的调试方式不好玩……拥抱IDEA

(1)F11开启debug

(2)单步调试:F6;

(3)直接运行到下一个断点:F8;

(4)F5:可以进入到方法中去,进行方法的调试

Java一维数组

1.一维数组的创建

public class TestDemo {
 
	public static void main(String[] args) {
		int[] myIntArray = new int[10];
		// 创建数组时,必须同时声明数组长度
		// int myIntArrays[] = new int[10];这种方式也可以,其他语言习惯于将'[]'放在变量名后;
	}
 
}

(1)数组是一种引用数据类型

(2)数组创建后,数组的各元素均会有一个默认值;

int型数组默认值:0;

String:null;(对象类数组元素默认值为null)

2.一维数组的创建并初始化

public class TestDemo {
 
	public static void main(String[] args) {
		int[] myIntArray = {1,2,3,4,5};
		// 声明数组的同时给数组赋值,即初始化数组。此时数组的长度就是初始化元素的个数
		int m = myIntArray[9];
		int arrayLength = myIntArray.length;  // length 是数组对象的表示长度的属性
		myIntArray[1] = 10; // 给数组某个元素赋值
	}
 
}

3.增强型for循环

增强for循环适用于可迭代对象,,,

public class TestDemo {
 
	public static void main(String[] args) {
		int[] myIntArray = {1,2,3,4,5};
		for(int n : myIntArray){   // 遍历数组,变量n以此存储数组元素值
			System.out.println(n);
			}
		}
 
}

根据实际业务场景决定选用普通for循环还是增强for循环;

4.冒泡排序

public class TestDemo {
 
	public static void main(String[] args) {
		int[] myIntArray = {4,5,3,1,6,8,2,10,13,12};
 
        // 外层循环控制趟数;内层循环寻求每一趟的最大值
 
		// 数组共10个元素,需要比较9趟,即0-8共9个数字,代表9趟
		for(int i=0;i<=myIntArray.length-2;i++){   // 第二个表达式写成,i<myIntArray.length-1也行
			// 第一趟需比较10个元素,即比较9次;以此类推,如第2趟需比较9个元素,即比较8次;第9趟,需比较两个元素,即比较1次
			for(int j=0;j< myIntArray.length-1-i;j++){
				// 如i=0即第一趟时,需要取到数组的最后一个元素,myIntArray[9],只需j<9即可,即循环变量取到8即可,
				// 因为内层for循环中有myIntArray[j+1],可以取到myIntArray[9];
				// 以此类推第二次循环,i=1时,即第二趟时,j<8,即j会取到7,for循环内的myIntArray[j+1]会取到8,即最终会比较
				// 0-8共9个元素,比较8次,
				// 以此类推,i最大,即i=8,即第九趟时,j<1,for循环内会取到myIntArray[1],即最终会比较
				// myIntArray[0]和myIntArray[1]两个元素,比较一次,即可。
				// 中间的过程没必要深究,把握整体规律即可
				if(myIntArray[j]>myIntArray[j+1]){
					int temp = myIntArray[j+1];
					myIntArray[j+1] = myIntArray[j];
					myIntArray[j] = temp;
				}
			}
		}
 
		for(int n:myIntArray){
			System.out.println(n);
 
		}
 
		}
 
}

Java二维数组

1.二维数组声明初始化

public class TestDemo {
 
	public static void main(String[] args) {
 
		// 二维数组的声明,一下三种形式均可
		int[][] intArray;
		float[] floatArray[];
		double[] doubleArray[]; //这种方式也可以
 
		// 创建一个数组 (二维数组也有默认值)
		intArray = new int[3][3]; // 第一个'[]'中填写行数,第二个'[]'中填写列数
 
		// 给二维数组的元素赋值
		intArray[1][2] = 9;
 
		//声明数组的同时进行创建
		char[][] ch= new char[3][5];
 
		// 创建数组的同时,只指定行数。new float[][];和new float[][3];这两种写法错误
		floatArray = new float[3][];
		// 此时,若取 floatArray[2][1],会报空指针异常。
		/**
		 * 一个行数为3的二维数组可以认为由3个一维数组组成,对于floatArray[2][1],其floatArray[2]可以代表该二维
		 * 数组的第三个一维数组,因为其三个一维数组均未被初始化,所以上面会报空指针异常。
		 * 解决方案如下:
		 */
		floatArray[0] = new float[3];    // 第一行有3列
		floatArray[1] = new float[4];    // 第二行有4列
		floatArray[2] = new float[5];    // 第三行有5列
		// 此时,二维数组中的每一个元素都已经被默认初始化了,再进行 floatArray[2][1]便不会有空指针异常了
		}
 
}

(1)二维数组初始化时,行数一定要有,列数可有可没有;

(2)二维数组初始化,一定要 二次初始化 ,否则会空指针异常

注:根据以往经验,二维数组使用的并不多

2.二维数组,直接初始化,取值

public class TestDemo {
 
	public static void main(String[] args) {
		int[][] num = {{1,2,3},{4,5},{6,7,8,9}};
 
		// num.length:二维数组的行数
		for(int i=0;i<num.length;i++){
 
			// num[i].length:二维数组第i-1行的列数
			for(int j=0;j<num[i].length;j++){
				System.out.print(num[i][j]+" ");
			}
			System.out.println();
		}
	}
 
}

Java日常总结构造方法

1.构造方法需要写出来,无参构造必须要写

(1)构造方法建议写出来,不建议使用默认的;

(2) 无参构造必须要写出来 ,有参构造也要写出来(如果有参构造有必要的话);

2.get、set方法中添加其它逻辑

(1)get和set方法中,除了给成员属性赋值和取值外,是否需要添加其他逻辑(如,值判断逻辑等),需要看具体需求;

(2)如果get和set方法中除了有赋值和取值逻辑,还有其他其他逻辑,那么,推荐在构造方法中,通过this.get/set()的形式操作属性,以免初始化对象的过程中错失验证过程

3.bean类,需要提供一个返回所有成员属性信息的方法,这不是必须,是习惯

(1)bean类,除了必须的get和set方法外,尽量提供一个可返回所有成员属性信息的方法;

4.equals()方法注意事项

equals()方法注意事项:字符串比较时,一般将“skfjksd”放在外边,字符串变量放在equals方法的()中,这样可以防止出现null.equlas()的情况;

equals()方法的底层细节还不明确~~~

5.方法也可以适当添加文档注释

用@***的方式

Java方法

1.方法分类罗列

无参无返回值、无参有返回值、有参无返回值、 有参有返回值;

没什么需要记录的东西……

Tips:

(1)有返回值的方法必须正确地接收;(注意:红框中没有报错)

(2)具体把那些业务实现浓缩成一个方法,这个度,需要在工作中慢慢体味;

2.main方法的参数

(1)main方法以数组作为方法参数,又叫命令行参数。命令行参数可以在执行Java程序时接收 字符串 类型的数据;

(2)这儿目前暂时没有感觉到有什么作用;

如以下程序,分别演示【直接运行】和【通过eclipse运行】,这两种方式给main方法传递参数

public class TestDemo {
 
	public static void main(String[] args) {
		// 从命令行接受的数组参数,其元素是字符串类型,所以这儿需要转为整形
		int num1 = Integer.parseInt(args[0]);
		int num2 = Integer.parseInt(args[1]);
		int sum = num1 + num2;
		System.out.println(sum);
 
	}
 
}

直接运行:

通过Eclipse运行:

3.方法重载

(1)定义:方法名相同,参数列表不同;

(2)调用方法时,根据参数列表的匹配,去决定具体调用哪一个方法;

4.方法传值过程中变量值的变化,这儿以int类型变量为例

int变量为基本数据类型,调用方法时,只是把变量的值赋给了add方法的形参;在该过程中,主方法中的变量值并未改变;

但需要注意,如果是传的是数组、对象等引用数据类型呐?

发现,和int类型的情况不同,当参数是引用类型的数组时,主方法中的数组变量值改变了;

数组a1指向的是数组第一个元素的内存地址,当调用updateArray()方法时,程序将a1的值复制给了该方法的形参变量a,即此时a变量的值也是数组第一个元素的内存地址,即对a所对应变量的更改也是对a1所应对应变量的更改。(其他引用数据类型,如对象也是这种情况)

5.可变参数

(1)可变参数好像用到的并不多,这儿了解一下便可;

(2)可变参数的参数可以为0个

(3)一个方法中只能有一个可变参数;

(4)可变参数的使用方法

public class TestTemp {
 
	public int sum(int... n){  // 可变参数列表,书写规则。只有一个参数,这个参数是可变参数
		int sum = 0;
		for(int i:n){
			sum = sum + i;
		}
		return sum;
	}
	public static void main(String[] args) {
		TestTemp testDemo = new TestTemp();
		System.out.println(testDemo.sum(1));
		System.out.println(testDemo.sum(1,2));
		System.out.println(testDemo.sum(1,2,3));
	}
}

结果:这里的 n的作用其实就是类似于一个数组 ,把传入的参数保存到数组里面去。 实际取值的时候也可按照数组的方式去取:

1
3
6

​ ​

package com.test;
 
public class TestTemp {
 
	public int sum(int m,int... n){  // 可变参数列表,书写规则。只有一个参数,这个参数是可变参数
		return m + n[1];
	}
	public static void main(String[] args) {
		TestTemp testDemo = new TestTemp();
		System.out.println(testDemo.sum(1,2,3));
	}
}

结果:

4

(4,补):

package com.test;
 
public class TestTemp {
 
	public int sum(int p,int q,int... n){  // 可变参数列表,书写规则。只有一个参数,这个参数是可变参数
		int sum = 0;
		for(int i:n){
			sum = sum + i;
		}
		return sum+p+q;
	}
	public static void main(String[] args) {
		TestTemp testDemo = new TestTemp();
		System.out.println(testDemo.sum(1,2));
		System.out.println(testDemo.sum(1,2,3));
		System.out.println(testDemo.sum(1,2,3,4));
	}
}

结果:

3
6
10

(5)多个参数的情况下:可变参数必须在最后。

(6)注意下数组:可变参数列表和数组关联。(PS:可变参数的底层实现就是数组)

(这个当然是这样,没必要着重点出)

(7)当涉及到方法重载时,用到可变参数的方法被调用顺序是靠后的

6.文档注释

对类的信息说明、功能描述;方便生成帮助文档Api

以一下程序为例,演示帮助文档过程(了解就行,目前没必要深究):

/**
 * test help statements
 * @author Administrator
 * @version1.0
 */
public class TestDemo {
 
	public void sum(int m,int... n){
		int sum = 0;
		for(int i:n){
			sum = sum + i;
		}
		System.out.println("方法。");
	}
 
	public static void main(String[] args) {
		TestDemo testDemo = new TestDemo();
		testDemo.sum(1);
	}
 
}

通过以下命令生成:用到了 javadoc命令

然后,会发现在TestDemo.java文件所在目录下生成了:doc文件夹

进入doc文件夹,打开其中的一个叫index.html的文件即可

便会看到这样的东西

7.eclipse工具方法的调试

知道这些快捷键就行,后续得在实践中巩固(PS:拥抱IDEA(☆_☆)/~~ )

F5:进入方法调试;

F7:由方法内部返回调用处;