Java基础2


(补充前面的for循环 ()里面的执行顺序  eg i=0;i>n;然后执行方法体 最后回来执行 i++)

一、数组

定义:将具有相同数据类型的数据集中在一个容器中,这个容器就称为数组。

数组的声明方式:

1、int[]arr={};

   int arr1[]={};//创建长度为0的空数组

2、int [] arr2={1,2,3}//创建长度为三的数组并对每个元素进行初始化

3、int [] arr3=new int[5];//创建长度为5的空数组

4、int [] arr4=new int[]{1,2,3,4,5};//创建长度为5的数组并赋值

备注:[]他的位置可以在数据类型后也可以在数组名后。

1.1如何操作数组

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

用length属性来获取arr的数组长度 arr.length 4

通过下标来操作数组具体元素。数组的下标从0开始,即arr[0]代表第一个元素,arr[arr.length-1]代表最后一个元素

1.2数组中的注意事项

1、数组只能存放相同的数据类型

2、数组长度一旦固定就不能发生改变

3、下标操作数组,一旦超过数组下标就会报数组越界异常

4、数组具有默认值

  整数类型:0

  浮点类型:0.0

  字符类型:\u0000

  布尔类型:false

  字符串类型:null

1.3 数组中对数组长度进行操作:

扩容和缩容来对其进行操作

扩容:对原数组长度进行扩展

缩容:对原数组长度进行缩减

Arrays.copyOf(数组名,长度);数组名是指对那个数组进行操作 长度是比原来大就是扩容 比原来小就是缩容

备注:不管你是扩容还是缩容,原数组都不会发生改变,

只是将数组的引用指向原有数组,此时会在内存中开辟新的

存储空间存储数据。

1.4 数组的复制

Systeam.arrarycopy(src,srcIndex,des,desIndex,length);

src是从那个数组复制

srcIndex是从数组的哪个位置开始复制

des 复制的内容往哪个数组添加   目标数组

desIndex是从目标数组的那个位置开始复制

length 是复制数组的长度

备注:因为数组的长度一旦确定之后将不能发生改变,所以你在复制的时候注意不要超过目标数组的长度。

1.5 遍历数组

通过for循环

选择排序和插入排序自己搜

冒泡排序算法(

比较相邻的元素。如果第一个比第二个大,就交换他们两个。 

对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 

针对所有的元素重复以上的步骤,除了最后一个。

持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较

eg:

int[] arr={3,5,2,1,4} =={1,2,3,4,5}

规律:比较的轮数比数组的长度少1,轮数每增加1次,比较的次数就减少1次。

   for(int i=0;i轮数

     for(int j=0;j次数

           if(arr[j]>arr[j+1]){

           //进入到这换位置

           int temp=arr[j];

   arr[j]=arr[j+1];

   arr[j+1]=temp;

  }

二、随机数

1、Math.random();

随机生成一个0.0~1.0之间分随机浮点数,前包括后不包括

随机生成一个m~n的数 (int)Math.random()*(n-m)+m;

2、Random r=new Random;

r.nextInt(参数);

随机生成指定区间的整数m~n: r.nextInt(n-m)+m;

 

三、函数(方法)

定义:将能够实现某种功能的代码块封装在一起

作用:复用性

  1. 无参函数

   权限修饰符 static 返回值类型 方法名( ){

     方法体;

例: public  static  int  sum(){

    int  a=4;

    int b=3;

  System.out.println(a+b);

调用方法:  方法名();

       sum();

  2. 有参函数

 权限修饰符 static 返回值类型 方法名( 参数列表){

     方法体;

例: public  static  int  sum(int a,int b){

System.out.println(a+b);

调用方法:  方法名(传入实参);

       sum(3,4);

备注:函数如果没有返回值,则用void来表示,如果有返回值,则用相应的类型来返回,此时方法体中得用return关键字来进行返回结果。

return作用:将程序运行结果返回给调用该方法的变量,终止方法继续执行。

   3、方法的重载和重写

重载:方法名相同 参数列表 参数类型 都不相同、 

重写:方法名相同  参数列表 参数类型都不相同 只有方法体不同。且只能发生在继承关系中

四、面向对象

4.1

面向过程:所有的事情都是自己做

面向对象:不是所有的事情都是自己做、

两者的区别:从事情的执行者变为事情的决策者

4.2 类,引用,对象三者的联系:

类:用来描述事物特征及行为的一种抽象概念。(关键字 class)

引用:用来指向创建对象,对其里面的方法和行为进行操作

对象:实例化个体

创建对象:

类  引用=new 类;

备注: 成员变量和数组一样,数据类型具有默认值,参照数组的默认值。

五、构造函数

无参构造、有参构造

无参:

  语法 public 类名(){

    方法体;

有参:

  语法 public 类名(参数列表){

    方法体;

}

备注:构造函数和普通函数的区别:

1、构造函数没有返回值也没有void

2、方法名必须和类名一致

构造函数的作用: 方便初始化对象中的成员变量

备注:如果一个类中没有构造函数,系统会默认添加一个无参构造函数(没有有参构造函数的前提下),如果存在有参构造函数,那么你不写无参构造函数,

系统不会默认添加无参构造函数,需要我们手动添加无参构造函数

构造函数中的this关键字:

  作用:1、用于区分成员变量和局部边量

     2、可以用来相互调用构造函数(无参调有参,有参调无参)只能写在构造函数的首行,切两个不能同时存在

六、成员变量和局部变量的区别

成员变量:在类中声明的变量

局部变量:在方法中声明的变量

两者的区别:

  1、存储位置:成员变量存放在堆中 局部变量存放在栈中;  

  2、生命周期:成员变量随着对象的存在而存在,局部变量是随着方法的加载而加载 结束而结束;

七、存储机制

栈内存:放的是基本数据类型的值,引用类型

堆内存:放的对象本身还有局部变量

方法区:static修饰的变量和方法

静态方法的生命周期 是随着类的加载而产生