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;
三、函数(方法)
定义:将能够实现某种功能的代码块封装在一起
作用:复用性
-
无参函数
权限修饰符 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修饰的变量和方法
静态方法的生命周期 是随着类的加载而产生