(尚硅谷 java 学习 b 站大学版)Day11 面向对象基础知识初入门

四、面向对象(上)


终于到面向对象了,Java 语言的重中之重 奥利给!!!

Java 面向对象学习的三条主线:1、Java 类及类的成员:属性、方法、构造器;代码块内部类

2、面向对象三大特征:封装、继承、多态性、(抽象性)

3、其他关键字:this\super\static\final\abstract\interface\package…


4.1 面向过程(POP) 与 面向对象(OOP)

面向过程: 强调 是功能行为,以函数为最小单位,考虑如何做

面向对象: 将功能封装进对象,强调了具备功能的对象,以类/对象为最小单位,考虑谁来做


4.2 Java 语言 的基本元素: 类和对象

: 是对一类事物的描述,是抽象的、概念上的定义

对象: 是实际存在的该类事物的每个个体,因而也称为 实例

面向对象程序设计的重点:类的设计

设计类:即设计类的成员

常见类的成员:1、属性(也称成员变量(field:域、字段)) :对应类中的成员变量

​ 2、行为(成员方法、函数、method):对应类中的成员方法

创建类的对象=类的实例化=实例化类

二、类和对象的使用(面向对象思想的落地实现)

1、创建类,设计类的成员

2、创建类的对象

3、通过“对象.属性”或者"对象.方法"调用对象的结构

用代码来更具体的看看以上三点的落实

public class PersonTest {
    public static void main(String[] args){
        //2、创建 Person类的对象
        Person p1=new Person();

        //3.1、调用对象就结构:属性、方法
        p1.name="Jackson";
        p1.isMale=true;
        //3.2、调用方法: 对象.方法
        p1.eat();
        p1.sleep();
        p1.talk("Chinese");

        Person p2=new Person();
        System.out.println(p2.name);

        //将 p1变量的保存的对象地址值赋给了 p3,导致 p1和 p3指向了堆空间的同一个对象实体
        Person p3=p1;
        System.out.println(p3.name);
        p3.age=18;
        System.out.println(p1.age); //p1和 p3 指向同一个 所以说 age 也是改变了

    }

}
// 1、创建类,设计类的成员
class Person{
    //属性
    String name; //姓名
    int age;     //年龄
    boolean isMale;  //是否为男性


    // 方法
    public void eat(){
        System.out.println("可以吃饭");

    }

    public void sleep(){
        System.out.println("可以睡觉");
    }

    public void talk(String language){
        System.out.println("人可以说话,说的是"+language);
    }
}


4.3 对象的创建和使用

如果创建了一个类的多个对象,则每个对象都独立的拥有一套类的属性(非 static)

**意味着:**如果我们修改一个对象的属性a,不影响另一个对象的属性 a

内存解析

栈:指虚拟机 的栈,用于存储局部变量

堆(heap):存放对象实例

方法区(Method Area):用于存储已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码

属性(成员变量)与 局部变量

1、相同点:

​ 1.1: 定义变量的格式: 数据类型 变量名= 变量值

​ 1.2: 先声明后使用

​ 1.3: 都有其对应的作用域

2、不同点:

​ 2.1:在类中声明的位置不同

​ 属性:直接定义在类的一对{} 内

​ 局部变量:声明在 方法内、方法形参、代码块内、构造器形参、构造器内部的变量

//例如在代码中可以查看


class User{
    //属性
    String name;
    int age;
    boolean isFemale;
    public void talk(String language){  //language:形参 局部变量

        System.out.println("我们使用"+language+"交流");
    }
    public void eat(){
        String food="肉夹馍"; //局部变量
       System.out.println("北方人喜欢吃"+food);

    }

​ 2.2: 关于权限修饰符不同

​ 属性:可以在声明属性时,指明其权限,使用权限修饰符

​ 常用的权限修饰符:private\public\缺省的\protected —> 封装性

​ 目前:大家使用声明属性时,都使用确省就行(即不加修饰符)

​ 局部变量:不可以使用权限修饰符

​ 2.3: 默认初始化值的情况

​ 属性:

​ 类的属性,根据其类型,都有初始化值

​ 整形(byte short int long):0

​ 浮点型(float double): 0.0

​ 字符型(char ): 0(或者‘、u0000’)

​ 布尔类型(boolean): false

​ 引用数据类型(类、接口、数组): null

​ 局部变量: 没有默认初始化值,意味着我们在调用局部变量前一定要显式赋值

特别的:形参 我们在调用的时候 赋值

​ 2.4 在内存中加载的位置不同

​ 属性:加载到堆空间(非 static)

​ 局部变量: 加载到栈空间

类中方法的声明和使用

方法:描述类应该具有的功能

比如:Math 类中:sqrt()\random()…

​ Scanner 类型: nextXxx()…

1、举例子:

class Customer{
        //属性
        String name;
        int age;
        boolean isMale;

        //方法
        public void eat(){              //void 没有返回值
            System.out.println("eat");

        }
        public void sleep(){
            System.out.println("sleep");
        }
        public String getName(){
            return name; //返回名字
        }
        public String getNation(String nation){
            String info="我的国籍是:"+nation;
            return info;

        }
    }

2、 方法的声明:权限修饰符 返回值类型 方法名(形参列表){

​ 方法体

}

​ 注意:static、final、abstract来修饰的方法,后面再说

3、 说明:

​ 3.1、 关于权限修饰符

​ java 规定的四种权限修饰符: private\public \protected\缺省 —>封装性细说

​ 3.2、 返回值类型: 有返回值的 vs 没有返回值的

​ 3.2.1 如果方法有返回值,则必须在方法声明时,指定返回值的类型。同时方法中需要使用 return 关键字来返回指定类型的变量或常量

​ 如果方法没有返回值,则方法声明时,使用 void 表示,通常不用 return,但是如果使 用的话,只能"return" 表示结束此方法的意思,return 后不可以声明表达式

​ 3.2.2 我们定义的方法该不该有返回值? 看经验 多敲代码

​ a.题目要求 b. 凭借经验:具体问题,具体分析

​ 3.3、 方法名:属于标识符,遵循标识符的规则和规范,“见名知意”

​ 3.4、 形参列表:方法可以声明零个、一个、或多个

​ 3.4.1格式: 数据类型 1 形参 1,数据类型 2 形参 2,…

​ 3.4.2 我们定义方法要不要形参?a.题目要求 b.凭经验

​ 3.5、 方法体:方法功能的体现(重要的 important)

4、return 关键字的使用

​ 1、使用范围:使用在方法中

​ 2、作用:结束方法

​ 针对 有返回值类型的方法,使用 “return 数据” 方法返回所要的数据

​ 3、注意点:return 语句后面不可以声明执行语句

5、 方法的使用中,可以调用当前类的属性或者方法

​ 特殊的:方法a 中又调用了方法 a,称为递归方法

方法中,不可以定义方法


总结

首先,祝大家新年快乐!!!祝大家 2025 都身体健康、事事顺心!
近日,因为个人感情问题以及到了过年,事情比较多,最近三天都没有学习,落下了很多功课,之后需努力学习,及时赶上。
今天主要学习了 java 核心的内容:面向对象,学习了其中属性、方法、类等相关的的基础知识。后面还需多敲敲代码熟悉一些这些内容
送给自己和大家一句话:
努力奔跑吧,去追上曾被寄予厚望的自己!!!

你可能感兴趣的:(java,学习,python)