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:由方法内部返回调用处;