对象得定义与使用(动力节点老杜)

对象思想

1.什么是面向过程,什么是面向对象?
在这里插入图片描述
换而言之,==面向对象思想实际就是将整体分成一个个独立的单元,每个单元都有自己得任务和属性,所有单元结合在一起完成一个整体。==如果某个单元出现了问题还可以及时处理,这样的优点就是各单元间互不干扰。
面向过程就好比把事情的处理看作一个整体,一个整体是一个单元,比如串联电路思想。
面向对象三大特征:

  • 封装、
  • 继承、
  • 多态

类与对象

在这里插入图片描述
在这里插入图片描述

变量回顾
变量:

  • 局部变量 只在方法体中有效

  • 成员变量
    分为两类:静态变量和实例变量

    实例变量就是对象的属性

类与对象

一、类

  • 类的定义与使用
  1. 定义类的语法格式:
    [修饰符列表] class 类名{
    *** 类体 = 属性 + 方法;
    *** // 属性(实例变量),描述的是状态
    *** // 方法,描述的是行为动作
    }

  2. 为什么要定义类?
    因为要通过类实例化对象。有了对象,让对象和对象之间协作起来形成系统。

  3. 一个类可以实例化多个java对象。(通过一个类可以造出多个java对象。)

  4. 实例变量是一个对象一份,比如创建3个学生对象,每个学生对象中应该都有name变量。

public class Student {

    // 属性:姓名,年龄,性别,他们都是实例变量

    // 姓名
    String name;

    // 年龄
    int age;

    // 性别
    boolean gender;
}

上述代码是否发现了个问题;
变量没有赋值唉!!!!!!
请注意:
没有赋值不能使用的变量是局部变量
成员变量如果没有手动赋初始值的话,系统会自动给成员变量赋其默认值。
5.成员变量赋默认值

数据类型        默认值
----------------------
byte            0
short           0
int             0
long            0L
float           0.0F
double          0.0
boolean         false
char            \u0000
引用数据类型      null

2.对象
依据定义:类是我们定义的、对 对象 特征总结形成的模板,是个抽象概念。因此我们需要创建实例也就是对象,才能真正的完成工作。
就好比宠物都会吃饭,你说宠物这个标签,标签只是个概念,不会吃饭,会吃饭的是真正的宠物,比如说猫和狗。

对象的定义语法:
new 类名();

但是,对象是存储在堆这个内存空间的,而Java语法规定程序员不能直接对堆内的内容进行访问,所以就诞生了引用,C++中的指针。
引用和对象要区分开。对象在JVM堆当中。引用是保存对象地址的变量。
引用就是存储对象在堆内存中地址的变量,这个变量应该是引用类型的变量。表示如下:

平时为了方便,就把存储对象地址的局部变量叫做对象

Student s1 = new Student();

3.实例变量的访问语法:
对象名.变量名;
相当于对象的变量
示例代码:

package com.powernode.javase.oop01;

public class StudentTest01 {
    public static void main(String[] args) {
        // 局部变量
        int i = 10;
        Student s1 = new Student();
        System.out.println("姓名:" + s1.name); // null
        System.out.println("年龄:" + s1.age); // 0
        System.out.println("性别:" + (s1.gender ? "男" : "女"));

        // 修改对象的属性(修改变量的值,给变量重新赋值)
        s1.name = "张三";
        s1.age = 20;
        s1.gender = true;

        System.out.println("姓名:" + s1.name); // 张三
        System.out.println("年龄:" + s1.age); // 20
        System.out.println("性别:" + (s1.gender ? "男" : "女")); // 男

        // 再创建一个新对象
        Student s2 = new Student();

        // 访问对象的属性
        System.out.println("姓名=" + s2.name); // null
        System.out.println("年龄=" + s2.age); // 0
        System.out.println("性别=" + (s2.gender ? "男" : "女"));

        // 修改对象的属性
        s2.name = "李四";
        s2.age = 20;
        s2.gender = false;

        System.out.println("姓名=" + s2.name); // 李四
        System.out.println("年龄=" + s2.age); // 20
        System.out.println("性别=" + (s2.gender ? "男" : "女")); // 女


    }
}

上述代码的内存图表示如下:

在这里插入图片描述
4.实例方法的定义与访问

定义:

public 返回值类型 方法名(形式参数列表){
**方法体
}

行为又叫实例方法,不再用static修饰符的原因:static修饰符,代表由类名进行调用,但是对于定义对象的抽象类来说,不能用此语法,因为他是个抽象的概念,不是实例。

实例方法的调用:

对象名.方法名();

5.不可以用类名来调用实例对象和实例方法
1.类是一个抽象的概念,不是一个具体的事物。
2.对象的信息存储在堆内存中,而堆内存不能被程序员直接访问,必须借助存储对象地址的变量来访问,类名不可以。

6.当引用为null时候:
示例代码如下:

package com.powernode.javase.oop03;
/**
 * 宠物类
 */
public class Pet {
    // 属性:状态
    // 名字
    String name; // 实例变量
    // 出生日期
    String birth;
    // 性别
    char sex;
    // 方法:行为动作
    // 吃
    public void eat(){ // 实例方法
        System.out.println("宠物在吃东西");
    }
    // 跑
    public void run(){
        System.out.println("宠物在跑步");
    }
}

package com.powernode.javase.oop03;
public class PetTest02 {
    public static void main(String[] args) {
        // 创建宠物对象
        Pet dog = new Pet();
        // 给属性赋值
        dog.name = "小黑";
        dog.birth = "2012-10-11";
        dog.sex = '雄';
        // 读取属性的值
        System.out.println("狗狗的名字:" + dog.name);
        System.out.println("狗狗的生日:" + dog.birth);
        System.out.println("狗狗的性别:" + dog.sex);
        //当引用为null
        dog = null;

        // ==注意:引用一旦为null,表示引用不再指向对象了。但是通过引用访问name属性,**编译可以通过。**==
        // 运行时会出现异常:**空指针异常**。NullPointerException。这是一个非常著名的异常。
        // 为什么会出现空指针异常?因为运行的时候会找真正的对象,如果对象不存在了,就会出现这个异常。
        //System.out.println("狗狗的名字:" + dog.name);
        // 会出现空指针异常。
        dog.eat();
        // 会出现空指针异常。
        //dog.run();
    }
}

原理如下图所示:
在这里插入图片描述

赋值与参数传递的底层逻辑

int i = 10;
int j = i;//j = 10;

赋值的原理:这不代表i和j在局部变量表中共用一个存储10的存储空间。
步骤:
1.先执行赋值符号左边,读取i的值,并将其赋值一份存储在操作数列表中。
2.开辟一个内存空间,空间名字叫j,并放在局部变量列表中。
3.将操作数列表中的10存储在内存空间j中;

参数传递其实就是将实参的值赋值给方法形参变量的过程。
传递的参数类型分两类:基本数据类型 引用数据类型

判断以下程序的输出结果是多少:


package com.powernode.javase.oop04;

public class User {
    int age;
}

package com.powernode.javase.oop04;

/**
 * 面试题:判断该程序的输出结果
 */
public class ArgsTest01 {
    public static void main(String[] args) {
        int i = 10;
        // 调用add方法的时候,将i传进去,实际上是怎么传的?将i变量中保存值10复制了一份,传给了add方法。
        add(i);
        System.out.println("main--->" + i); // 10
    }
    public static void add(int i){ // 方法的形参是局部变量。
        i++;
        System.out.println("add--->" + i); // 11
    }
}

解析如下图:传的只是值,而这两个变量虽然名字一样,但是所属的方法不一样。
在这里插入图片描述


package com.powernode.javase.oop04;

public class User {
    int age;
}


package com.powernode.javase.oop04;

/**
 * 面试题:分析以下程序输出结果
 */
public class ArgsTest02 {
    public static void main(String[] args) {
        User u = new User();
        u.age = 10;
        // u是怎么传递过去的。实际上和i原理相同:都是将变量中保存的值传递过去。
        // 只不过这里的u变量中保存的值比较特殊,是一个对象的内存地址。
        add(u);
        System.out.println("main-->" + u.age); // 11
    }
    public static void add(User u) { // u是一个引用。
        u.age++;
        System.out.println("add-->" + u.age); // 11
    }
}

而这个输出的结果是11,因为参数传递的是值,可是两个变量操作的都是同一个对象,因此会发生该变,解析如下图:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/432828.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微软研究深度报告:Sora文转视频AI模型全景剖析及未来展望

论文由微软研究团队撰写,这篇论文深入探讨了Sora的发展背景、核心技术、新兴应用场景、现有的局限性以及未来的发展机会,基于公开资料和团队自行进行的逆向工程分析。文中详尽且逻辑清晰,建议细读全文以获得深入了解。 原文:Sora…

nginx生成自签名SSL证书

备注:nginx自生成的ssl证书在浏览器访问时会提示此证书不受信用 1.安装nginx nginx必须有"--with-http_ssl_module"模块 查看nginx安装的模块: [rootmaster1 key]# nginx -V nginx version: nginx/1.24.0 built by gcc 4.8.5 20150623 (Red …

Python图像处理之光斑分析

文章目录 质心目标截取光斑半径 python图像处理教程:初步📷插值变换📷形态学处理📷滤波 光斑是工程中经常出现的图像数据,其特点是目标明确,分布清晰。对光斑图像的分析,主要包括质心定位、目标…

【Android】反编译与预防被反编译

近期在开发一款软件时,遇上了加密、解密数据方面的一些技术问题无法攻克,于是抱着试试看的态度使用 jadx-gui 工具进行反编译一下。哎,居然还成功了,更骚的是,这一款App没有对应用进行混淆、加密、加固,没多…

【学习笔记】卫星基础知识

一、什么是卫星以及它如何工作? 通信卫星是一种人造卫星,通过使用转发器在源和接收器之间中继和放大无线电电信信号。卫星的工作原理是接收从地球发送的无线电信号并将无线电信号重新发送回地球。卫星使用从大型太阳能电池阵列收集的太阳能,…

2.Rust变量

变量的声明 let关键字 在Rust中变量必须要先声明才能使用,let关键字用于声明变量并将一个值绑定到该变量上。如下: fn main() {let var_name:i32 123123;println!("{}",var_name) //println! 是一个宏(macros),可以…

Java 简单模拟银行存取钱

模拟银行存取钱 一、实验任务 在银行办理业务时,通常银行会开多个窗口,客户排队等候,窗口办理完业务,会呼叫下一个用户办理业务。本实验要求编写一个程序模拟银行存取钱业务办理。假如有两个用户在存取钱,两个用户分别…

记事本怎么导入Excel文件 记事本数据导入Excel方法

在日常生活中,记事本软件已经成为了我不可或缺的助手,帮助我记录着点点滴滴,释放了大脑的负担。然而,随着时间的推移,记事本里的内容越来越多,如何高效地整理这些数据成为了一个新的问题。特别是当我需要将…

创建Net8WebApi自动创建OpenApi集成swagger

问题:用Net8创建WebAPI时勾选启动OpenAPI,项目自动集成了Swagger,但是接口注释没有展示? 解决: 1.需要生成Api项目的XML文件。操作如下: 2.生成XML文件后,还需要在启动类Program.cs里面配置Sw…

位运算(位运算的技巧、二进制中1的个数、区间或、异或森林)

一、移位操作符 1.1 左移操作符 << 作用&#xff1a;二进制数向左边移动&#xff0c;右边补0. #include<stdio.h> int main() {int a 10;int b a << 1;//将a的二进制向左移动一位printf("a%d\nb%d", a, b);return 0; } 左移操作符相当于对…

语文教学方法有哪些,产生了什么效果

你是否曾想过&#xff0c;一位普通的语文老师如何化身为智慧的引导者&#xff0c;点燃学生心中的求知之火&#xff1f;让我们一起探寻那些神奇的语文教学方法&#xff0c;以及它们带来的深远影响。 不仅让知识变得容易理解&#xff0c;更在无形中培养了学生的各项能力。通过谈话…

华中某科技大学校园网疑似dns劫持的解决方法

问题 在校园网ping xxx.ddns.net&#xff0c;域名解析失败 使用热点ping xxx.ddns.net&#xff0c;可以ping通 尝试设置windows dns首选dns为114.114.114.114&#xff0c;重新ping&#xff0c;仍然域名解析失败 猜测【校园网可能劫持dns请求】 解决方法 使用加密的dns请求…

制作照片数字人,让图片开口说话

一、软件安装 全部按照默认程序安装 最后安装完成后把所有按钮取消勾选&#xff0c;选择【Finish】&#xff0c;在弹出的界面中选择【否】。 然后点击管理员运行&#xff0c;直接全部默认&#xff0c;不更改位置。 二、制作数字人 根据自己的电脑位数&#xff0c;选择打开 选…

修改一个教材上的网站源码使它能在www服务器子目录上正常运行

修改一个教材上的网站源码&#xff0c;使它能在www服务器子目录上正常运行。 该网站源码是教材《PHPMySQL网站开发项目式教程》上带的网站源码。该源码是用 php html 写的。该源码包含对mysql数据库进行操作的php代码。以前该网站源码只能在www服务器的根目录上正常运行&…

【Docker】技术架构演变

【Docker】技术架构演变 目录 【Docker】技术架构演变架构中的概念架构演进单机架构相关软件 应用数据分离架构应用服务集群架构相关软件 读写分离/主从分离架构相关软件 引入缓存——冷热分离架构相关软件 垂直分库&#xff08;分布式数据库架构&#xff09;相关软件 业务拆分…

第八篇 - 预测受众(Predictive audience)技术是如何赋能数字化营销生态的?- 我为什么要翻译介绍美国人工智能科技巨头IAB公司

IAB平台&#xff0c;使命和功能 IAB成立于1996年&#xff0c;总部位于纽约市。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司&#xff0c;互动广告局&#xff08;IAB- the Interactive Advertising Bureau&#xff09;自1996年成立以来&#xff0c;先后为700多家媒…

Android制作.9图回忆

背景 多年前&#xff0c;做app开发遇到IM需求&#xff0c;那会用到.9图做聊天气泡背景&#xff0c;现在总结下使用png图片制作.9图。方法有很多&#xff0c;这里主要介绍Android studio制作.9图。当然使用ps、draw9patch都行。 第一步、打开Android studio&#xff0c;切换到dr…

【Linux实践室】Linux常用命令:文件操作|文件夹操作

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;Linux实践室、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 一. ⛳️任务描述二. ⛳️相关知识2.1 &#x1f514;Linux文件操作2.1.1 &#x1f47b;创建文件2…

【粉丝福利】一本书讲透ChatGPT,实现从理论到实践的跨越!大模型技术工程师必读

&#x1f33c;一、前言 OpenAI 在 2022 年 11 月推出了人工智能聊天应用—ChatGPT。它具有广泛的应用场景&#xff0c;在多项专业和学术基准测试中表现出的智力水平&#xff0c;不仅接近甚至有时超越了人类的平均水平。这使得 ChatGPT 在推出之初就受到广大用户的欢迎&#xf…

速卖通关键字搜索API接口实战:Python代码与搜索策略解析

一、速卖通关键字搜索API简介 速卖通&#xff08;AliExpress&#xff09;作为阿里巴巴旗下的国际电商平台&#xff0c;为卖家和买家提供了便捷的交易渠道。其开放平台提供的API接口允许开发者集成速卖通的各种功能&#xff0c;其中之一就是关键字搜索API。通过这个API&#xf…