java第三周
数组arrays
一:定义:使用一组有序,而且具有相同数据类型的集合
有序:根据元素得到位置获取该元素
下标:0到数组的长度-1 左开右闭
二:数组和链表的区别
1.内存开辟的时候
数组要求开辟一块连续的内存空间
链表不需要开辟连续内存、
2.项目需求上
项目的重点是增删改:选择链表的方式
项目的重点是查询:选择数组(java用数组用的多)
数组的检索效率高
三:使用数组。
①声明数组
int[] array=new int [5];初始化数组
int array[];
Student[] stus;
②数组的初始化和赋值
第一种方式
array=new int[5];//5就是数组长度
array[0]=20;
array[1]=30;
...
第二种
array=new int[]{1,3,5,7};
int[] arrays=new int[4]{1,3,5,7};//error
第三种
int[] array={1,3,5,7};
int[]arrays;
arrays={1,3,5,7};error不能分开写
数组的长度
array.length
四:数组的练习
1.{12,34,55,10,54,1}求和,求最大值,求平均值?
代码
int[] arrays={12,34,55,10,54,1}; int max=arrays[0]; int sum=arrays[0]; for(int i=1;i<arrays.length;i++){ if(max<arrays[i]){ max=arrays[i]; } sum+=arrays[i]; } System.out.println(max); System.out.println(sum); System.out.println(sum/arrays.length);
2:从一堆电话号码抽取一个幸1运号码
String[] phones={"110","123"}
int a = (int)(Math.random()*(phones.length);
System.out.println.(phones[a])
3引用数据类型数组
Student[]stus=new Student[5];
Student[]stus=new Student[]{
new Student(),
new Studet(1,"zz")
};
五:多维数组
二维数组
1楼 张三 李四
2楼 王五
3楼 赵柳 刘 仁
①二维数组的创建
数据类型[][]数组名;
数组名=new数据库类型[行的个数(行数必须写)][列的个数];
int[][]array=new int[n][];
②赋值
数据类型[][]数组名={
{第0行初值},
{第1行初值},
{第n行初值},
};
可变参数
public int add(int a,int b){
return a+b;
}
public int add1(int a, int b,int c){
return a+b+c;
}
jdk1.5之前用
int...
public int add(int...arrays){
}
可变参数,遵循同一种数据类型,而且参数不能写多个可变参数
改变数组长度
arrays.length=10//error
System.arrayCopy();
arraycopy(Object src,int srcPos,Object dest,int destPos,)int length
第一个objiect src:源数组对象的引用
第二个int srcPos:从源数组拷贝数据的起始位置
第三个 object dest:目标数组对象的引用
第四个int destpos:拷贝数据到目标数组的起始位置
第五个int length: 从源数组拷贝数据的长度
int[] arrays ={1,3,5}
int[]newArrays=new int[];
拷贝从第二个元素开始
System.arraycopy(arrays,0,newArrays,0,arrays.length);
达到扩容的目的
arrays[4]=10
5.使用数组完成银行排队系统
当前的号码是多少?
前面排队的人是多少?
入队
出队
当前队的长度
输出当前队的信息
排序问题
冒泡排序
相邻的两个,两两比较,满足要求则进行互换
从小到大
选择排序
把每次比较的第一个数当做最小数,如果后面找到了比它小的数,则就记录位置,
每一次结束后记录的位置就一定是最下小值
然后将对应的每一轮比较的开始的下标的值进行替换
oop面向对象程序设计
封装:将java类中的属性和方法的具体实现隐藏。对用户不可见,将来提供统一的接口供用户使用Math.random()
对象中的数据称为称为实例域,操作数据的过程称为方法
继承:现实中是多继承 java中是单继承 子类可以继承父类对应的属性和方法 extends
多态:同一个领域不同对象调用相同的的方法表现不同
public class Common{
public void flay(){}
}
public class飞机 extends common{
public void flay(){
烧油
}
}
public class鸟extends common{
public void flay(){
翅膀
}
}
类--对象
类-保存数据,具有相同属性和行为的模板
对象-对类的具体化
**方法**
<modifiers> <return_type> <name>([<argument_list>])
[throws <exception>] {<block>}
修饰符
private public protected default
static final
<return_type>返回值类型
void …
return
方法名
[<argument_list>] 参数列表
[throws ] 抛出异常
block>方法体
public int add(int age){
if(age>10){
return 10;
}
return 5;
}
形参和实参
形参:方法定义的参数
实参:调用方法所传的值
注意
1.调用的方法是否有参数
2.如果有参数要注意参数顺序
3.该方法是否有返回值
参数传递 把实参传递给形参
基本数据类型进行参数传递:传递的是值
引用数据类型进行参数传递:传递的是引用(地址值)
this 代表当前对象
1this用在实例变量上
用来区分实例变量和局部变量
原因是局部变量和全局变量名字一样
this.name=name;
2.用在本类方法上(使用不多)
this.getName()
一般系统默认加上this,不写this也行
2用在调用本类构造器
this()方法
封装
why?避免用户输入
对数据隐藏:
1将属性的修饰符定义为private
2给用户提供一个对应的接口
给属性提供对应的get和set方法
set属性名大写 属性名首字母大写
get属性名
方法的重载
public void add (int a , int b)
public void add (double a, double b)
方法重载的要求
1必须要在同一个类中
2方法名必须相同
3参数列表必须不同
参数个数不同 ||
参数数据类型不同||
参数顺序不同
4返回值可以不同
5抛出异常可以不同
6访问的修饰符可以不同