JAVA SE 类和对象

类和对象

  • 类定义和使用
    • 类的定义格式
  • 类的实例化
    • 什么是实例化
  • this 引用
    • this引用的特性
  • 对象的构造及初始化
    • 如何初始化对象
    • 构造方法
      • 概念
      • 特性
    • 在这里插入图片描述 **注意**:
  • 封装
    • 封装的概念
    • 封装扩展之包
      • 导入包中的类
      • 自定义包
      • 包的访问权限控制举例
  • static成员
    • static修饰成员变量
    • static修饰成员方法
    • static成员变量初始化
  • 代码块
    • 普通代码块
    • 构造代码块
    • 静态代码块
    • 注意:

类定义和使用

面向对象程序设计关注的是对象,而对象是现实生活中的实体,比如:洗衣机。但是计算机并不认识洗衣机,需要我们告诉它什么是洗衣机。
在这里插入图片描述上图右侧就是对洗衣机简单的描述,该过程称为对洗衣机对象(实体)进行抽象(对一个复杂事物的重新认识),但是这些简单的抽象结果计算机也不能识别,开发人员可以采用某种面向对象的变成语言来进行描述,比如:Java语言。

类的定义格式

在java中定义类时需要用到class关键字,具体语法如下:

//创建类
class ClassName{field;  //字段(属性)或者成员变量method;//行为或成员方法
}

class为定义类的关键字,ClassName为类的名字,{}为类中的主体。

类中包含的内容称为类的成员。属性主要是用来描述类的,称为类的成员属性或者类成员变量。方法主要说明类具有哪些功能,称为类的成员方法。

class WashMachine{public String brand;public String type;public double weight;public void washClothes(){System.out.println("洗衣服");}public void dryClothes(){System.out.println("脱水");}
}

注意:

    1. 类名采用大驼峰定义。
    2. main方法所在的类一般要用public修饰
    3. public修饰的类必须要和文件名相同
    4. 不要轻易修改public修饰的类的名称,如果要修改,通过Refactor->Rename

在这里插入图片描述

类的实例化

什么是实例化

定义了一个类,就相当于在计算机中定义了一种新的类型,与int、double类似,只不过int和double是java语言自带的内置类型,而类是用户自定义了一种新的类型,比如刚刚的洗衣机WashMachine类。有了自定义的类型以后,就可以使用这些类来定义实例(或者称为对象)。
用类类型创建对象的过程,称为类的实例化,在java中采用new关键字,配合类名来实例化对象。

public class Dog {public String name;public String color;public void bark(){System.out.println("旺旺旺");}public void wag(){System.out.println("摇尾巴");}public static void main(String args[]){Dog dog1=new Dog();dog1.name="大黄";dog1.color="黄";dog1.bark();dog1.wag();Dog dog2=new Dog();dog2.name="大黑";dog2.color="黑";dog2.bark();dog2.wag();}
}

在这里插入图片描述
注意:

    1. new关键字用于创建一个对象的实例。
    2. 使用.来访问对象中的属性和方法。
    3. 同一个类可以创建多个实例。

this 引用

this引用指向当前对象(调用某成员方法的对象),以免因成员变量和形参名相同,造成误解。

public class Date {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 printDate(){System.out.println(this.year+"-"+month+"-"+day);}public static void main(String args[]){Date d=new Date();d.setDay(2020,9,15);d.printDate();}
}

this引用的特性

1.this的类型:对应类类型引用,即那个对象调用就是哪个对象的引用类型
2.this只能在“成员方法”中使用
3.在“成员方法”中,this只能引用当前对象,不能再引用其他对象
4.this是“成员方法”第一个隐藏的参数,写不写都无所谓,编译器帮你传递了。

对象的构造及初始化

如何初始化对象

java内部定义一个局部变量时,必须要初始化,否则会编译失败。
在这里插入图片描述

要让上述代码通过编译,只需要在正式使用之前,给a设置一个初始值即可。如果是对象:
在这里插入图片描述
我们发现,可以正常运行,但只有通过调用setDay方法才能将具体的日期设置到对象中。

我们就此发现两个问题:

1.每次对象创建好后调用SetDate方法设置具体日期,比较麻烦,那对象该如何初始化?
2.局部变量必须要初始化才能使用,为什么字段声明之后没有给值依然可以使用?

构造方法

概念

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

特性

1.名字必须与类名相同
2.没有返回值类型,设置为void也不行
3.创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次(相当于人的出生,每个人只能出生一次)。
4.构造方法可以重载(用户根据自己的需求提供不同参数的构造方法)。
5.如果用户没有显式定义,编译器会生成一份默认的构造方法,生成的某人构造方法一定是无参的。

注意:一旦用户定义了构造方法,编译器就不会再生成了,所谓“救急不救贫”。
在这里插入图片描述

6.构造方法中,可以通过this调用其他构造方法来简化代码

在这里插入图片描述
注意

  1. this(……)必须是构造方法中第一条语句
  2. 不能形成环
    在这里插入图片描述7.绝大多数情况下,使用public来修饰,特殊场景下会被private修饰。

封装

封装的概念

面向对象程序三大特性:封装、继承、多态。类和对象阶段,主要研究的就是封装特性。

封装扩展之包

为了更好的管理类,把多个类收集在一起成为一组,称为软件包。也就是位于同一个文件夹下的类。包是对类、接口等的封装机制的体现,是一种对类或接口等的很好的组织方式,比如:一个包中的类不想被其他包中的类使用。包还有一个重要的作用:在同一个工程中允许存在相同名称的类,只要处在不同的包中即可。

导入包中的类

Java中已经提供了很多现成的类供我们使用,例如Date类:可以使用java.util.Date 导入java.util这个包中的Date类。

public class test {public static void main(String[] args){java.util.Date date=new java.util.Date();//获得一个毫秒级别的时间戳System.out.println(date.getTime());}
}

但是这种写法比较麻烦,可以使用import语句导入包

import java.util.Date;public class test {public static void main(String[] args){Date date=new java.util.Date();//获得一个毫秒级别的时间戳System.out.println(date.getTime());}
}

如果需要使用java.util中的其他类,可以使用import java.util. *

import java.util.*;public class test {public static void main(String[] args){Date date=new java.util.Date();//获得一个毫秒级别的时间戳System.out.println(date.getTime());}
}

但是我们更建议显式的指定要导入的类名,否则还是容易出现冲突的情况。如以下案例:
在这里插入图片描述可以使用import static导入包中静态的方法和字段。

import static java.lang.Math.*;
public class test {public static void main(String[] args){double x=30;double y=40;double result = sqrt(pow(x,2)+pow(y,2));System.out.println(result);}
}

自定义包

基本规则:

  • 1.在文件的最上方加上一个package语句指定该代码在哪个包中。
    2.包名需要尽量指定成唯一的名字,通常会用公司的域名的颠倒形式,例如com.alibaba.demo1
    3.建包方法
    在这里插入图片描述

包的访问权限控制举例

Computer类位于com.bit.demo1包中,TestComputer位于com.bit.demo2包中:

package com.bit.demo1;public class Computer {private String cpu;private String memory;public String screen;String brand;public Computer(String brand,String cpu,String memory,String screen){this.brand=brand;this.cpu=cpu;this.memory=memory;this.screen=screen;}public void Boot(){System.out.println("开机");}public void PowerOff(){System.out.println("关机");}public void SurfInternet(){System.out.println("上网");}
}
package com.bit.demo2;
import com.bit.demo1.Computer;
import jdk.swing.interop.SwingInterOpUtils;public class TestComputer {public static void main(String[] args){Computer p=new Computer("HW","I7","8G","13*14");System.out.println(p.screen);//System.out.println(p.cpu);//System.out.println(p.brand);//cpu 和brand都是私有的,不允许被其他包中的类访问}
}

static成员

static修饰成员变量

static修饰的成员变量,称为静态成员变量,不属于某个具体的对象,是所有对象所共享的。
静态成员变量特性:

  • 1.既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问
    2.类变量存储在方法区当中
    3.生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁)

static修饰成员方法

一般类中的数据成员都设置为private,而成员方法设置为public。被static修饰的成员方法称为静态成员方法,是类的方法,不是某个对象所特有的。静态成员一般是通过静态方法来访问的。
在这里插入图片描述
在这里插入图片描述
静态方法特性:

  • 1.不属于某个具体的对象,是类方法
    2.可以通过对象调用,也可以通过类名.静态方法名(…)方式调用,更推荐后者
    3.不能在静态方法中访问任何非静态成员变量(this也不能用)
    在这里插入图片描述 4.静态方法中不能调用任何非静态方法,因为非静态方法有this参数,在静态方法中调用时候无法传递this引用

static成员变量初始化

静态成员变量一般不会放在构造方法中来初始化,构造方法中初始化的是与对象相关的实例属性。
静态成员变量的初始化分为两种:就地初始化静态代码块初始化
就地初始化指定是在定义类的时候,直接给出静态成员变量的初始值。

代码块

使用{}定义的一段代码称为代码块,根据代码块定义的位置和关键字,又可以分为以下四种:

  • 普通代码块

  • 构造块

  • 静态块

  • 同步代码块

普通代码块

在这里插入图片描述

构造代码块

构造代码块一般用于初始化实例成员变量
在这里插入图片描述

静态代码块

一般用于初始化静态成员变量,静态代码块不管生成多少个对象,只会执行一次。

注意:

执行的先后顺序为:
①字段(成员变量)
②静态代码块
③实例代码块
④构造方法
这个执行顺序和他们3个的前后定义顺序没有关系,但如果都是同一类代码块,则执行顺序为定义顺序

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

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

相关文章

微信小游戏之 三消(一)

首先设定一下 单个 方块 cell 类: 类定义和属性 init 方法 用于初始化方块,接收游戏实例、数据、宽度、道具类型和位置。 onWarning 方法 设置警告精灵的帧,并播放闪烁动作,用于显示方块的警告状态。 grow 方法 根据传入的方向…

磨煤机加载油站系统比例阀放大器

磨煤机液压系统是火力发电厂中不可或缺的重要组成部分,它主要负责为磨煤机提供并调节必须的碾磨压力。这一系统的核心功能是通过BEUEC比例放大器配套比例溢流阀精确控制,以适应煤炭处理过程中对压力的不同需求,确保煤炭的有效碾磨及火力发电的…

C语言 | Leetcode C语言题解之第275题H指数II

题目&#xff1a; 题解&#xff1a; int hIndex(int* citations, int citationsSize) {int left 0, right citationsSize - 1;while (left < right) {int mid left (right - left) / 2;if (citations[mid] > citationsSize - mid) {right mid - 1;} else {left mi…

Jenkins持续集成软件

1.什么是jenkins? jenkins是一个开源软件项目&#xff0c;是基于Java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;提供一个开放易用的软件平台&#xff0c;时软件项目可以进行持续集成。 通俗来说&#xff1a;Jenkins软件就是自动拉取git远程仓库所…

Java 面试相关问题(下)——JVM相关问题GC相关问题

1. 类加载1.1 类的生命周期说一下&#xff1f;1.2 介绍下生命周期中的加载&#xff1f;1.3 介绍下生命周期中的验证&#xff1f;1.4 介绍下生命周期中的准备&#xff1f;1.5 介绍下生命周期中的解析&#xff1f;1.6 介绍下生命周期中的初始化&#xff1f;1.7 介绍下生命周期中的…

秋叶大神中文版Stable Diffusion下载安装使用教程

Stable Diffusion是什么&#xff1f; Stable Diffusion是一款开源的AI绘画软件&#xff0c;于2022年发布&#xff0c;由CompVis、Stability AI和LAION的研究人员创建。该软件具有出色的图像生成功能&#xff0c;使用户能够从头开始绘制作品&#xff0c;也可以使用现有的图像进…

花几千上万学习Java,真没必要!(三十)

异常&#xff1a; 测试测试代码1&#xff1a; package catchtest.com; public class TryCatchExample { //使用一个或多个 catch 块捕获并处理异常。public static void main(String[] args) { try { // 尝试执行的代码块 int result 10 / 0; // 引发 ArithmeticExceptio…

AI如何助力UI设计师互联网学习?

嘿&#xff0c;咱 UI 设计师想用互联网学习&#xff0c;可真不容易&#xff01;资料筛选难&#xff0c;学习资源杂&#xff0c;真让人头疼。不过还好有 AI 工具能帮忙&#xff0c;提效率&#xff01; 这一年多来&#xff0c;我在 ai123.cn 这个平台上&#xff0c;可算是找到了…

【LeetCode、牛客】链表分割、链表的回文结构、160.相交链表

Hi~&#xff01;这里是奋斗的明志&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f331;&#x1f331;个人主页&#xff1a;奋斗的明志 &#x1f331;&#x1f331;所属专栏&#xff1a;数据结构 &#x1f4da;本系列文章为个人学…

Web网页端IM产品RainbowChat-Web的v7.1版已发布

一、关于RainbowChat-Web RainbowChat-Web是一套Web网页端IM系统&#xff0c;是RainbowChat的姊妹系统&#xff08;RainbowChat是一套基于开源IM聊天框架 MobileIMSDK (Github地址) 的产品级移动端IM系统&#xff09;。 ► 详细介绍&#xff1a;http://www.52im.net/thread-2…

WEB前端11-Vue2基础01(项目构建/目录解析/基础案例)

Vue2基础(01) 1.Vue2项目构建 步骤一&#xff1a;安装前端脚手架 npm install -g vue/cli步骤二&#xff1a;创建项目 vue ui步骤三&#xff1a;运行项目 npm run serve步骤四&#xff1a;修改vue相关的属性 DevServer | webpack //修改端口和添加代理 const { defineCo…

AccessLog| 一款开源的日志分析系统

前言 ClkLog作为分析系列产品中的前端数据分析系统&#xff0c;通过采集前端应用数据进行用户行为分析。其社区版从23年9月发布至今已有近一年&#xff0c;商业版也上线快半年&#xff0c;感谢大家一直以来的关注和支持&#xff0c;ClkLog会继续做好产品升级与服务&#xff0c;…

中小企业提升销售效率的10款CRM系统

本文介绍了10款CRM系统&#xff1a;纷享销客、Zoho CRM、Apptivo、简信CRM、浪潮CRM、HubSpot CRM、八百客、简道云、Pipedrive、Insightly。 在选择CRM系统时&#xff0c;中小企业常常面临着预算限制和功能需求之间的矛盾&#xff0c;许多企业希望找到既经济实惠又功能强大的解…

重生之“我打数据结构,真的假的?”--3.栈和队列

1.栈和队列的基本概念 1.1 栈 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则…

深度剖析:品牌推广中的专业外包服务商策略

回顾历史&#xff0c;从农业革命到工业革命&#xff0c;再到如今的信息技术革命&#xff0c;每一次社会生产力的飞跃都伴随着分工的细化和专业化的提升。亚当斯密在《国富论》中提出的“分工论”早已揭示了这一真理&#xff1a;通过分工&#xff0c;每个人专注于自己擅长的领域…

计算机网络(Wrong Question)

一、计算机网络体系结构 1.1 计算机网络概述 D 注&#xff1a;计算机的三大主要功能是数据通信、资源共享、分布式处理。&#xff08;负载均衡、提高可靠性&#xff09; 注&#xff1a;几段链路就是几段流水。 C 注&#xff1a;记住一个基本计算公式&#xff1a;若n个分组&a…

昇思25天学习打卡营第01天|昇思MindSpore大模型基础j介绍

昇思MindSpore和华为昇思MindSpore大模型学习打卡系列文章&#xff0c;本文仅供参考~ 文章目录 前言一、昇思MindSpore是什么&#xff1f;二、执行流程三、设计理念四、层次结构五、Huawei昇腾AI全栈 前言 随着计算机大模型的不断发展&#xff0c;Ai这门技术也越来越重要&#…

HarmonyOS 自定义节点

1. HarmonyOS 自定义节点 1.1. 概念 官方文档&#xff08;https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-user-defined-capabilities-V5&#xff09;   自定义能力是HarmonyOS ArkUI开发框架提供的对UI界面进行开发和设计的能力。现有的自定义…

数模打怪(八)之图论模型

一、作图 图的数学语言描述&#xff1a; G( V(G), E(G) )&#xff0c;G&#xff08;graph&#xff09;&#xff1a;图&#xff0c;V&#xff08;vertex&#xff09;&#xff1a;顶点集&#xff0c;E&#xff08;edge&#xff09;&#xff1a;边集 1、在线作图 https://csac…

《牛角型电解电容和螺栓型电解电容》

牛角型电解电容之所以被称为牛角型&#xff0c;是因为引出端子的形状类似牛角。 螺栓型电解电容被称为螺栓型&#xff0c;是因为其引出端子的形状像螺栓。 牛角型电解电容和螺栓型电解电容&#xff0c;虽然也是电容&#xff0c;但在普通电路板上用的很少&#xff0c;更多是安…