【Java SE 】类和对象详解

news2024/12/23 21:05:26

 🔥博客主页🔥:【 坊钰_CSDN博客 】

欢迎各位点赞👍评论✍收藏⭐

目录

1, 面向对象认识

1.1 什么时面向对象

1.2 面向对象和面向过程

1.2.1 一个例子理解对象和过程

1. 对于电脑来说

2. 对于我们人来说

 2. 类的定义和使用

2.1 简单认识类

2.2 类定义的格式

3. 类的实例化 

4. this 引用

5. 对象的构造和初始化

5.1 构造方法

5.2 构造方法重载

5.3 this 调用构造器

6. 默认初始化

7. 小结


 

1, 面向对象认识

1.1 什么时面向对象

Java 可以说是一门纯面向对象的编程语言(简称 OOP),面向对象是一种思路,依靠对象间的交互来完成一件事情。

1.2 面向对象和面向过程

像 C语言 就是一门面向过程的语言,没有那么抽象,而 Java 则与之相比抽象很多

1.2.1 一个例子理解对象和过程

  • 电脑开机 
1. 对于电脑来说

 电脑内部执行很多步骤------------------> 这就叫面向过程

2. 对于我们人来说

 我们只需要简单几步就完成了-----------------------------> 这就叫面向对象

 2. 类的定义和使用

2.1 简单认识类

类就是用来对一个对象进行描述的,主要描述对象有哪些属性,那些功能

如:电脑

属性:品牌、尺寸、颜色......

功能:看视频、打游戏......

那么,我们该如何定义类呢?

2.2 类定义的格式

Java 中定义类要用到 class 关键字

class ClassName {   //类名称
    nature;  //属性
    method   //方法、功能
}

用代码定义电脑类

public class Computer {
    
    public String color;  //颜色
    public int size;      //尺寸
    public String function;     //性能
    
    public void watchVideo() {
        System.out.println("看动画片");
    }
    
    public void playGame() {
        System.out.println("打游戏");
    }
    
}

这样一个简单的电脑类就定义好了

注意事项

  • 类名采用大驼峰命名法
  • 属性前用 public 修饰,后续会讲
  • 成员方法前不带 static 修饰,后续会讲

3. 类的实例化 

那我们定义了一个类后,该如何使用它呢?

这时就要用到类的实例化了,在 Java 中用 new 关键字来进行实例化

//用电脑类来示范
Computer computer = new Computer();
public class Computer {

    String color;  //颜色
    int size;      //尺寸
    String function;     //性能

    public void watchVideo() {
        System.out.println("看动画片");
    }

    public void playGame() {
        System.out.println("打游戏");
    }

    public static void main(String[] args) {
        Computer computer = new Computer();
        computer.watchVideo();
        computer.playGame();
    }

}

注意事项

  • 用 new 关键字创造一个对象的实例
  • 使用 . 来访问对象中的属性和方法
  • 一个类可创建多个实例对象 

4. this 引用

 this 是指向当前对象,可通过 this 来访问类中的成员属性,成员方法

我们创建一个时间的类

public class Day {

    public int year;
    public int month;
    public int day;

    public void setDay(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }
    
    public void dayPrint(){
        System.out.println(this.year + " 年 " + this.month + " 月 " + this.day + " 日 ");
    }

    public static void main(String[] args) {
        Day day1 = new Day();
        day1.setDay(2024,10,17);
        day1.dayPrint();
    }

}

当形参的名字和成员属性的名字一样时,用 this 关键字可以指定当前类的成员属性,避免和形参搞混淆

注意事项

  • 那个对象调用,this 就是那个对象的引用类型
  • this 只能在成员方法发中使用,且只能引用当前对象,不能引用其他对象
  • this 是成员方法(除去静态方法)的第一个隐藏的参数,所以才能使用本类的属性和方法

5. 对象的构造和初始化

5.1 构造方法

构造方法可以给成员属性直接初始化

public class Day {

    public int year;
    public int month;
    public int day;

    public Day(int year, int month, int day) {    //构造方法 或叫 构造器
        this.year = year;
        this.month = month;
        this.day = day;
    }
    public void dayPrint(){
        System.out.println(this.year + " 年 " + this.month + " 月 " + this.day + " 日 ");
    }

    public static void main(String[] args) {
        Day day1 = new Day(2024,10,17); // 直接就地初始化
    }

}

注意事项

  • 构造方法必须和类名一样
  • 构造方法没有返回值,也不能有 void 
  • 如果不写构造方法,编译器会自动添加一个无参的构造方法
public class Day {

    public int year;
    public int month;
    public int day;

    //不写构造方法,编译器会自动添加
    //public Day(){}     编译器自动添加的
    
    public void dayPrint(){
        System.out.println(this.year + " 年 " + this.month + " 月 " + this.day + " 日 ");
    }

    public static void main(String[] args) {
        Day day1 = new Day(); // 编译器自动添加无参构造器,所以这里不会报错
    }

}
  •  但是,如果写了有参数的构造器,无参构造器则不会添加

5.2 构造方法重载

public class Day {

    public int year;
    public int month;
    public int day;

    public Day(int year, int month, int day) {    //构造方法 或叫 构造器
        this.year = year;
        this.month = month;
        this.day = day;
    }

    public Day(int month, int day) {
        this.month = month;
        this.day = day;
    }

    public void dayPrint(){
        System.out.println(this.year + " 年 " + this.month + " 月 " + this.day + " 日 ");
    }

    public static void main(String[] args) {
        Day day1 = new Day(2024,10,17); // 直接就地初始化
        Day day2 = new Day(10,17); // 直接就地初始化
        
    }

}
  •  有多个标签(参数列表)不同的构造方法,就构成了构造方法的重载

5.3 this 调用构造器

 this 关键字除了,调用成员属性和方法外,还可以调用构造方法

public class Day {

    public int year;
    public int month;
    public int day;

    public Day() {
        this(2024,10,17);  //必须放在第一行,否则会报错
    }

    public Day(int year, int month, int day) {    //构造方法 或叫 构造器
        this.year = year;
        this.month = month;
        this.day = day;
    }

    public void dayPrint(){
        System.out.println(this.year + " 年 " + this.month + " 月 " + this.day + " 日 ");
    }

    public static void main(String[] args) {
        Day day1 = new Day(2024,10,17); // 直接就地初始化
        Day day2 = new Day(); // 直接就地初始化

    }

}

注意事项

  • this 关键字调用构造方法时,代码必须放在第一行
  • 不能形成环(互相调用)
public class Day {

    public int year;
    public int month;
    public int day;

    public Day() {
        this(2024,10,17);  //必须放在第一行,否则会报错
    }

    public Day(int year, int month, int day) { 
        this();   //这里会报错
        this.year = year;
        this.month = month;
        this.day = day;
    }

    public void dayPrint(){
        System.out.println(this.year + " 年 " + this.month + " 月 " + this.day + " 日 ");
    }

    public static void main(String[] args) {
        Day day1 = new Day(2024,10,17); // 直接就地初始化
        Day day2 = new Day(); // 直接就地初始化

    }

}
  •  上述代码会报错,不能够形成环

6. 默认初始化

 当我们类建立好之后,如果不给成员变量初始化,那他们有默认的初始化值

public class Day {

    byte a;
    char b;
    short c;
    int d;
    long e;
    boolean f;
    float g;
    double h;
    String i;

    public static void main(String[] args) {
        Day day = new Day();
        System.out.println("byte    = " + day.a);
        System.out.println("char    = " + day.b);
        System.out.println("short   = " + day.c);
        System.out.println("int     = " + day.d);
        System.out.println("long    = " + day.e);
        System.out.println("boolean = " + day.f);
        System.out.println("float   = " + day.g);
        System.out.println("double  = " + day.h);
        System.out.println("String  = " + day.i);

    }

}

默认值图解如下 

7. 小结

以上就是对类和对象的了解,具体还需宝子们去实践,如果觉得该博客对你有用的话,希望一键三连,点个关注不迷路,谢谢支持 !

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

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

相关文章

还在为调用大模型API接口返回数据的处理问题烦恼???来看看这篇文章,解决你的烦恼!!!

大家好!我是学徒小z,今天给大家分享一下我做项目过程中遇到的一个问题。 文章目录 问题大模型接口解决方案流式返回和回调函数另一个问题1. 使用web组件2. 使用第三方库 问题 不知道大家有没有遇到这样一个问题。在调用大模型接口的时,返回…

Lnmp(mysql分离)(nginx 1.13.6+mysql5.5+php5.3)环境一键搭建

Lnmp(mysql分离)(nginx 1.13.6mysql5.5php5.3)环境一键搭建 如果对运维课程感兴趣,可以在b站上、csdn或微信视频号 上搜索我的账号: 运维实战课程,可以关注我,学习更多免费的运维实…

深度学习之残差网络ResNet

文章目录 1. 残差网络定义2. 数学基础函数类3. 残差块4.ResNet模型5.训练模型6.小结 1. 残差网络定义 随着我们设计的网络越来越深,深刻理解“新添加的层如何提升神经网络的性能”变得至关重要。更重要的是设计网络的能力。在这种网络中,添加层会使得网…

单例模式:为何继承无法保证子类的单例特性

这里写目录标题 一、引言二、背景描述三、单例模式的规范边界全局访问点与静态工厂方法代码示例与注意事项 四、单例实现继承遇到的问题五、结论与替代方案结论替代方案特殊的想法🌸🌸源码阶段验证编译阶段验证运行阶段验证总结 一、引言 在软件设计中&a…

实时语音转文字(基于NAudio+Whisper+VOSP+Websocket)

今天花了大半天时间研究一个实时语音转文字的程序,目的还包括能够唤醒服务,并把命令提供给第三方。 由于这方面的材料已经很多,我就只把过程中遇到的和解决方案简单说下。源代码开源在AudioWhisper: 实时语音转文字(基于NAudioWhisperVOSPWe…

基于SSM的个性化商铺系统【附源码】

基于SSM的个性化商铺系统 效果如下: 用户登录界面 app首页界面 商品信息界面 店铺信息界面 用户功能界面 我的订单界面 后台登录界面 管理员功能界面 用户管理界面 商家管理界面 店铺信息管理界面 商家功能界面 个人中心界面 研究背景 研究背景 科学技术日新月异…

Leetcode 每日温度

class Solution {public int[] dailyTemperatures(int[] temperatures) {int n temperatures.length;Stack<Integer> stack new Stack<>();//默认将数组中的所有元素初始化为 0int[] results new int[n];for(int i 0; i < n; i) {while(!stack.isEmpty() &a…

leaflet前端JS实现高德地图POI兴趣点批量分类下载(附源码下载)

前言 leaflet 入门开发系列环境知识点了解&#xff1a; leaflet api文档介绍&#xff0c;详细介绍 leaflet 每个类的函数以及属性等等leaflet 在线例子leaflet 插件&#xff0c;leaflet 的插件库&#xff0c;非常有用 内容概览 leaflet前端JS实现高德地图POI兴趣点批量分类下载…

小猿口算炸鱼脚本

目录 写在前面&#xff1a; 一、关于小猿口算&#xff1a; 二、代码逻辑 1.数字识别 2.答题部分 三、代码分享&#xff1a; 补充&#xff1a;软件包下载 写在前面&#xff1a; 最近小猿口算已经被不少大学生攻占&#xff0c;小学生直呼有挂。原本是以为大学生都打着本…

【Python爬虫】看电影还在用VIP?一个python代码让你实现电影自由!附源码

今日主题 如何用Python解析vip电影。 什么是vip电影&#xff1f; 这些vip电影啊&#xff0c;想要观看的话&#xff0c;必须充值会员&#xff0c;否则没法看。 比如这个&#xff1a; 这些vip电影解析后呢&#xff1f; 不需要会员&#xff0c;不需要登录&#xff0c;可以直接…

Java-类与对象

一、面向对象 在了解类与对象前&#xff0c;我们需要先知道"面向对象"这个词的概念&#xff1a; 在Java语言中&#xff0c;我们的主要思想就是"面向对象"&#xff0c;而在之前我们所学习的C语言中大部分时候的思想是"面向过程"。 那么什么是&…

MySQL-10.DML-添加数据insert

一.DML(INSERT) -- DDL&#xff1a;数据操作语言 -- DML&#xff1a;插入数据 - insert -- 1.为tb_emp表的username&#xff0c;name&#xff0c;gender字段插入值 insert into tb_emp (username,name,gender) values (wuji,无忌,1); -- 这样会报错&#xff0c;因为create_ti…

DS堆的实际应用(10)

文章目录 前言一、堆排序建堆排序 二、TopK问题原理实战创建一个有一万个数的文件读取文件并将前k个数据创建小堆用剩余的N-K个元素依次与堆顶元素来比较将前k个数据打印出来并关闭文件 测试 三、堆的相关习题总结 前言 学完了堆这个数据结构的概念和特性后&#xff0c;我们来看…

限时设计ui

ctrl-------放大缩小 空格-----画面移动 alt------复制 页面<画板<图层 添加交互事件 原型 点击蓝色的圆&#xff0c;从1跳转到2 点击绿色的圆&#xff0c;从2跳转到1

基于SSM+Vue+MySQL的健身房管理系统

系统展示 系统背景 随着人们生活水平的提高和健康意识的增强&#xff0c;越来越多的人选择去健身房锻炼。传统的健身房管理方式往往依赖于纸质记录和人工操作&#xff0c;这种方式不仅效率低下&#xff0c;而且容易出错。为了提高健身房的管理效率和服务质量&#xff0c;开发一…

python项目实战——下载美女图片

python项目实战——下载美女图片 文章目录 python项目实战——下载美女图片完整代码思路整理实现过程使用xpath语法找图片的链接检查链接是否正确下载图片创建文件夹获取一组图片的链接获取页数 获取目录页的链接 完善代码注意事项 完整代码 import requests import re import…

图文检索综述(2):Deep Multimodal Data Fusion

Deep Multimodal Data Fusion 摘要1 引言2 基于编码器-解码器融合2.1 数据级别融合2.2 分层特征融合2.3 决策级别融合 3 基于注意力融合3.1 模态内的自注意力3.2 模态间的交叉注意力3.3 基于transformer的方法 4 基于图神经网络融合4.1 单个模态的表示学习4.2 融合数据的表示学…

【数据结构】宜宾大学-计院-实验三

线性表的应用——实现两多项式的相加 课前准备&#xff1a;实验学时&#xff1a;2实验目的&#xff1a;实验内容&#xff1a;实验结果&#xff1a;实验报告:&#xff08;及时撰写实验报告&#xff09;实验测试结果&#xff1a;代码实现&#xff1a;&#xff08;C/C&#xff09;…

Java 小游戏《超级马里奥》

文章目录 一、效果展示二、代码编写1. 素材准备2. 创建窗口类3. 创建常量类4. 创建动作类5. 创建关卡类6. 创建障碍物类7. 创建马里奥类8. 编写程序入口 一、效果展示 二、代码编写 1. 素材准备 首先创建一个基本的 java 项目&#xff0c;并将本游戏需要用到的图片素材 image…

华为 HCIP-Datacom H12-821 题库 (38)

&#x1f423;博客最下方微信公众号回复题库,领取题库和教学资源 &#x1f424;诚挚欢迎IT交流有兴趣的公众号回复交流群 &#x1f998;公众号会持续更新网络小知识&#x1f63c; 1.请对 2001:0DB8:0000:C030:0000:0000:09A0:CDEF 地址进行压缩。&#xff08; &#xff09;&…