1.冒泡排序
特点:是相邻的两个元素进行比较
需要使用双重循环来实现。
16,25,9,90,23
第一趟:
25,16,9,90,23
25,16,9,90,23
25,16,90,9,23
25,16,90,23,9
第二趟:
25,16,90,23,9
25,90,16,23,9
25,90,23,16,9
第三趟:
90,25,23,16,9
90,25,23,16,9
第四趟:
90,25,23,16,9
外层循环用来控制比较的趟数
内层循环用来控制每趟比较的次数
外层循环和内层循环的终值的设定可通过以下口决来记忆:
两个数字来排队,
两两相比小靠前,(升序)
外层循环n-1,

内层循环n-1-i(n指数组长度)

//16,25,9,90,23 
         
 int[] numbers={16,25,9,90,23}; 
         
System.out.println("排序前:"); 
         
 for(int i=0;i<numbers.length;i++){ 
             
 System.out.println(numbers[i]); 
         
} 
         
//排序: 
         
int temp=0;//定义一个临时中间变量 
         
   
  for(int i=0;i<numbers.length-1;i++){ 
             
for(int j=0;j<numbers.length-1-i;j++){ 
                 
if(numbers[j]<numbers[j+1]){ 
                     
temp=numbers[j]; 
                     
numbers[j]=numbers[j+1]; 
                     
numbers[j+1]=temp; 
                 
  
} 
             
} 
         
  
} 
         
System.out.println("排序后:"); 
         
for(int i=0;i<numbers.length;i++){ 
             
System.out.println(numbers[i]); 
         
 }



2.选择排序:


特点:是拿剩余的数和目标数据进行比较


比较一趟会选择出一个最小数。


优化之后,只需要在每趟中找到改趟最小数的位置并记录下来


当改趟比完之后,最多进行一次数据交换。

//选择排序的优化 
         
for(int i=0;i<numbers.length-1;i++){ 
             
 int min=i; 
             
for(int j=i+1;j<numbers.length;j++){ 
                 
if(numbers[j]<numbers[min]){ 
                     
min=j; 
                 
} 
             
} 
             
if(min!=i){ 
                 
temp=numbers[i]; 
                 
numbers[i]=numbers[min]; 
                 
numbers[min]=temp; 
             
} 
         
}

其它的排序算法可以了解:希尔排序,插入排序,堆排序。


值类型(基本数据类型):


在内存中分配的存储空间在栈区中


通过变量名直接访问到的就是数据本身


数组(引用类型):


引用类型在内存中栈区里保存的是地址(引用),而数据则存储在地址(引用)所标识的堆区里。

二维数组:

java当中的二维数组可以看成是多个一维数组,在对二维数组数据的存放方式上实际是多个连续的一维数组。
二维数的声明:
声明同时设定行数和列数
int[][] datas=new int[3][4];
声明同时给数组元素赋值
int[][] datas={{1,2,,3},{4,5,6},{7,8,9}};
还支持只给定二维数组的行数的方式来声明二维数组,然后再分别指定每一个数组的长度。
int[][] datas=new int[3][];
datas[0]=new int[2];
datas[1]=new int[3];
datas[2]=new int[2];

同时也支持以下方式在声明的同时赋值:
int[][] datas={{2,3},{,4,5,6},{,7,8,9,10}};
在对二维数进行访问时需要用双重循环
外层循环控制行数,内层循环控制每行个数:

public class TestArrays3 {
     public static void main(String[] args) {
         int[][] datas={{1,2},{3,4,5},{6,7,8,9}};
         for(int i=0;i<datas.length;i++){
             for(int j=0;j<datas[i].length;j++){
                 System.out.print(datas[i][j]+"\t");
             }
             System.out.println();
         }
     }
}




类:是一个概念,是一个模型,是一组具有相同属性和形为的对象的抽象。
对象:对象是类的一个实体,是实实在在能够看得见摸得到的一个实例。
对象的实例化:
类名 对象名=new 类名(); 
对象名.属性1=值1;
对象名.方法名();
基本数据型和引用数据类型的区别:

基本数据型通过变量访问到就是变量标识内存数据。
引用数据类型通过标识的名称访问到的是所引用的对象的地址。
通过标识符名.属性来访问对象的属性。
通过标识符名.方法名()的形式来调用对象的方法。
成员变量:
定义在类的内部,该类的所有的方法都可以访问,系统会为成员变量自动根据数据类型赋初值。
局部变量:
定义在方法内部,或方法内的某个代码块儿里。局部变量只能被定义它的方法或代码块儿访问,并且系统不会自动为局部变量赋初值,因此在使用之前必须要为局部变量赋值。
方法的定义:
1.无参方法
访问修饰符 返回值类型 方法名(){
  //方法体
}
带有返回值方法在调用的时候通常可以放在一个赋值表达式中,或者一个输出语句中。
带有返回值的方法,在方法体中要有和返回值类型相匹配的返回结果。
不带返回值的方法在调用时通常都是一个独立的调用语语,因为没有返回值,所以不能对结果赋值。在方法体中如果要使用return,则return语句后什么也不跟。
2.带参方法的定义
访问修饰符 返回值类型 方法名(数据类型 参数1,数据类型 参数2......){
   //方法体
}
a.在调用带有参数的方法时,方法调用处的参数称为实际参数,需要携带实际值。方法定义时的参数称为形式参数,主要限定参数的类型,个数,顺序。

实际参数的类型,个数,和顺序要和形式参数一一对应。
b.当方法的参数是一个对象类型的数组时,要注意实际参数数组的创建,以及数组中每一个元素的实例化,否则程序执行过程中有可能引发空指针异常。