您的位置:首页 > 编程语言 > Java开发

Java是一门面向对象的语言解读

2020-06-21 00:01 18 查看

Java语言面向对象解读

  • 二、面向对象
  • 三、Java 类及类的成员
  • 四、new (创建)对象及使用
  • 五、类的内存解析
  • 六、特殊
  • 七、理解“万事万物皆对象”
  • 八、代码展示
  • 一、Java面向对象的主线分析

    1. 三条主线

    1. Java类及类的成员:属性、方法、构造器;代码块、内部类
    2. 面向对象的三大特征:封装性、继承性、多态性、(抽象性)
    3. 其它关键字:this、super、static、final、abstract、interface、package、import等

    2. 注意

    1. 面向过程(POP)(Procedure Oriented Programming):强调的是功能行为,以函数为最小单位,考虑怎么做。
    2. 面向对象(OOP)(Object Oriented Programming):强调具备了功能的对象,以 类/对象 为最小单位,考虑谁来做。

    二、面向对象

    1. 面向对象两个要素

    1. 类(class):对一类具有相同属性和行为的事或物的描述,是抽象的、概念上的定义
    2. 对象(object):是实际存在的该类事物的每个个体,因而也称为实例(instance)
      思想概述;程序员从面向过程的执行者转化成了面向对象的指挥者。

    2.完成一个项目或功能的(面向对象分析方法分析问题的)思路和步骤

    2.1 步骤

    1. 根据问题需要,选择问题所针对的现实世界中的实体。
    2. 从实体中寻找解决问题相关的属性和功能,这些属性和功能就形成了概念世界中的类。
    3. 把抽象的实体用计算机语言进行描述,形成计算机世界中类的定义。即借助某种程序语言,把类构造成计算机能够识别和处理的数据结构。
    4. 将类实例化成计算机世界中的对象。对象是计算机世界中解决问题的最终工具。

    2.2 注意

    1. 面向对象程序设计的重点是类的设计;设计类,就是设计类的成员。
    2. Java代码世界是由诸多个不同功能的类构成的。

    三、Java 类及类的成员

    1. 基本成员

    1. 属性 == (Field ) == 域、 字段 :对应类中的成员变量:静态特征;全局变量;
    2. 行为、方法 ==(Method) == 函数、过程 :对应类中的成员方法:动态特征;

    2.类的语法格式

    修饰符 class 类名 {
    属性声明;
    方法声明;
    }
    注意:类的正文要用{ }括起来,表征其作用域。

    3.创建Java自定义类的步骤

    1. 定义类(考虑修饰符、类名)
    2. 编写类的属性(考虑修饰符、属性类型、属性名、初始化值)
    3. 编写类的方法(考虑修饰符、返回值类型、方法名、形参等)、

    4.类的分类

    1. 实体类(存储数据的类):实体类的写法是固定的。
      类的方法体内,包含属性,一个显示声明的无参构造方法;和根据业务要求的带参构造方法。
      每一个属性都对应着2个方法,setter和getter。一个用来赋值,一个取值。
    2. 业务类(处理数据的类):

    5.类的访问机制:

    1. 在一个类中的访问机制: 类中的方法可以直接访问类中的成员变量 。
      例外:static 方法访问非 static ,编译不通过 。
    2. 在不同类中的访问机制: 先创建要访问类的对象,再用对象访问类中定义的成员 。

    四、new (创建)对象及使用

    1. 面向对象思想的实现

    1.1 实现思路步骤

    1. 创建类,设计类的成员。见 三、4 。
    2. 创建类的对象,new 一个对象。(类的实例化 = 实例化类)
      格式:类名 对象名 = new 构造方法(参数列表);
    3. 通过“对象.(可见)属性”或“对象.(可见)方法”调用对象的结构
      注意:如果创建了一个类的多个对象,则每个对象都独立的拥有一套类的属性。(非static的)
      意味着,如果我们修改一个对象的属性a,则不影响另外一个对象属性a的值。

    1.2 构造器(构造方法)解读

    1. 构造方法语法格式: public 方法名(与类名同名)(参数列表){
      方法体;
      }
      参数列表为空时,称为无参构造(若类中没有定义任何构造方法,系统自动提供无参构造);
      反之,带参构造(若类中定义任何构造方法,系统不再提供无参构造,如需使用无参构造,需显示声明无参构造)。
    2. 构造方法的功用:
      1.创建对象;
      2.类初始化,给类的属性第一次赋值。构造方法对于同一个对象,只能调用一次。
      注意:调用方式,new(惟一),没有返回值类型。(识别标志:与类同名,没有返回值类型)

    五、类的内存解析

    1.内存空间

    1. 堆(Heap):所有的对象实例以及数组都要在堆上分配。
      (此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。)
    2. 栈(Stack):是指虚拟机栈。用于存储局部变量等。方法执行完,自动释放。
      局部变量表存放了编译期可知长度的各种基本数据类型(boolean、byte、char 、 short 、 int 、 float 、 long 、double)、对象引用(reference类型,它不等同于对象本身,是对象在堆内存的首地址)。
    3. 方法区(Method Area):用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
      注意:引用类型的变量,只可能存储两类值:null 或 地址值(含变量的类型)。

    2.JVM内存结构

    1. 编译完源程序后生成一个或多个字节码文件。
    2. 使用JVM中类的加载器和解释器对生成的字节码文件进行解释运行。
      意味着,需要将字节码文件对应的类加载到内存中,涉及到内存解析。

    六、特殊

    1.匿名对象

    1.定义

    定义:我们也可以不定义对象的句柄,而直接调用这个对象的方法。这样的对象叫做匿名对象。
    (我们创建的对象,没有显式的赋给一个变量名。即为匿名对象)
    例:new Person().shout();

    2.使用场景

    1. 如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象。
    2. 我们经常将匿名对象作为实参传递给一个方法调用。
      特征:匿名对象只能调用一次。

    七、理解“万事万物皆对象”

    1. 在Java语言范畴中,我们都将功能、结构等封装到类中,通过将类实例化为对象,用对象来调用具体的功能、结构Scanner,String等
      文件:File; 网络资源:URL
    2. 涉及到Java语言与前端Html、后端的数据库交互时,前后端的结构在Java层面交互时,都体现为类、对象。

    八、代码展示

    /* 要求:
    *   (1)创建ObjectOrientedProgramming类的对象,设置该对象的name、age和sex属性,调用study方法,
    *       输出字符串“studying”,调用showAge()方法显示age值,
    *       调用addAge()方法给对象的age属性值增加2岁。
    *    (2)创建第二个对象,执行上述操作,体会同一个类的不同对象之间的关系。
    */
    public void ObjectOrientedProgrammingTest() {
    // 类的实例化。即 new 一个属于类对象。用以操作类的属性和方法。
    ObjectOrientedProgramming p1 = new ObjectOrientedProgramming();
    //调用(操作)类的属性并赋值。
    p1.name = "Tom";
    p1.age = 18;
    p1.sex = 1;
    //调用(操作)类的方法。
    p1.study();
    p1.showAge();
    
    int newAge = p1.addAge(2);
    System.out.println(p1.name + "的新年龄为:" + newAge);
    System.out.println(p1.age);//20
    //*************************
    ObjectOrientedProgramming p2 = new ObjectOrientedProgramming();
    p2.showAge(); //0
    p2.addAge(10);
    p2.showAge(); //10
    p1.showAge();
    }
    class InstanceTest {
    public static void main(String[] args) {
    Phone p = new Phone();
    //p = null;
    System.out.println(p);
    
    p.sendEmail();
    p.playGame();
    
    //匿名对象
    //		new Phone().sendEmail();
    //		new Phone().playGame();
    
    new Phone().price = 1999;
    new Phone().showPrice();//0.0
    
    PhoneMall mall = new PhoneMall();
    //		mall.show(p);
    //匿名对象的使用
    mall.show(new Phone());
    }
    }
    class PhoneMall{
    public void show(Phone phone){
    phone.sendEmail();
    phone.playGame();
    }
    }
    
    class Phone{
    double price;//价格
    public void sendEmail(){
    System.out.println("发送邮件");
    }
    
    public void playGame(){
    System.out.println("玩游戏");
    }
    
    public void showPrice(){
    System.out.println("手机价格为:" + price);
    }
    
    }
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: 
    相关文章推荐