JAVA_SE_笔记整理(基础四)

Java基础

1、跳转控制语句

break中断

break的使用场景:

在选择结构switch中;

循环语句中;

离开使用场景的存在是没有意义的。

break的作用:

跳出单层循环

跳出多层循环:带标签的break;

 

continue 继续

使用场景:

在循环体语句中;

离开使用场景的存在是没有意义的。

作用:

单层的continue

 

多层的continue

 

return 返回

return关键字不是为了跳转出循环体,更常用的功能是结束一个方法,也就是退出一个方法。跳转到上层调用的方法。这个在方法的使用那里会在详细的讲解。

 

java 方法

1、为什么要有方法:

代码中有很多事情都是相同的,那么代码就没有必要重复填写。而这些相同代码就可以被程序中定义为一个方法。这样的话每次开枪只需调用方法,不需要再粘贴大量代码。

2、方法说明:

在很多语言里面都有函数的定义

函数在Java中被称为方法

3、格式:

修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…) {

方法体;

return 返回值;

     }

方法格式解释:

修饰符:修饰方法的状态;目前只需要用public static

返回值类型:用于限定返回值类型,byte short int long·····

方法名:一个名字,为了方法调用方法。

参数列表:

参数类型:限定调用方法时,传入数据的类型

参数名:是一个变量,接收调用方法时传入的参数。

方法体

完成功能的代码

return:结束方法以及返回方法指定的值

返回值:程序被return带回的结果,返回给调用者。

 

4、注意事项:

方法不调用,不执行。

方法与方法之间是平级关系,不能嵌套定义。

方法定义的时候参数之间用逗号间隔。

方法调用的时候不用传递数据类型

如果方法有明确的返回值,一定要有return 带回一个值。

5、没有返回值的方法定义

修饰符 void 方法名(参数类型 参数名1,参数类型 参数名2…) {

方法体;

// 如果写return,后面直接跟“;”,如果不写,也是可以的。

// return ;

    }

 

6、重载

概述:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。

重载的特点:

与返回值类型无关,只看方法名和参数列表

在调用时,虚拟机通过参数列表的不同来区分同名方法

例如:求和

 

java 数组

1、概述

数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。

数组既可以存储基本数据类型,也可以存储引用数据类型。

2、数组的定义格式

格式1、数据类型[] 数组名;

格式2、数据类型 数组名[];

注意:这两种定义做完了,数组中是没有元素值的。

3、数组元素初始化

数组初始化概述:

Java中的数组必须先初始化,然后才能使用。

所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。

数组初始化的方式:

静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度。

动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。

动态初始化

初始化时只指定数组长度,由系统为数组分配初始值。

格式:

数据类型[] 数组名 = new 数据类型[数组长度];

数组长度其实就是数组中的元素个数。

举例:

int[] array = new int[3];

解释:定义了一个int类型的数组,这个数组可以存放3个int类型的数据。

 

4、内存分配:

Java 程序在运行时,需要在内存中的分配空间。为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。

栈 存储局部变量

堆 存储new出来的东西

方法区 (面向对象部分讲)

  寄存器 (给CPU使用)

 

局部变量:在方法定义中或方法声明上的变量都称为局部变量

每一个new出来的东西都有地址值

每一个变量都有默认值

byte,short,int,long,0

float,double, 0.0

char ‘\u0000’

Boolean false

引用类型 null

使用完毕就变成垃圾,但是并没有立即回收,会在垃圾回收器空闲的时候回收。

5、数组的静态初始:初始化时指定每个数组元素的初始值,由系统决定数组长度。

格式:数据类型[] 数组名 = new 数据类型[]{元素1、元素2、元素…};

举例:

int[] arr = new int[]{1, 2, 3};

解释:定义了一个int类型的数组,这个数组中可以存放3个int‘类型的值,并赋值为1,2,3,

其实这种写法还有一种简化写法

int[] arr = {1, 2, 3};

 

6、数组的属性

数组的length 数组的长度,属于数组对象

7、数组中可能遇见异常

ArrayIndexOutOfBoundsException 数组下标越界

NullPointerException 空指针异常

二维数组

1、二维数组概述

其实二维数组其实就是每一个数组元素为一维数组的数组

2、定义格式一

数据类型[][] 变量名 = new 数据类型[m][n]

m代表这个二维数组有多少个一维数组

n 代表每一个一维数组的元素个数。

 

举例:

int[][] array = new int[3][2];

定义了一个二维数组array

3这个二维数组有3个一维数组,名称是array[0]、array[1]、array[2]

2 每一个一维数组有2个元素,可以通过array[m][n]来获取。array[0][1]

表示获取第m+1个一维数组的第n+1个元素。

3、定义格式二

数据类型[][] 变量名 = new 数据类型[m][];

m表示这个二维数组有多少个一维数组

这一次没有直接给出一维数组的元素个数。可以动态给出。

 

举例:

int[][] array = new int[3][];

array[0] = new int[2];

array[1] = new int[5];

array[2] = new int[4];

4、定义格式三 

静态初始化

数据类型[][] 变量名称 = new 数据类型[][] {

{元素1, 元素2,….},

{元素…},

{元素..}

};

简化版格式:

数据类型[][] 变量名称 = {

{元素1, 元素2,….},

{元素…},

{元素..}

};

 

举例:

int[][] arr = {

{1, 2, 3},

{3, 6},

{123, 345, 678}

};

排序:

http://blog.csdn.net/hguisu/article/details/7776068(八种排序方式,自行学习)

冒泡排序:

基本概述:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。

for(int i = 0; i < array.length; i++) {

for(int j = 0; j < array.length - i - 1; j++) {

if(array[j] < array[j + 1]) {

int temp = array[j];

array[j] = array[j + 1];

array[j + 1] = temp;

}

}

}

插入排序:

每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。

public static void insertsort(int arr[]){                

        for(int i = 1;i < arr.length; i++){

//注意[0,i-1]都是有序的。如果待插入元素比arr[i-1]还大则无需再与[i-1]前面的元素进行比较了,反之则进入if语句

            if(arr[i-1] > arr[i]){

                int temp = arr[i];

                int j;

                for(j = i-1; j >= 0 && arr[j] > temp; j --){                

                        arr[j+1] = arr[j];//把比temp大或相等的元素全部往后移动一个位置            

                }

                arr[j+1] = temp;//把待排序的元素temp插入腾出位置的(j+1)

            }            

        }

        

    }

插入和冒泡排序的区别:

例如:45 12     342   2

对于插入排序来说,进行一趟排序之后就有:   12   45   342 2

而对于冒泡排序,进行一趟排序之后有:       12    45    2  342   

 

杨辉三角:

 

int triangle[][]=new int[20][];// 创建二维数组

// 遍历二维数组的第一层

for (int i = 0; i < triangle.length; i++) {

    triangle[i]=new int[i+1];// 初始化第二层数组的大小

    // 遍历第二层数组

    for(int j=0;j<=i;j++){

        // 将两侧的数组元素赋值为1

        if(i==0||j==0||j==i){

            triangle[i][j]=1;

        }else{// 其他数值通过公式计算

            triangle[i][j]=triangle[i-1][j]+triangle[i-1][j-1];

        }

        System.out.print(triangle[i][j]+"\t");         // 输出数组元素

    }

    System.out.println();               //换行

}

 

阶乘:!n == n*!(n-1);

public static int jc (int n) {

if(n ==1 ){

return 1;

}else{

return n * jc(n-1);

}

}

 

 

斐波那契数列:F[n]=F[n-1]+F[n-2] (n>=2,F[1]=1,F[2]=1)

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368

 

public static int fibonacci(int n){

    if(n<=1)

return 1;

   return fibonacci(n-1)+fibonacci(n-2);

    }

 

排序:

http://blog.csdn.net/hguisu/article/details/7776068(八种排序方式,自行学习)

冒泡排序:

基本概述:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。

for(int i = 0; i < array.length; i++) {

for(int j = 0; j < array.length - i - 1; j++) {

if(array[j] < array[j + 1]) {

int temp = array[j];

array[j] = array[j + 1];

array[j + 1] = temp;

}

}

}

插入排序:

每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。

public static void insertsort(int arr[]){                

        for(int i = 1;i < arr.length; i++){

//注意[0,i-1]都是有序的。如果待插入元素比arr[i-1]还大则无需再与[i-1]前面的元素进行比较了,反之则进入if语句

            if(arr[i-1] > arr[i]){

                int temp = arr[i];

                int j;

                for(j = i-1; j >= 0 && arr[j] > temp; j --){                

                        arr[j+1] = arr[j];//把比temp大或相等的元素全部往后移动一个位置            

                }

                arr[j+1] = temp;//把待排序的元素temp插入腾出位置的(j+1)

            }            

        }

        

    }

插入和冒泡排序的区别:

例如:45 12     342   2

对于插入排序来说,进行一趟排序之后就有:   12   45   342 2

而对于冒泡排序,进行一趟排序之后有:       12    45    2  342   

 

杨辉三角:

 

int triangle[][]=new int[20][];// 创建二维数组

// 遍历二维数组的第一层

for (int i = 0; i < triangle.length; i++) {

    triangle[i]=new int[i+1];// 初始化第二层数组的大小

    // 遍历第二层数组

    for(int j=0;j<=i;j++){

        // 将两侧的数组元素赋值为1

        if(i==0||j==0||j==i){

            triangle[i][j]=1;

        }else{// 其他数值通过公式计算

            triangle[i][j]=triangle[i-1][j]+triangle[i-1][j-1];

        }

        System.out.print(triangle[i][j]+"\t");         // 输出数组元素

    }

    System.out.println();               //换行

}

 

阶乘:!n == n*!(n-1);

public static int jc (int n) {

if(n ==1 ){

return 1;

}else{

return n * jc(n-1);

}

}

 

 

斐波那契数列:F[n]=F[n-1]+F[n-2] (n>=2,F[1]=1,F[2]=1)

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368

 

public static int fibonacci(int n){

    if(n<=1)

return 1;

   return fibonacci(n-1)+fibonacci(n-2);

    }

 

posted @ 2020-04-03 01:07  宋劉戰  阅读(186)  评论(0编辑  收藏  举报