面向过程
步骤1,2,3---算法
面向对象(Oriented Object )
需要什么对象
什么对象?
万事万物都是对象。
具体看得见摸得着的具体存在。
描述对象:
张三这个学生
静态的特征:姓名,性别,学校,课程,成绩
动态的特征:动作,行为,功能,能力等等,吃,上课,做作业,考试,请假
对象静态特征和动态特征的结合体。
类:
我们自然而然地对周边的事物进行分类。
类和对象的关系
类:抽象的概念,集合,数据类型
对象:具体某一个,个体,实例
不是整体与局部的关系
学生--张三 饭--扬州炒饭 牛--牛头
面向对象编码的思路
1)抽象出类:Dog Cat
2) 抽象出业务相关属性:对象共有的静态特征
Dog:昵称,年龄,品种
数据类型 变量名;
3)抽象出业务相关的方法:对象共有的动态特征
Dog:吃,睡,玩,治疗
访问控制符 返回值类型 方法名(参数列表){
//
}
4)实例化对象
对象名.属性
对象名.方法()
属性,全局变量,实例变量:
初始值:
系统会分配默认值。
引用类型的数据默认值null.null就是没有指向任何一块堆内存
NullPointException的原因都是在null值上调用属性和方法
int 默认值0 char默认值 空字符 double 0.0 boolean false
作用域:
整个类。在类的内部,各个方法都可以使用。
生命周期:创建对象--对象销毁
Dog d=new Dog();
d=new Dog();
垃圾回收程序gc 去回收游离的对象。
局部变量
初始值:没有初始值,必须手动初始化
作用域:定义它的方法中才有效
生命周期:方法调用---方法执行结束
问题:全局变量和局部变量可以重名吗?
可以。局部变量优先级更高
通过this关键字来引用全局变量
this
关键字,指代当前对象,谁调用这个方法,我就指代谁
方法:
动作,行为,功能,能力等等
抽象的原则:一个功能一个方法,一个动作一个方法
举个例子:一个计算器 加 减 乘 除
计算java,web,sql的总成绩和平均分
电动狮子玩具,跑,唱歌
方法定义:
访问控制符 返回值类型 方法名(){
//方法体
}
返回值类型 此功能执行结束,需要返回给调用者什么结果
如果不需要返回,就写void
如果需要返回,就写返回值的数据类型
方法体中最后必须以return 返回值;
return 结束方法的
方法名 :与变量命名规则一致
方法体:完成此功能的过程
定义变量,运算符,程序流程结构
方法调用:
本质:执行方法体
有返回值的方法: 对象名.方法(); 调用之后可以赋值,还可以输出,比较等等
无返回值的方法:对象名.方法();
在其他类中调用方法:
1、创建对象
2、对象名.调用方法
在同一类中可以调用方法
可以直接调用
方法调用栈:
当执行方法时,就进栈,
执行结束,就弹栈。
方法的好处:代码重用,维护性好
练习:
定义电池类 :充电 获取当前电量的方法
定义MP3类:下载音乐,播放下载的音乐,充电(电池的充电)
package se0619;
public class MP3 {
public String download() {
// System.out.println("正在下载。。。。。");
return "小苹果";
}
public void play() {
System.out.println("正在播放"+download());
}
public void charge() {
Cell c=new Cell();
c.charge();
}
public static void main(String[] args) {
MP3 m=new MP3();
m.download();
m.play();
m.charge();
}
}
计算java,web,sql的总成绩和平均分
package se0619;
public class Calculator {
double java;
double web;
double sql;
//计算总成绩
public double calSum() {
double sum=java+web+sql;
return sum;
}
//计算平均分
public double calAvg() {
return calSum()/3;
}
}
package se0619;
public class TestAutoLion {
public static void main(String[] args) {
//创建对象
AutoLion al=new AutoLion();
al.run();
al.sing();
String c=al.getColor();
System.out.println(c);
}
}