【JAVA SE】9.类和对象

来源:互联网 发布:5钻淘宝店铺多少钱 编辑:程序博客网 时间:2024/06/08 06:45

一、面向对象(OPP)

  • 面向过程:强调过程,功能的具体实现过程
  • 面向对象:将功能封装进对象,强调具备了功能的对象
  • 三个特征:封装,继承,多态
  • 开发:就是找对象使用。没有对象,就创建一个对象,将功能封装进对象。

例:我要开车去新疆

· 面向过程:我要开车,我拉开车门,我坐在驾驶座,我过山东…
(对过程了如执掌)

· 面向对象:我命令车去新疆(车.Go),车怎么过去不关心,不用了解车整个开动的过程,车暴露出来的功能就是去哪里。
(车把自己的信息,功能封装在车这个类的内部)

二、类和对象关系

  • 类:现实生活中事物的描述(描述人:姓名,年龄,性别等),映射到Java中,就是class定义的类。
  • 类是具有相同属性和方法的一组对象的集合,描述对象的具体信息。
  • 在一个类中,定义了该类对象所应具有的属性和方法。
  • 对象:
    • 每个对象都有一种类型,都是某个“类”的一个“实例”。
    • 每个对象都隶属一个特定的“类”,那个类具有自己的通用特征与行为。 对象就是这类事物,实实在在存在的个体(如某一个人),对应JAVA在堆内存中用new建立的实体。

例1:职员(类)

属性(静态,特定的值):姓名、年龄、工资数额——成员变量
方法(对象能干什么,功能):显示姓名(),显示年龄(),领取工资()

根据类可以衍生出不同的对象——实例化
职员A:姓名:A,年龄:20, 工资:4000——对象(成员变量和方法的封装体)

public class Text {    public static void main(String[] args){        Worker a = new Worker();//a就是Worker类类型变量——对象        a.name = "A";        a.age = 20;        a.wages = 4000;        a.showname();        a.showage();        a.getwages();       }}//描述职员(类)class Worker {    //成员变量(属性),对象有什么    String name;    int age;    int wages;    //方法(功能),对象能干什么    void showname() {        System.out.println("姓名:"+name);    }    void showage(){        System.out.println("年龄:"+age);    }    void getwages() {        System.out.println("工资数额:"+wages);    }}

例2:人开门——分析

人 {    开门(门) {        门.开    }}门 {    开() {    操作门轴等    ...    }}//最合适的方法应该出现在最合适的类中//门怎么开门本身最清楚,所以开这个功能应该定义在门中//识别类的简单规则是在分析问题的过程中寻找名词,而方法对应动词

三、面向对象设计思想

1、对于一个问题,首先要考虑这个问题,应该有哪些个类,哪些个对象
2、然后考虑,这些类和对象,每种类和每个对象应该具有哪些属性和方法
3、再考虑,类和类之间具备什么样的关系

四、定义类

1、所有JAVA程序都以类class为组织单元。【class是定义类的关键字】
2、类的组成:成员变量和方法
3、定义类的步骤

  • 定义类名
  • 编写类的属性
  • 编写类的方法
class 类名 {    //定义类的属性 有什么    属性1的类型 属性1;    属性2的类型 属性2;    ...    //定义方法 能干什么    方法1;    方法2;    ...}

例3:买一个手机,首先你要想你想要的手机是什么,想像中的手机就是类。屏幕尺寸,CPU、内存等用属性表示,打电话,发短信等功能用方法来表示。

//1.定义一个类public class Telephone {    //2.声明属性,有什么    float screen;//屏幕尺寸    float cpu;    float mem;//内存大小    //3.定义方法,干什么    void call() {        System.out.println("打电话功能");    }    void sendMessage() {        System.out.println("发短信功能");    }}

五、类之间的关系

  • 依赖(”uses-a”):一个类的方法操纵另一个类的对象,我们就说一个类依赖于另一个类。应该尽可能将相互依赖的类减至最少(类之间耦合度最小)。
  • 聚合(”has-a”):类A的对象包含类B的对象(聚集和组合)。聚集:相关性不大(足球队长是球队的一部分,篮球队长也是),组合:关系必不可分(头是人的一部分)
  • 继承(”is-a”)
  • 实现(implements):接口
  • 多态

六、使用对象

  • 创建对象: 类名 对象名 = new 类名();//位于堆内存,动态分配内存
Telephone phone = new Telephone();
  • 使用对象:对象名.属性/方法
phone.mem = 4.0f;//给mem属性赋值4,float型phone.call();//调用call方法
  • 注:同一类的每个对象有不同的成员变量存储空间,同一类的每个对象共享该类的方法

六、局部变量和成员变量

1、定义

  • 局部变量(栈内存中)定义在方法中,临时保存数据
  • 成员变量(堆内存中)定义在类中,因为对象的存在,才在内存中存在

这里写图片描述

2、作用域

  • 局部变量的作用域:仅限定义它的方法或语句中
  • 成员变量的作用域在定义它的整个类中
  • 作用于声明的{}中,出了就没人认识了

3、初始值

  • JAVA会给成员变量一个初值,不会给局部变量赋予初值
  • 成员变量初值:

这里写图片描述

4、在一个方法中,不允许有同名局部变量。在不同方法中,允许有同名局部变量。
5、两类变量同名时,局部变量具有更高优先级

public class a {    int a = 1;    void b() {        int a = 2;        System.out.println(a);    }}//运行结果:2

七、匿名对象

public class Text {    public static void main(String[] args){        //Worker a = new Worker();有名对象        //a.name = "A";        //匿名对象,没有定义对象名         new Worker().name = "A";         //这句话执行完,把A给name后,就变成垃圾了         new Worker().age = 18;         //在堆内存又生成一块区域,执行完,该内存又变成垃圾了         //所以匿名对象调用属性无意义         new Worker().showname();         //匿名对象调用方法有意义    }}class Worker {    String name;    int age;    int wages;    void showname() {        System.out.println("姓名:"+name);    }}//如果对一个对象进行多个成员调用,就必须给对象起个名字//匿名对象什么时候使用://1.当对对象的方法只调用一次时//2.可以将匿名对象作为实际参数进行传递public class Text {    public static void main(String[] args){        //Worker a = new Worker();有名对象        //show(a);        show(new Worker());//执行完堆内存区域就成垃圾了        //new Worker()作为实参传给a相当于Worker a = new Worker()    }    public static void show(Worker a) {        a.name = "A";        a.showname();    }}class Worker {    String name;    void showname() {        System.out.println("姓名:"+name);    }}
0 0