java-类和对象

news2025/3/13 18:28:37

1.面向对象

1.1 区分面向对象与面向过程

举个例子:

在传统的洗衣服过程中,需要经历防水,放衣服,放洗衣粉,搓洗,换水......多个步骤,每个过程都是不可或缺的,关注的是过程.

而现在的洗衣服过程,就需要我们把衣服,洗衣粉放入洗衣机,启动洗衣机即可,并不需要关注洗衣机是如何运行的(即不需要关注洗衣过程).整个过程主要是:人,洗衣粉,衣服,洗衣机四个对象之间交互完成的.

2.类的定义和使用

2.1 类的定义格式

①需要用到class关键字

②类名采用大驼峰定义

③成员前写法统一为public

④public修饰的类必须要与文件名相同

⑤main方法所在的类一般使用public修饰

public class PetDog {
    public String name;
    public String color;
    public int age;
    
    public void barks(){
        System.out.println(name+ ":汪汪汪");
    }
    
    public void wag(){
        System.out.println(name+ ":摇尾巴");
    }
}

其中,属性称为类的成员变量,功能称为类的成员方法.

3.类的实例化

3.1 概念

  • 之前我们使用int,double来定义类型,而定义了一个类,就相当于定义了一种新的类型,同int等类似,而这些类可以定义实例(对象).
  • 用类类型创建对象的过程,成为类的实例化.Java中采用new关键字,配合类名来实例化对象.
public class PetDog {
    public String name;
    public String color;
    public int age;

    public void barks(){
        System.out.println(name+ ":汪汪汪");
    }

    public void wag(){
        System.out.println(name+ ":摇尾巴");
    }


    public static void main(String[] args) {
        PetDog petDog = new PetDog();
        petDog.name = "xxx";
        petDog.color = "黄色";
        petDog.age = 10;
        petDog.barks();
        petDog.wag();
    }
}

注意:同一个类可以创建多个实例.

4.this引用

4.1 引入

先看此代码:

public class Date {
    public int year;
    public int month;
    public int day;

    public void setDay(int y, int m, int d){
        year = y;
        month = m;
        day = d;
    }

    public void printDate(){
        System.out.println(year+"/"+month+"/"+day);
    }

    public static void main(String[] args) {
        Date d1 = new Date();
        Date d2 = new Date();
        Date d3 = new Date();

        d1.setDay(2020,4,7);
        d2.setDay(2021,6,8);
        d3.setDay(2022,1,2);

        d1.printDate();
        d2.printDate();
        d3.printDate();

    }
}

结果为:

思考:

①如果形参名和成名变量名相同呢?

此时并不会给成员变量赋值,而是形参赋给了形参.

②三个对象都在调用setDate和printDate函数,但是两个函数中并没有任何有关对象的说明,那么这两个函数如何知道设置和打印的是哪个对象的数据呢?

4.2 this引用的使用

this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过改引用去访问.

注意:

①this只能在成员方法中使用

②在成员方法中,this只能引用当前对象,不能再引用其它对象

5.对象的构造及初始化

5.1 初始化对象

我们都知道,在方法内部定义个局部变量式,必须要初始化,否则编译失败:

如果是对象:

那么我们思考:

①每次对象创建好后调用方法设置具体日期,很麻烦,那么对象该如何初始化

②局部变量必须初始化才能使用,为什么字段声明之后没有给值就可以使用?

5.2 构造方法

①构造方法的作用是对对象中的成员进行初始化,并不负责为对象开辟空间.

②名字必须与类名相同,没有返回值类型,void也不行

③一般情况下用public修饰

④在创建对象时,由编译器自动调用,在整个对象的生命周期内只调用一次

⑤构造方法可以重载(名字相同,参数列表不同)

⑥当然,如果用户没有显示定义,编译器默认生成无参构造方法,一旦用户定义,编译器则不再生成

⑦在构造方法中,可以通过this调用其它构造方法简化代码,在无参构造方法中通过this调用带有三个参数的构造方法

⑧不能形成环

5.3 默认初始化

思考:为什么局部变量在使用时必须初始化,而成员变量不用呢?

这是因为对象空间被申请好之后,对象中包含的成员以及设置好了初始值.

5.4 就地初始化

在声明成员变量时,就直接给出初始值

这种方法没什么作用,之后还要进行赋值......

6. static成员

6.1 再谈学生类

  • 如果三个同学是同一个班的,那么他们上课肯定是在同一个教室,那能否给类中再加一个成员变量,来保存同学上课时的教室呢?不行!!!
  • 之前在Student类中定义的成员变量,每个对象中都会包含一份(称之为实例变量),因为需要使用这些信息来描述具体的学生。而现在要表示学生上课的教室,这个教室的属性并不需要每个学生对象中都存储一份,而是需要让所有的学生来共享。

6.2 static修饰成员变量

static修饰的成员变量,称为静态成员(类成员)变量.

【静态成员变量特性】

1. 不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中

2. 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问

3. 类变量存储在方法区当中

4. 生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁)

public class Student{
    public String name;
    public String gender;
    public int  age;
    public double score;
    public static String classRoom = "Bit306";
    
    // ...
    
    public static void main(String[] args) {
        // 静态成员变量可以直接通过类名访问
        System.out.println(Student.classRoom);
 
        Student s1 = new Student("Li leilei", "男", 18, 3.8);
        Student s2 = new Student("Han MeiMei", "女", 19, 4.0);
        Student s3 = new Student("Jim", "男", 18, 2.6);
 
        // 也可以通过对象访问:但是classRoom是三个对象共享的
        System.out.println(s1.classRoom);
        System.out.println(s2.classRoom);
        System.out.println(s3.classRoom);
     }
}

6.3 static修饰成员方法

一般类中的数据成员都设置为private,而成员方法设置为public,那设置之后,Student类中classRoom属性如何在类外访问呢?

Java中,被static修饰的成员方法称为静态成员方法,是类的方法,不是某个对象所特有的。静态成员一般是通过静态方法来访问的

【静态方法特性】

1. 不属于某个具体的对象,是类方法

2. 可以通过对象调用,也可以通过类名.静态方法名(...)方式调用,更推荐使用后者

3. 不能在静态方法中访问任何非静态成员变量

4. 静态方法中不能调用任何非静态方法,因为非静态方法有this参数,在静态方法中调用时候无法传递this引用

补充:

①引用不可以指向引用

引用只能指向对象,下述代码的意思是:student2这个引用指向了student1这个引用所指向的对象

②一个引用不能指向多个对象——海王??

③Person p = null表示不指向任何对象 

student不指向任何对象,room不属于对象,是类的,所以不存在空指针异常

④ 静态方法中不能调用任何非静态方法,因为非静态方法依赖对象

public class Test2 {
    public static void main(String[] args) {
        Student.funcStatic();
    }
}

class Student{
    public String name;
    public int age;
    //普通成员变量

   //类方法 不依赖对象
    public static void funcStatic(){
        System.out.println("funcStatic()......");
    }
}

 

 

 在静态方法中调用时候无法传递this引用

6.4 static成员变量初始化

1.就地初始化

2.静态代码块初始化

......

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

长期护理保险可改善老年人心理健康 | CHARLS CLHLS CFPS 公共数据库周报(3.6)...

欢迎报名2024年“真实世界临床研究”课程! 本周郑老师开讲:“真实世界临床研究”培训班,3月16-17日两天,欢迎报名! CHARLS公共数据库‍ CHARLS数据库简介中国健康与养老追踪调查(China Health and Retirement Longitud…

Upload-labs 靶场通关攻略(全网最全最完整)

一、环境 在github上找upload-labs-0.1环境,部署在小皮面板上 upload靶机包 也可以直接下载他的集成的环境 二、闯关 1、Pass-01(前端验证) 文件上传漏洞就是利用我们上传的后门文件可以服务器进行解析 首先我们要写一个一句话木马文件…

AI大模型额外学习一:斯坦福AI西部世界小镇笔记

文章目录 一、简单介绍1)项目代码介绍2)重新播放模拟3)适当修改分叉模拟 二、部署斯坦福小镇Demo1)准备工作2)解决遇到的bug3)启动服务器和前端 github链接 一、简单介绍 ①背景介绍 This repository acc…

声明式事务还是编程式事务,如何选择?

(/≧▽≦)/~┴┴ 嗨~我叫小奥 ✨✨✨ 👀👀👀 个人博客:小奥的博客 👍👍👍:个人CSDN ⭐️⭐️⭐️:Github传送门 🍹 本人24应届生一枚,技术和水平有…

[善用佳软]推荐掌握小工具:Json解析的命令行工具jq

前言: 我们在各种生产环境或者开发测试环境中,一定遇到有很多信息都是使用JSON串或者文本文件作为输入的。在没有JQ命令行工具之前,我们要从中获取真正的输入,大都把它复制到文本里头,然后使用文本编辑器进行加工整理…

WSL2执行nvidia-smi报错:Command ‘nvidia-smi‘ not found, but can be installed with

报错信息: Command nvidia-smi not found, but can be installed with: sudo apt install nvidia-utils-390 # version 390.157-0ubuntu0.22.04.2, or sudo apt install nvidia-utils-418-server # version 418.226.00-0ubuntu5~0.22.04.1 sudo apt insta…

LeetCode 热题 100 | 回溯(二)

目录 1 39. 组合总和 2 22. 括号生成 3 79. 单词搜索 菜鸟做题,语言是 C,感冒快好版 关于对回溯算法的理解请参照我的上一篇博客; 在之后的博客中,我将只分析回溯算法中的 for 循环。 1 39. 组合总和 题眼:c…

程序员的知识宝库,100+开源书籍、文档

公众号:【可乐前端】,每天3分钟学习一个优秀的开源项目,分享web面试与实战知识,也有全栈交流学习摸鱼群,期待您的关注! 每天3分钟开源 hi,这里是每天3分钟开源,很高兴又跟大家见面了&#xff0…

代码随想录刷题笔记 Day 52 | 打家劫舍 No.198 | 打家劫舍 II No.213 | 打家劫舍III No.337

文章目录 Day 5201. 打家劫舍&#xff08;No. 198&#xff09;<1> 题目<2> 笔记<3> 代码 02. 打家劫舍 II&#xff08;No. 213&#xff09;<1> 题目<2> 笔记<3> 代码 03.打家劫舍III&#xff08;No. 337&#xff09;<1> 题目<2&g…

RocketMQ学习笔记三(黑马)大神级

课程来源:6.RocketMQ安装_哔哩哔哩_bilibili (时长:19.5h) 讲解版本:4.5版本(我是以4.8版本实践的) 目录 第一部分 核心功能 第1章 RocketMQ的下载、安装、启动和测试(Linux环境) 启动: 测试: 第2章 RocketMQ集群搭建 2.1 集群特点 2.2 集群模式 2.3 双主…

HTML_CSS练习:HTML注释

一、代码示例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>HTML注释</title> </head> <body><marquee loop"1">马龙强<!--下面的输入框是可以滚动的&#x…

新手必看!YouTube运营教程:你需要的策略、工具和技巧

欢迎来到 YouTube 的世界&#xff01;对于跨境电商和海外社媒营销人员来说&#xff0c;YouTube 是一个充满机遇的宝地。无论你是希望通过视频内容扩大品牌影响力&#xff0c;还是想要抓住全球买家的注意力&#xff0c;掌握YouTube运营的基础是你成功的第一步。本篇教程将为你揭…

云与云计算:从传统到云端的IT资源变革

云&#xff1a;从分散到集约&#xff0c;资源服务化的新模式 让我们先通过一个生活化的场景来理解“云”这一概念。几十年前&#xff0c;诸如农村地区的居民需要自给自足&#xff0c;比如在自家院子里打井取水&#xff0c;冬季烧煤取暖&#xff0c;一切满足自己生活需要的都要…

健康消费需求持续上涨,品牌如何抓住机遇

近年来&#xff0c;国内“大健康”时代徐徐展开&#xff0c;居民消费热度不断攀升&#xff0c;主动健康消费已经成为新的增长点&#xff0c;然而健康行业的内容由于专业性较高&#xff0c;传播范围有限导致无法直接触达用户。在当下的传播环境中&#xff0c;品牌应该如何抓住机…

百万级excel导入导出

项目目录结构&#xff1a; * 导入思路&#xff1a; excel拆分为多个sheet&#xff0c;开启20个线程分别处理20个sheet&#xff0c;采用批量插入的方式入库 * 导出思路&#xff1a; 开启20个线程分页读取数据&#xff0c;放入到map中&#xff0c;CountDownLatch保证并发安全…

C++(14)——vector

目录 vector是什么&#xff1f; vector的使用 vector的构造 vector iterator的使用 vector空间增长问题 vector的增删查改 push_back和pop_back operator[] 总结 vector是什么&#xff1f; vector是什么呢&#xff1f;按照英文来说&#xff0c;vector的英文是向量、矢…

Lord 3DMCV7-AHRS 时间同步硬件触发设置

目的:通过FPGA发送脉冲触发IMU采集数据。FPGA发送脉冲时,IMU才有数据产生。 FPGA与IMU的硬件接线就不讲了,这里主要说明的是IMU的设置以及ROS驱动的config文件更改。 1. WIN上位机设置 通过IMU在WINDOWS的上位机SensorConnect对IMU的GPIO、波特率等基本功能进行设值,具体…

视频素材软件app免费网站哪里找?

在如今的短视频时代&#xff0c;为了满足视频素材创作者们的需求&#xff0c;有很多提供免费短视频素材下载的应用程序可供选择。 接下来&#xff0c;我们将对视频素材软件app免费网站哪里找做出介绍 可以考虑以下几个视频素材软件app免费 蛙学网 提供多元化视频&#xff0c…

面试常问:你在项目中遇到了哪些比较棘手的问题?怎么解决的?

你在项目中遇到了哪些比较棘手的问题?怎么解决的&#xff1f;这个问题是面试官经常会问的一个问题。 如果你回答我在项目中没有怎么遇到&#xff0c;那么面试官会觉得你什么都不会&#xff0c;对项目了解也不够深入也没有负责什么项目。 面试官其实还挺关心的是应聘者的问题…

注意力机制Attention、CA注意力机制

一、注意力机制 产生背景&#xff1a; 大数据时代&#xff0c;有很多数据提供给我们。对于人来说&#xff0c;可以利用重要的数据&#xff0c;过滤掉不重要的数据。那对于模型来说&#xff08;CNN、LSTM&#xff09;&#xff0c;很难决定什么重要、什么不重要&#xff0c;因此…