JavaSE:类与对象

news2024/11/15 9:09:24

目录

一、前言

二、类与对象的介绍

1.类的定义格式

 三、类的实例化

1.类的实例化介绍

2.成员初始化

3.类中方法的实现

四、封装

1.private实现封装

2.getter和setter方法

五、构造方法的使用

1.构造方法的介绍

2.构造方法的特性

六、this引用

1.this的介绍

2.this的特性

七、static静态关键字

八、总结


一、前言

大家好鸭!通过上一篇博文的学习,相信你们都了解Java中的数据类型与变量、运算符。今天蜡笔小欣带大家一起走进Java的知识世界,去认识Java中的类与对象。

二、类与对象的介绍

这里的对象可不是我们现实中的对象,当然你们也可以自己new一个对象,哈哈哈哈小欣就不再开玩笑了。在计算机中,它不能像我们人一样去理解世界上的东西,为了更好的编辑,就抽象出了类和对象。类是用来对一个实体(对象)来进行描述的,通过把这个功能放在一起,然后由一个人去调用这个类的功能,接着编写相应的功能,而这个调用者就是对象的实现者。

1.类的定义格式

java 中定义类时需要用到 class关键字 ,具体语法如下:
// 创建类
class ClassName {
field ; // 字段 ( 属性 ) 或者 成员变量
method ; // 行为 或者 成员方法
}

class定义类的关键字,ClassName为类的名字,{}中为类的主体。类中包含的内容称为类的成员属性主要是用来描述类的,称之为类的成员属性或者类成员变量方法主要说明类具有哪些功能,称为类的成员方法

Tips:

1.类名注意采用大驼峰定义。
2.成员前写法统一为 public。
3.此处写的方法不带 static 关键字。

下面我们举个例子让大家熟悉熟悉,接下来我们定义一个学生类。

public class Student {//学生类
    public String name;
    public String gender;
    public short age;
    public double score;

    public void DoClass() {
        System.out.println("按时上课,不要迟到,如果请假,及时去补");
    }

    public void DoHomework() {
        System.out.println("教务系统,完成作业,一旦拖沓,神仙难救");
    }

    public void Exam() {
        System.out.println("考试目的,了解学情,人人必考,暴露问题");
    }
}

 注意事项:

1. 一般一个文件当中只定义一个类,
2. main 方法所在的类一般要使用 public 修饰 ( 注意: Eclipse 默认会在 public 修饰的类中找 main 方法 ),
3. public 修饰的类必须要和文件名相同,
4. 不要轻易去修改 public 修饰的类的名称

 三、类的实例化

1.类的实例化介绍

定义了一个类,就相当于在计算机中定义了一种新的类型,有了这些自定义的类型之后,就可以使用这些类来定义实例 ( 或者称为对象 ), 用类类型创建对象的过程,称为类的实例化 ,在 java 中采用 new 关键字,配合类名来实例化对象

class Person {
    public String name;
    public int age;
}

public class Test {
    public static void main(String[] args) {
        Person person1 = new Person();
        Person person2 = new Person();
        Person person3 = null;
    }
}

这里Person 就是一个类,它里面的 name 和 int 就是类的成员,这里的 person1 就是引用,它指向后面 new 的对象,因为是引用,所以也可以指向 null 。而这里的person3就是指向空(null)引用。person1、person2、person3就是实例化的对象。

2.成员初始化

我们在创建类里的这些成员的时候就可以对它们进行初始化。

class Student {
    public String name = "张三";
    public int age = 18;
}

上面就是我们创建学生类的成员时,对它们进行初始化。但小欣不建议大家一开始救直接初始化,而是在类的调用者使用的时候再初始化。具体的代码如下:

class Student {
    public String name;
    public int age;
}

public class Test {
    public static void main(String[] args) {
        Student student = new Student();
        student.name = "张三";
        student.age = 18;
        System.out.println(student.name);
        System.out.println(student.age);

    }
}

运行结果如下:

我们在类的调用者里面对类的成员进行赋值,然后在 main 方法当中,通过引用来进行调用。

3.类中方法的实现

 我们可以在类的里面写一个方法,调用这个方法后,直接返回名字和年龄。方法如下:

class Student {
    public String name;
    public int age;
    public void func() {
        System.out.println("姓名:" + name + " 年龄:" + age);
    }
}

public class Test {
    public static void main(String[] args) {
        Student student = new Student();
        student.name = "张三";
        student.age = 18;
        student.func();
    }
}

 运行结果如下:

当我们要输出姓名和年龄的时候,就一个一个地去调用输出,直接调用类中的这个方法就可以。

四、封装

1.private实现封装

private是用来修饰成员变量或方法的关键字,被private修饰之后,就不能被类外的调用者访问了,这样就可以配合 public 来实现对外的接口。

我们可以这样理解:
1.public :一个人的外貌特征,谁都可以看得到
2.default: 对于自己家族中 ( 同一个包中 ) 不是什么秘密,但对于其他人来说就是隐私了
3.private :只有自己知道,其他人都不知道。

下面我们通过一个例子来帮助我们更好的理解。

class Student {
    private String name = "张三";
    private int age = 18;
    public void func() {
        System.out.println("姓名:" + name + " 年龄:" + age);
    }
}

public class Test {
    public static void main(String[] args) {
        Student student = new Student();
        student.func();
    }
}

运行结果: 

上面我们通过利用private的封装属性,使其只能在类里面被访问到。后面的public方法让类的调用者在类外就可以访问到了。所以在类外直接调用func方法就可以输出结果。

2.getter和setter方法

我们把类里面的成员设置为private的属性时,就不能再类外面对它们进行初始化,但我们想在类外将这些成员赋其他的值,我们就可以使用getter和setter方法。

getter :在类外面获取成员变量的值

setter :在类外直接调用此方法,然后设置一个值。

class Student {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void func() {
        System.out.println("姓名:" + name + " 年龄:" + age);
    }
}

public class Test {
    public static void main(String[] args) {
        Student student1 = new Student();
        Student student2 = new Student();
        student1.setName("张三");
        student1.setAge(10);
        student1.func();
        student2.setName("李四");
        student2.setAge(18);
        student2.func();
    }
}

 输出结果:

上面因为private对name和age做了封装,所有我们调用setter方法,在类外进行访问。在Java中我们如果使用在类里使用privata对成员变量进行封装,可以鼠标右键点击Generate,选择Getter和Setter,然后选择哪些成员变量要生成Getter和Setter方法,最后点击OK就自动生成好了,这样让我们在写代码是更加方法。具体步骤如下:

五、构造方法的使用

1.构造方法的介绍

构造方法 ( 也称为构造器 ) 是一个特殊的成员方法, 名字必须与类名相同,在创建对象时,由编译器自动调用,并且 在整个对象的生命周期内只调用一次
注意:构造方法的作用就是对对象中的成员进行初始化,并不负责给对象开辟空间。

2.构造方法的特性

构造方法有以下这几种特性:
1.构造方法的名字必须与类名相同,
2. 没有返回值类型,设置为 void 也不行,
3. 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次 ( 相当于人的出生,每个人只能出生一次 ),
4. 构造方法可以重载 ( 用户根据自己的需求提供不同参数的构造方法 ),
5. 如果用户没有显式定义,编译器会生成一份默认的构造方法,生成的默认构造方法一定是无参的,
6. 构造方法中,可以通过 this 调用其他构造方法来简化代码,
7.绝大多数情况下使用 public 来修饰,特殊场景下会被 private 修饰。
注意:一旦用户定义,编译器则不再生成。

下面实现一个不带参数的构造方法: 

class Student {
    public Student() {
        System.out.println("这是不带参数的构造方法");
    }
}

public class Test {
    public static void main(String[] args) {
        Student student = new Student();
    }
}

输出结果如下: 

我们在实例化类的对象的时候调用它的构造方法,因为上面我们自己写了构造方法,所以这里就调用我们写过的。但要注意:如果我们没有写构造方法,编译器会自己帮我们默认生成不带参数的构造方法。所以一个类,至少会有一个构造方法。 

既然可以实现不带参数的构造方法,也就有带参数的构造方法,具体如下所示:

class Student {
    private String name;

    public Student(String name) {
        this.name = name;
        System.out.println("Studnet(Sting)带一个参数的构造方法");
    }
}

public class Test {
    public static void main(String[] args) {
        Student student = new Student("张三");
    }
}

 输出结果:

在类初始化的时候,传入参数 "张三" 在类实例化的时候就可以调用带参数的构造方法 。在Java中,如果想生成一个带参的构造方法,可以通过鼠标右键点击Generate,然后点击Constructor,再点击哪个成员要带参数,最后点OK就会自动生成一个带参数的构造方法。具体步骤如下:

六、this引用

1.this的介绍

在类当中this表示当前对象的引用(不是当前对象),我们可以通过this来访问类当中的成员变量和方法。通过使用this可以增加我们代码的可读性。当我们在使用getter和setter的时候,就会用 this。 

class Student {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void func() {
        System.out.println("姓名:" + name + " 年龄:" + age);
    }
}

public class Test {
    public static void main(String[] args) {
        Student student1 = new Student();
        student1.setName("张三");
        student1.setAge(10);
        student1.func();
        
    }
}

2.this的特性

this的几个特性:

1. this 的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型,
2. this 只能在 " 成员方法 " 中使用,
3. " 成员方法 " 中, this 只能引用当前对象,不能再引用其他对象,
4. this 成员方法 第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法,对象的引用传递给该成员方法,this 负责来接收。

七、static静态关键字

Java 中, static 修饰的成员,称之为静态成员,也可以称为类成员,其不属于某个具体的对
象,是所有对象所共享的,静态成员一般是通过 静态方法来访问的。static可以修饰属性,方法。 划重点:static 修饰的变量通过类名访问。
我们一起看看下面这个例子:
class Student {
    private String name;
    private int age;
    private static String classRoom="高三10班";

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public static String getClassRoom() {
        return classRoom;
    }

    public void func() {
        System.out.println("姓名:" + name + " 年龄:" + age);
    }
}

public class Test {
    public static void main(String[] args) {
        Student student = new Student();
        student.setName("王五");
        student.setAge(18);
        student.func();
        System.out.println(Student.getClassRoom());

    }
}

运行结果如下:

所以我们在写代码时,当使用static来修饰方法的时候,不需要再创建对象,直接拿类名调用就可以。

八、总结

类与对象是JavaSE的基础之一,了解并掌握类与对象的概念和使用方法对于Java程序设计是非常重要的。我们写程序时合理的设计和使用类与对象,可以提高我们代码的可读性和可扩展性,进而实现更加灵活和高效的程序设计。今天对Java中的类与对象就分享到这里,感谢大家对蜡笔小欣的关注、鼓励与支持!我也会继续创作并跟大家分享,我们下次再见!!!

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

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

相关文章

基于SpringBoot+MyBatis框架的智慧生活商城系统的设计与实现(源码+LW+部署+讲解)

目录 前言 需求分析 可行性分析 技术实现 后端框架:Spring Boot 持久层框架:MyBatis 前端框架:Vue.js 数据库:MySQL 功能介绍 前台功能拓展 商品详情单管理 个人中心 秒杀活动 推荐系统 评论与评分系统 后台功能拓…

【源码】I.MX6ULL移植OpenCV

编译完成的源码: git clone https://gitee.com/wangyoujie11/atkboard_-linux_-driver.git 1.下载源码放在自己的opecv源码目录下 2.QTOpenCV工程代码放置的位置 3.更改.pro工程文件的opencv地址 4.使用命令行编译 前提是自己环境中已经配置好arm-qt的交叉编译…

【Langchain-Chatchat】部署ChatGLM3-6B-32K教程

介绍 Langchain-Chatchat这个框架可以帮助我们更容易的部署大语言模型,之前也写过ChatGLM传统的部署教程,有兴趣的可以参考 【ChatGLM3】第三代大语言模型多GPU部署指南【ChatGLM2-6B】从0到1部署GPU版本 借助Langchain-Chatchat框架,可以…

从产品组装和维护/维修的角度来看,基于增强现实的指导:关于挑战和机遇的最新综述

作者: 1. M. Eswaran 2. Anil Kumar Gulivindala 3. M.V.A.Raju Bahubalendruni 关于本文 •分析了增强现实在装配和维护/维修中的作用。 •讨论了AR辅助制造系统的软件和硬件元素。 •讨论了AR跟踪和配准技术面临的挑战。 •讨论了AR辅助制造系统的未来…

二分查找法总结

目录 1、思路讲解(LC704)2、代码思路讲解(循环不变量)(1) 左闭右闭(2)左闭右开(3)总结:左开右闭和左闭右开(4)复杂度分析 …

力扣刷题31-33(力扣 0024/0070/0053)

今日题目: 24. 两两交换链表中的节点 题目:给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换) 思路&…

想来开视频号小店,你需要准备好这些内容!新手建议收藏!

大家好,我是电商小布。 视频号小店项目,作为当前在电商行业内推出时间最短的项目,内部发展潜力大,吸引到了很多小伙伴想要来入局其中。 而对于我们新手朋友来说,在开店的时候,不知道该准备哪些东西&#…

性能测试-Jmeter中IF控制器使用

一、Jmeter控制器 分为两种类型: 控制测试计划执行过程中节点的逻辑执行顺序,如:循环控制器,if控制器等对测试计划中的脚本进行分组,方便Jmeter统计执行结果以及进行脚本的运行时控制等,如:吞…

小红书扫码登录分析与python实现

文章目录 1. 写在前面2. 接口分析3. 代码实现 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python…

Unity发布webgl之后打开PDF文件,不使用js,不和浏览器交互

创建一个按钮,然后点击就会打开 在webgl下要使用这样的路径拼接,不然就会报错。 btnBook.onClick.AddListener(() >{var uri new System.Uri(Path.Combine(Application.streamingAssetsPath "/Books", "文档.pdf"));Debug.Log…

mysql80-DBA数据库学习1

掌握能力 核心技能 核心技能 mysql部署 官网地址www.mysql.com 或者www.oracle.com https://dev.mysql.com/downloads/repo/yum/ Install the RPM you downloaded for your system, for example: yum install mysql80-community-release-{platform}-{version-number}.noarch…

Python代码实现Excel表格转HTML文件

Excel工作簿是常用的表格格式,广泛用于组织、分析及展示数据。Excel文件通常需要专门的文档阅览器进行查看。如果我们想要以更兼容的方式展示Excel表格,可以将其转换为HTML格式,使其能够在各种浏览器中直接进行查看。同时,将Excel…

政安晨:【深度学习实践】【使用 TensorFlow 和 Keras 为结构化数据构建和训练神经网络】(六)—— 二元分类

政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: 政安晨的机器学习笔记 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 这篇文章咱们将深度学习应用到另一个常见任务中。 前言 在…

基于Matlab的眼底图像血管分割,Matlab实现

博主简介: 专注、专一于Matlab图像处理学习、交流,matlab图像代码代做/项目合作可以联系(QQ:3249726188) 个人主页:Matlab_ImagePro-CSDN博客 原则:代码均由本人编写完成,非中介,提供…

前端应用开发实验:条件渲染和循环渲染

目录 实验目的相关知识点实验内容图片的隐藏和显示代码实现效果 电影票房排序代码实现效果 代办事项记录代码实现效果 实验目的 (1)熟练掌握v-on 指令的用法,学会使用v-on 指令监听DOM元素的事件,并通过该事件触发调用事件处理程序。 (2)掌握v-on指令修…

FFmepg--AVFilter过滤器使用以及yuv视频裁剪

文章目录 AVFilter 流程:api核心代码变量yuv视频裁剪AVFilter 流程: ⾸先使⽤split滤波器将input流分成两路流(main和tmp),然后分别对两路流进⾏处理。对于tmp流,先经过crop滤波器进⾏裁剪处理,再经过flip滤波器进⾏垂直⽅向上的翻转操作,输出的结果命名为flip流。再将…

【技术栈】Redis 中的事务及持久化方式

SueWakeup 个人主页: SueWakeup 系列专栏:学习技术栈 个性签名:保留赤子之心也许是种幸运吧 本文封面由 凯楠📸 友情提供 目录 相关传送门 1. Redis 中的事务 2. Redis 持久化 2.1 RDB 方式 2.1.1 RDB手动 2.1.2 RDB自动 2.…

百度地图的使用(js,vue2,vue3)

百度地图的使用 创建应用获取密钥ak ak 是在百度地图开发者平台申请的密钥 详见 http://lbsyun.baidu.com/apiconsole/key 一、原生js使用百度地图 引入<script type"text/javascript" src"https://api.map.baidu.com/api?v1.0&typewebgl&ak你的ak&…

后端系统开发之——功能完善

原文地址&#xff1a;https://blog.yiming1234.cn/?p830 下面是正文内容&#xff1a; 前言 通过SpringBoot开发用户模块的部分也就差不多要结束了&#xff0c;这一片文章就主要提一些在系统开发中需要注意到的细节部分和功能&#xff0c;也就是剩余的部分。 但是这个专栏只介…

一键掌控:Shell脚本自动化安装与管理Conda环境的艺术

前面写了个博客《conda&#xff1a;解决多项目开发环境配置的神器&#xff01;》简单介绍了 Conda 的安装和基本命令&#xff0c;在做开发时经常会使用 Conda 建立多个应用环境&#xff0c;Conda 的命令虽不复杂&#xff0c;但还是有时会弄混&#xff0c;所以就考虑写个脚本&am…