数组:
基本数据类型 java只有8种
引用数据类型
一维数组:
类型[] 数组名 = new 类型[数组长度];
类型[] 数组名 = {v1,…};
类型[] 数组名 = new 类型[]{v1,v2,…};
下标:从0开始,到数组长度-1
数组名[下标] 访问数组里的元素
数组长度: 数组名.length
for(int i=0;i<数组名.length;i++){
数组名[i]
}
二维数组:
类型[][] 数组名 = new 类型[二维数组长度][一维数组长度];
int[][] crr = new int[3][4];
当访问一个没有引用具体对象的引用变量时将引发以下异常:
java.lang.NullPointerException
练习:
要保存杨辉三角形的前7行
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
练习:
有4个班级
5个学生
6个学生
7个学生
9个学生
控制台输入 保存这些学生的成绩
找出每一个班的最高成绩 以及 所有班级里成绩最高的
39题 约瑟夫问题:
有n个编号(1-n)小孩围成一圈,从第1个小孩开始依次进行重复报数 1-3
报到3数字的小孩出列,求最后剩下的那个小孩子的编号
Arrays.toString();
数组名.length
数组名.copyOf(数名,数组长度);
System.arrayCopyOf(src,srcPos,dest,destPos,length);
方法 函数 过程
封装了一段逻辑代码或者实现特定的功能
方法可以重复被调用 增加了代码的复用 提升开发效率
方法五要素:
修饰词 返回值类型 方法名(参数列表){
//方法体
return xx;//返回结果给调用者
}
//main函数
public static void main(String[] args){
}
修饰词:public static
返回值类型: void 表示该函数没有返回值
返回所要求的结果
方法名: main
参数列表: String[] args 提高代码的灵活性
方法体
求一个数组里面元素的最大值
不想起床
室友去吃早餐 让室友帮忙买早餐
函数调用
给室友钱 参数
返回值
自定义函数
练习:
1. 写函数求数列的第n项目结果
1 1 2 3 5 8 13 ...
2. 写函数求一个数组里面元素的平均值
3. 写函数输出杨辉三角形的前n行
4. 求两个整数的最大公约数
5. 写一个函数,把两个递增的数组元素进行合并之后并保持递增
1 3 5 9
2 3 4 6 7 8
1 2 3 3 4 5 6 7 8 9
6. 写一个递归函数 判断一个数组是否是严格递增的数组
把一头大象装进冰箱
面向过程
1.打开冰箱门
2.把大象装进冰箱
3.关闭冰箱门
把解决问题的步骤封装成若干个方法,然后依次调用这些方法
面向对象
1.生产一头大象
2.生产一台冰箱 具有功能:把大象装进冰箱
大象 冰箱
世界万物皆对象
类: 是描述一类事物的特征 泛指 抽象的概念
对象: 是类实例化和具体化的结果 特指 具体的事物
10几个对象
学生类的对象
人类的对象
男人类的对象 /女人类的对象
怎么描述一类事物的行为特征
属性:变量
行为:方法
用变量来记录事物的特征,用方法来描述事物的行为
人
属性:身高 体重 性别 年龄 ...
行为:吃饭 睡觉 学习 谈恋爱
写一圆类
属性: 半径
行为: 求面积 求周长
创建两个圆,分别求面积和周长
定义类:
位置: 在.java文件中定义类
修饰词 class 类名{
//属性
类型 标识符;
//方法 成员方法
修饰词 返回值类型 方法名(参数列表){
//方法体
}
}
实例化对象 创建对象:
new 类名();
声明引用变量 让这个引用变量 引用对象
Circle c; //创建一个引用变量
c = new Circle(); //实例化对象 c引用变量引用这个对象
基本数据类型: 值直接存储在变量里面
引用数据类型: 引用变量存储的是对象的地址信息
数组是引用数据类型
new int[3];
new Random()
new Scanner(System.in);
通过引用变量可以操作对象
引用变量.属性名
引用变量.方法名(参数列表);
实例化对象时 成员属性默认初始化
byte short int long 0
boolean false
char '\u0000' 空格
float double 0.0
引用变量 null
构造方法
以什么样的方式来构造对象 给属性赋初始值
构造方法名和类名相同 构造方法没有返回值类型 也不能为void
如果程序员没有给类实现构造方法,则编译器会自动生成一个无参的构造方法
如果程序员自己实现了构造方法,则编译器将不会再自动生成构造方法
class 类名{
构造方法
类名(参数列表){
}
}
方法重载:
在同一个作用域里,方法名相同,参数列表不同即构成重载
前提条件是同一个作用域
方法名相同
参数列表不同: 参数个数不一样 或者 参数类型不同
与返回值类型无关
在函数调用过程中,编译器会根据传递的实参的类型和个数来决定调用重载方法中的哪一个方法
重载方法 求最大值 max
参数情况:
2个int
3个int
2个double
int数组
double数组
实例化对象的过程 其实就是调用构造方法的过程
打
打车
打人
打篮球
打工
支付
现金
支付宝
微信
刷卡
学生类
属性有:
学号 姓名 年龄 成绩
按照不同的方式来构造学生(重载构造方法)
提供 显示信息的 方法
引用类型 引用变量 = 对象;
引用变量 = null; 表示没有引用具体的对象,这个时候如果通过该引用变量去访问属性和方法,都将导致java.lang.NullPointerException
this:
类的每一个成员方法里面都有一个this引用变量
构造方法里面,this引用的是正在构造的对象
普通成员方法里面 this引用正在调用该方法的对象
this可以区分成员属性 和 局部变量(形参)
写一个平面点类
属性有:x,y坐标值
构造方法
方法:距离原点的长度 Math.sqrt(x*x+y*y)
方法:一个点与另外一个点的距离
写一个平面圆类 (不要和之前的Circle同名)
属性: 中心点
半径
构造方法
方法:判断一个圆与另外一个圆是否相交
方法:判断一个圆是否在另外一个圆内部
面向对象 难入门