方法 函数 过程
封装了一段逻辑代码或者实现特定的功能
方法可以重复被调用 增加了代码的复用 提升开发效率
方法五要素:
修饰词 返回值类型 方法名(参数列表){
//方法体
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同名)
属性: 中心点
半径
构造方法
方法:判断一个圆与另外一个圆是否相交
方法:判断一个圆是否在另外一个圆内部
面向对象 难入门
记录一个学生的信息
学号
姓名
年龄
...
//一组变量来描述学生信息 这三个变量没有任何关联 相互独立 不是一个整体
int id = 110;
String name = "张三";
int age = 18;
类: 用于描述一类事物的特征和行为
定义类的语法:
class Stu{
//声明属性
int id;
String name;
int age;
}
Stu s = new Stu();//s就是一个学生
s.id
s.name
s.age
Stu s1 = new Stu();
定义类的语法:
class 类名{
//定义变量 成员属性
//构造方法
方法名 和 类名相同 并且没有返回值类型 也不是void
如果自己不实现构造方法编译器将自动生成一个无参构造方法
一旦提供 编译器将不再自动生成
}
类可以实例化对象 new
类名 标识符 = new 类名(); 创建\实例化对象
int a = 10;
Stu s = new Stu();
实例化对象本质是上调用构造方法 初始化成员属性
java两种数据类型
基本数据类型: 变量存储的是值
引用数据类型: 变量存储的地址信息
写个员工类
员工号
姓名
工资
提供方法:
构造方法
给员工加工资的方法
显示员工的信息
创建两个员工
显示这两个员工的信息
给第一个员工加100
给第二个员工加500
再显示员工信息
图书类
属性
平面点类
class Point{}
平面直线段 类
class Line{}
属性:
开始点 Point p1;
结束点 Point p2;
构造方法
得到该线段的长度
判断两个直线段(延长)的是否相交
平面点类 平面圆类 点+半径
平面点类 平面线段类 两个点
酒店管理系统
类:
旅客类
属性: 姓名
房间类
属性: 房间号
旅客 guest null 表示无人入住
入住 guest = new Guest(name);
退房 guest = null;
class Room{
int id;
Guest guest; //null表示无人入住
}
酒店类
属性:
酒店名字
很多房间 几层 每层多少间 二维数组
1. 查看入住情况
2. 办理入住手续
3. 办理退房手续
4. 退出系统