JavaSE Day07

面向对象(1)

 

1. 什么是面向对象

面向对象的思想:物以类聚,分类的思维模式,然后对这些分类进行单独思考

属性+方法->类

对于描述复杂的事物,为了从宏观上把握、从整体上合理分析,我们现需要面向对象的思路来分析整个系统。但是,具体到围观操作,仍然需要面向过程的思路去处理。

面向对象(Objiet-Oriented Programming,OOP)是框架,面向过程是流程

面向对象编程的本质以类的方式组织代码,以对象的组织(封装)数据

三大特性:封装、继承、多态

从认识论先有对象后又类。对象,是具体的食物;类,是抽象的事物,是对对象的抽象。

从代码运行角度是先有类后有对象。类是对象的模板

 
 1 package com.oop;
 2  3  import java.io.IOException;
 4  5  //Demo01就是一个类
 6  public class Demo01 {
 7      //main 方法
 8      public static void main(String[] args) {
 9 10      }
11 12      /*
13      修饰符 返回值类型 方法名(。。。){
14          //方法体
15          return 返回值;
16      }
17       */
18      public String sayHello() {
19          return "hello,world";
20      }
21 22      public int max(int a, int b) {
23          return a > b ? a : b;
24      }
25 26      //throws IO抛出输出异常
27      public void readFile(String file) throws IOException {
28 29      }
30  }

 

静态方法、非静态方法:

 1 package com.oop;
 2  3  public class Demo02 {
 4      public static void main(String[] args) {
 5          //静态方法 static
 6          Student.say();
 7          //非静态方法,实例化这个类 new
 8          //对象类型 对象名=对象值
 9          Student student = new Student();
10          student.say1();
11 12      }
13 14      //和类一起加载
15      public static void a() {
16          b();
17      }
18 19      //类实例化 之后才存在
20      public void b() {
21 22      }
23  }
 1  package com.oop;
 2  3  //学生类
 4  public class Student {
 5  6      //静态方法
 7      public static void say() {
 8          System.out.println("学生说话");
 9      }
10 11      public void say1() {
12          System.out.println("学生说话");
13      }
14 15  }

 

值传递和引用传递:

 1  package com.oop;
 2  3  //引用传递:对象,本质还是值传递
 4  public class Demo03 {
 5      public static void main(String[] args) {
 6          Person person = new Person();
 7  8          System.out.println(person.name);//null
 9 10          Demo03.change(person);
11 12          System.out.println(person.name);
13      }
14 15      public static void change(Person person) {
16          //person是一个对象:指向的--->Person person = new Person();这是一个具体的人,可以改变属性
17          person.name = "anzhenyu";
18      }
19  }
20 21  class Person {
22      String name;//null
23  }

 

2. 类和对象的关系

  1. 类是一种抽象的数据类型,它是对某一事物整体描述/定义,但是并不能代表某一个具体的事物。

    动物、植物、手机、电脑

    Person类、Pet类、Car类,这些类都是用来描述/定义某一类具体的事物应该具备的特点和行为

  1. 对象是抽象概念的具体实例

    张三就是人的一个具体实例,张三家里的旺财狗就是一个实例

    能够提现出特点,展现出功能的是具体的实例,而不是一个抽象的概念

 

3. 创建与初始化对象

使用new关键字创建对象

使用new后,除了分配内存外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用。

 1  package com.oop.demo02;
 2  3  //学生类
 4  public class Student {
 5  6      //属性:字段
 7      String name;
 8      int age;
 9 10      //方法
11      public void study() {
12          System.out.println(this.name + "在学习");
13      }
14  }
 1  package com.oop.demo02;
 2  3  //一个项目应该只存在一个main方法
 4  public class Application {
 5      public static void main(String[] args) {
 6  7          //类:抽象的,需要实例化
 8          //类实例化后返回一个自己的对象!
 9          //student对象就是一个Student类的具体实例!!!
10          Student student = new Student();
11          Student xiaoming = new Student();
12          Student xiaohong = new Student();
13 14          xiaoming.name = "小明";
15          xiaoming.age = 23;
16 17          System.out.println(xiaoming.name);
18          System.out.println(xiaoming.age);
19          //调用方法
20          xiaoming.study();
21      }
22  }

 

4. 构造器

类中的构造器也称为构造方法,是在进行创建对象的时候必须调用的。并且构造器有两个特点:

1.必须和类的名字相同。2.必须没有返回类型,也不能写void。

构造器必须掌握!

作用:

  1. 使用new关键字,必须要有构造器(如果没有构造器,new一个对象会报错,本质就是调用构造器)

  2. 用来初始化值

有参构造:一旦定义了有参构造,无参就必须显示定义

alt+insert自动生成构造器

 1  package com.oop.demo02;
 2  3  //java生成了一个class文件
 4  public class Person {
 5  6      //一个类即使什么都不写,他也会存在一个方法
 7  8      String name;
 9 10      //无参构造器
11      //作用:实例化的初始值
12      public Person() {
13          this.name = "anzhenyu";
14      }
15 16      //有参构造:一旦定义了有参构造,无参就必须显示定义
17      public Person(String name) {
18          this.name = name;
19      }
20 21      //alt+insert
22 23  }
 1 package com.oop.demo02;
 2  3  //一个项目应该只存在一个main方法
 4  public class Application {
 5      public static void main(String[] args) {
 6  7          //new实例化了一个对象
 8          Person person = new Person();
 9          System.out.println(person.name);
10      }
11  }

 

5. 创建对象内存分析

 

6. 类与对象小结

  1. 类与对象

    类是一个模板:抽象;对象是一个具体的实例

  1. 方法

    定义、调用

  1. 对应的引用

    引用类型:基本类型

    对象是通过引用来操作的:栈---->堆

  1. 属性:字段 成员变量

    默认初始化:

      数字:0 0.0

      char:u0000

      boolean:false

      引用:null

    修饰符 属性类型 属性名=属性值!

  1. 对象的创建与使用

    ---必须使用new关键字创建对象,构造器 Person yc = new Person()

    ---对象的属性: yc.name

    ---对象的方法: yc.sleep()

  1. 类:

    静态的属性 属性

    动态的行为 方法

posted @ 2021-03-05 11:02  825728422  阅读(58)  评论(0)    收藏  举报