类初步认识与对象

一,对于面向对象的认识

Java是一门面向对象的语言,一切都可以称为对象。将一个大象装进冰箱,甭管步骤多复杂,大象便是对象;将牛奶放进冰箱,牛奶便是对象;你我均是对像。

再比如洗一个衣服:需要有的对象是洗衣粉,洗衣机,衣服,这三样是不可少的实体,是对象。

至于洗衣服的过程,有漂洗,脱水等等,这些都不是对象。

洗衣粉,洗衣机,衣服都是以面向对象的方式来进行处理。具体的洗衣服的过程用户不需要去关心。

二,什么是类

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

比如:洗衣机

属性:品牌,颜色,尺寸等

功能:;洗衣,烘干,定时

如何用java语言来对类进行定义?

//创建类
class ClassName{
    field   //成员变量
    method //成员方法
}

//class为关键字
//ClassName为类的名字
//{}为类的主题

类中的内容为类的成员,用来描述类·的称为成员变量 或 成员属性,

class WashMachine{
    public String brand; // 品牌
    public String type; // 型号
    public double weight; // 重量
    public double length; // 长
    public double width; // 宽
    public double height; // 高
    public String color; // 颜色
    public void washClothes(){ // 洗衣服
    System.out.println("洗衣功能");
}
    public void dryClothes() { // 脱水
    System.out.println("脱水功能");
}
    public void setTime() { // 定时
    System.out.println("定时功能");
}
}

类的格式:类名采用大驼峰的形式,即首字母和中间字母大写

三,什么是类的实例化

在java中定义了一个类,相当于在计算机中定义了一个新的类型,与int,double相似。

只不过类是你自定义的类型。

用类的类型创建一个对象的过程就叫类的实例化,在java中用new关键字来实例化对象。

class PetDog {
    //狗的属性
    public String name;
    public String color;

    //狗的行为
    public void bark() {
        System.out.println("狗吠");
    }
}
public class test {
    public static void main(String[] args) {
        PetDog dog = new PetDog(); //通过new实例化对象
        dog.color = "黄色";
        dog.name = "小灰灰";
    }
}

public void bark函数在类中叫成员方法,

注意:new关键字用来创建一个实例化对象;

           使用.访问对象中的属性和方法;

            用一个类可以创建多个实例;

四,this的引用

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

打印结果是这样,相当于在13行中,仅仅是形参给形参赋值,

但是如果在13行这样改写

this.year = year;

this.month = month;

this.day = day;

这样结果就能成功了,因为this表示对于对象的引用,在成员方法的第一个参数就是this,它表示所指向的对象,this.year表示该对象的year,这样可以区别形参

this引用的特性:

1.this类型:对应类类型引用,即哪个对象调用就是哪个对象的应用类型

2.this只能在成员方法中使用

3.在成员方法中,this只能引用当前对象,不能再引用其他对象

4.this是成员方法第一个隐藏参数,编译器会自动传递,在成员方法执行时,编译器会将调用成员方法对象的应用传递给该成员方法,this负责接收。

五,对象构造及初始化

构造方法是一种特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,在整个对象的生命周期只调用一次。

构造方法的作用就是对对象中的成员初始化,不负责给对象开辟空间

举例:

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

    //无参构造方法
    public Dts(){
        this.year=19;
        this.month = 32;
        this.day=12;
    }
    //三个参数的构造方法
    public Dts(int year,int month,int day){
        this.year = year;
        this.month=month;
        this.day=day;
    }
    public void print(){
        System.out.println(this.year+" "+this.month+" "+this.day);
    }
}

这两个方法名字相同构成了,方法的重载

如果用户没有显式定义,编译器会生成一份默认的构造方法,生成的默认构造方法一定是无参

public class Date {
    public int year;
    public int month;    
    public int day;
    // 无参构造方法--内部给各个成员赋值初始值,该部分功能与三个参数的构造方法重复
    // 此处可以在无参构造方法中通过this调用带有三个参数的构造方法
    // 但是this(1900,1,1);必须是构造方法中第一条语句
public Date(){
    //System.out.println(year); 注释取消掉,编译会失败
this(1900, 1, 1);
    //this.year = 1900;
    //this.month = 1;
    //this.day = 1;
} /
/ 带有三个参数的构造方法
public Date(int year, int month, int day) {
    this.year = year;
    this.month = month;
    this.day = day;
  }
}

在java中局部变量必须初始化,但是成员变量不用,系统会默认初始化;

六,封装

封装就是将数据和操作方法进行有机结合,隐藏数据的属性和实现细节,仅对外公开接口和对象进行交互

面对对象程序的三大特性:封装,继承,多态。类与对象阶段主要讲的是封装特性

何为封装,简单来说就是套壳屏蔽细节

1.访问限定符

java中主要通过类和访问权限来实现封装:类可以将数据以及封装数据的方法结合在一起,

访问权限用来控制方法或者字段能否在类外使用,而java中提供了四种访问限定符,

说白了就是控制一个成员变量或者成员方法能否在外界使用。

画对号的就是被修饰的成员变量或成员方法可以使用的范围.

一般成员变量要用private修饰,成员方法用public修饰

2.那么什么是包呢?

为了更好的管理,把多个类收集在一起成为一组,成为软件包。就像更好的管理电脑中的文档,将它们分布在不同的文件夹里。

java中引入包,包是对类,接口等封装机制的体现,是一种对类或者接口等很好的组织方式。

一个工程中可以出现相同名称的类,只要他们在不同的包中即可

B,D属于Test.java包中不同的类;

3.导入包中的类

java中给我们提供了很多包为我们使用,可以使用java.util.Date导入java.util这个包中的Date类

public class Testing {
    //1.手动导入
    public static void main1(String[] args) {
        java.util.Date date = new java.util.Date();
        //得到一个毫秒级的时间戳
        System.out.println(date.getTime());
    }
    //2.使用import语句导入包
    //在顶部出现import java.util.Date;
    public static void main(String[] args) {
        Date data = new Date();
        System.out.println(data.getTime());
    }
}
七,static成员

static修饰成员变量:

1.修饰的成员变量成为类变量,不属于某个具体对象,是所有对象所共享的.

2.既可以通过对象访问,也可以通过类名访问,但是推荐通过类名访问

3.类变量储存在方法区

4.类变量生命周期伴随类的一生,随类的加载而创建,随类的卸载而销毁。

5.再进行代码调试的时候,被static修饰的某个成员变量已经不再属于具体的对象

static修饰成员方法:

public class Student{
    private String name;
    private String gender;
    private int age;
    private double score;
    private static String classRoom = "Bit306";
    // ...
}
public class TestStudent {
    public static void main(String[] args) {
    System.out.println(Student.classRoom);
    }
} 

//编译失败:
Error:(10, 35) java: classRoom 在 extend01.Student 中是 private 访问控制

被static修饰的成员方法成为静态成员方法,也不是某个具体对象拥有的。

一般通过静态方法访问

public class Student{
    // ...
    private static String classRoom = "Bit306";
    // ...
    //通过静态方法访问
    public static String getClassRoom(){
    return classRoom;
    }
}
public class TestStudent {
    public static void main(String[] args) {
    System.out.println(Student.getClassRoom());
    }
}

静态方法特点:

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

2.既可以通过对象访问,也可以通过类名访问,但是推荐通过类名访问

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

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

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

相关文章

JavaScript——流程控制(程序结构)

JavaScript——流程控制(程序结构) 流程控制就是来控制我们的代码按照什么结构顺序来执行。更倾向于一种思想结构。 流程控制分为三大结构:顺序结构、分支结构、循环结构 1、顺序结构 ​ 代码从上往下依次执行,从A到B执行&#x…

Java毕业设计 基于SpringBoot vue 疫苗咨询与预约系统

Java毕业设计 基于SpringBoot vue 疫苗咨询与预约系统 SpringBoot vue 疫苗咨询与预约系统 功能介绍 用户前端:首页 图片轮播 疫苗信息 条件查询 疫苗详情 点我收藏 评论 接种疫苗 疫情资讯 资讯详情 资讯评论 论坛交流 发布帖子 公告信息 公告详情 留言反馈 登录…

arm架构服务器使用Virtual Machine Manager安装的kylin v10虚拟机

本文中使用Virtual Machine Manager安装kylin v10的虚拟机 新建虚拟机 新建虚拟机 选择镜像,下一步 设置内存和CPU,下一步 选择或创建自定义存储(默认存储位置的磁盘空间可能不够用) 点击管理,打开选择存储卷页…

[linux]shell脚本语言:变量、测试、控制语句以及函数的全面详解

一、shell的概述 1、shell本质是脚本文件:完成批处理。 shell脚本是一种脚本语言,我们只需使用任意文本编辑器,按照语法编写相应程序,增加可执行权限,即可在安装shell命令解释器的环境下执行。shell 脚本主要用于帮助开…

【软件测试】如何申请专利?

一、专利类型 在软件测试领域,可以申请发明专利、实用新型专利和外观设计专利。其中,发明专利是最常见的专利类型,它保护的是软件测试方法、系统和装置等技术方案。 二、申请专利的条件 申请专利需要满足新颖性、创造性和实用性三个条件。…

饮料换购 刷题笔记

直接开个计数器mask 每当饮料现存数-1&#xff1b; cnt;且mask; 一旦mask达到3 饮料现存数 计数器清零3 代码 #include <iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int main(){ int n; …

【AIGC】如何提高Prompt准确度

前言 随着人工智能的迅猛进展&#xff0c;AIGC&#xff08;通用人工智能聊天工具&#xff09;已成为多个行业中不可或缺的自然语言处理技术。Prompt作为AIGC系统的一项关键功能&#xff0c;在工具的有效运作中发挥了举足轻重的作用。本篇文章将深入探讨Prompt与AIGC之间的紧密…

迭代器失效问题(C++)

迭代器失效就是迭代器指向的位置已经不是原来的含义了&#xff0c;或者是指向的位置是非法的。以下是失效的几种情况&#xff1a; 删除元素&#xff1a; 此处发生了迭代器的失效&#xff0c;因为erase返回的是下一个元素的位置的迭代器&#xff0c;所以在删除1这个元素的时候&…

SAP Parallel Accounting(平行分类账业务)配置及操作手册(超详细的说明和测试)

SAP Parallel Accounting(平行分类账业务)配置及操作手册 1、Overview 为了适应不同的会计准则&#xff0c;SAP在新总账中启用了多分类账&#xff0c;&#xff08;其作用简单来说就是&#xff0c;同时一笔记账&#xff0c;会产生多个账套的凭证。&#xff09;分类账可以对应一…

Python之Web开发中级教程----搭建SSH环境

Python之Web开发中级教程----搭建SSH环境 SSH 的全称是 “安全的 Shell(Secure Shell)”&#xff0c;它功能强大、效率高&#xff0c;这个主流的网络协议用于在两个远程终端之间建立连接。让我们不要忘记它名称的“安全”部分&#xff0c;SSH 会加密所有的通信流量&#xff0c…

C语言从入门到精通 第十二章(程序的编译及链接)

写在前面&#xff1a; 本系列专栏主要介绍C语言的相关知识&#xff0c;思路以下面的参考链接教程为主&#xff0c;大部分笔记也出自该教程。除了参考下面的链接教程以外&#xff0c;笔者还参考了其它的一些C语言教材&#xff0c;笔者认为重要的部分大多都会用粗体标注&#xf…

【学习笔记】数据结构与算法06 - 堆:上堆、下堆、Top-K问题以及代码实现

知识来源&#xff1a;https://www.hello-algo.com/chapter_heap/heap/#4 文章目录 2.5 堆2.5.1 堆&#xff08;优先队列2.5.1.1 堆的常用操作 2.5.2 堆的存储与表示2.5.2.1 访问堆顶元素2.5.2.2 入堆时间复杂度 2.5.2.3 堆顶元素出堆时间复杂度 2.5.3 堆的常见应用2.5.4 建堆问…

每日OJ题_牛客_井字棋

目录 牛客_井字棋 解析代码 牛客_井字棋 井字棋__牛客网 解析代码 class Board {public:bool checkWon(vector<vector<int> > board) {// 当前玩家是否胜出&#xff01;&#xff01;&#xff01;不是有玩家胜出int row board.size(), col board[0].size();fo…

vue 常用的 UI 组件库之一:Vuetify组件库

Vuetify是一个基于Vue.js 的Material Design组件库&#xff0c;它提供了一套完整的、预构建的、可自定义的、响应式的组件&#xff0c;以便开发者可以快速构建美观且功能强大的Web应用程序。Vuetify遵循Material Design设计指南&#xff0c;提供了一系列易于使用的组件&#xf…

【STM32】HAL库 CubeMX教程---基本定时器 定时

目录 一、基本定时器的作用 二、常用型号的TIM时钟频率 三、CubeMX配置 四、编写执行代码 实验目标&#xff1a; 通过CUbeMXHAL&#xff0c;配置TIM6&#xff0c;1s中断一次&#xff0c;闪烁LED。 一、基本定时器的作用 基本定时器&#xff0c;主要用于实现定时和计数功能…

Leetcode : 147. 对链表进行插入排序

给定单个链表的头 head &#xff0c;使用 插入排序 对链表进行排序&#xff0c;并返回 排序后链表的头 。 插入排序 算法的步骤: 插入排序是迭代的&#xff0c;每次只移动一个元素&#xff0c;直到所有元素可以形成一个有序的输出列表。 每次迭代中&#xff0c;插入排序只从输…

【Python学习篇】Python基础入门学习——你好Python(一)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;Vir2021GKBS &#x1f43c;本文由…

全网最细,web自动化测试实战场景(滚动元素的滚动操作)直接上干g货......

前言 使用 selenium 进行 web 自动化测试对我们来说是个常规操作。用了很多次后&#xff0c;我们经常会抱怨 selenium 封装的操作实在是太少了。 比如说 selenium 没有对页面的滚动提供丰富 API , 有的只有一个孤零零的 location_once_scrolled_into_view 方法&#xff0c;把…

融资项目——OpenFeign的降级与熔断

当一个微服务调用其他微服务时&#xff0c;如果被调用的微服务因各种原因无法在规定时间内提供服务&#xff0c;则可以直接使用本地的服务作为备选&#xff0c;即进行降级熔断。 如之前所提到的微服务为例&#xff1a; 如果希望实现降级熔断&#xff0c;可以在本地创建一个实现…

Mac版2024 CleanMyMac X 4.14.6 核心功能详解以及永久下载和激活入口

CleanMyMac 是 macOS 上久负盛名的系统清理工具&#xff0c;2018 年&#xff0c;里程碑式版本 CleanMyMac X 正式发布。不仅仅是命名上的变化&#xff0c;焕然一新的 UI、流畅的动画也让它显得更加精致。新增的系统优化、软件更新等功能&#xff0c;使得在日常使用 macOS 时有了…