当前位置: 首页 > news >正文

【Java】类和对象,封装

目录

1.类和对象的定义 

2.关键字new

3.this引用

4.对象的构造及初始化

5.封装

//包的概念

//如何访问

6.static成员

7.代码块

8.对象的打印


1.类和对象的定义 

对象:Java中一切皆对象。

类:一般情况下一个Java文件一个类,每一个类对应一个字节码文件(*.class)

       1)字段 / 属性 / 成员变量:定义在类中,方法的外面;2)方法

类似于C语言的结构体。

成员变量未初始化时都有一个默认值:引用类型默认值为null;int类型默认值为0;float类型默认值为0.0f;char类型默认值为'\u0000';boolean类型默认值为false 

class WashMachine{//类//字段/属性/成员变量public String brand;public String type;public double weight;public double length;public double height;public String color;//成员方法public void washClothes(){System.out.println("洗衣功能");}public void dryClothes(){System.out.println("脱水功能");}public void setTime(){System.out.println("定时功能");}
}

注意:

1> idea中如何打开当前类所在文件夹:*. java + 右键 +Open in +  Explorer;

2>  当类由public修饰时,类名必须和文件名一致;

3> 不要轻易去修改public修饰的类的名称,若要修改:文件名 + 右键 + Refactor + Rename;

4> 类中的方法不需要static修饰。

2.关键字new

public static void main(String[] args) {WashMachine washmachine1 = new WashMachine();WashMachine washmachine2 = new WashMachine();//赋值washmachine1.brand = "海尔";washmachine2.brand = "小天鹅";//washmachine:引用变量,存了对象的地址——>实例化对象System.out.println(washmachine1.brand);System.out.println(washmachine2.brand);washmachine1.washClothes();washmachine2.washClothes();
}

注意:

1> 可以使用关键字new实例化多个对象;

2> 同一个类可以创建多个实例;

3> 使用 . 来访问对象中的属性和方法。

3.this引用

public class TestDate {public int year;public int month;public int day;public void setDate(int y,int m,int d){//谁调用了setDate,this就是谁this.year = y;this.month = m;this.day = d;}public void printDate(){//要习惯加上thisSystem.out.println(this.year+"年"+this.month+"月"+this.day+"日");}public static void main(String[] args) {//main方法可以定义在类当中//定义TestDate testDate1 = new TestDate();TestDate testDate2 = new TestDate();TestDate testDate3 = new TestDate();//赋值testDate1.setDate(2000,2,28);testDate2.setDate(2022,12,21);testDate3.setDate(2023,3,12);//打印testDate1.printDate();testDate2.printDate();testDate3.printDate();}
}

注意:

1> this对应类型引用,哪个对象调用就是哪个对象的引用类型;

2> this只能在普通成员方法中使用,静态成员方法(static修饰)中不能使用

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

4> this时成员方法第一个隐藏的参数,编译器会自动传递。

4.对象的构造及初始化

普通方法:返回值+方法名+(参数列表)+ {方法体}

构造方法:没有返回值且方法名必须和类名保持一致

//注意方法名与类名一致!!!
public TestDate(){System.out.println("没有参数的构造方法");
}
public TestDate(int year,int month,int day){ //两个方法构成了重载this.year = year;this.month = month;this.day = day;System.out.println("有3个参数的构造方法");
}

注意:

1> 构造方法可以重载(方法名均为类名);

2> 构造方法一个都没写的情况下,编译器会帮你默认生成一个不带参数的构造方法;但当你写了其中任意一种构造方法,其它构造方法编译器不会帮你生成;

3> 构造方法一定会被调用,具体调用哪个构造方法得看有没有相应的参数;

3> 一个对象的产生至少有以下2步:为对象分配内存,调用合适的构造方法;

4> idea自动生成构造方法:右键 + Generate + Constructor + 自选

5> 可在构造方法中使用this()来调用另一个构造方法且必须放在第一行,但是不能自己调用自己 。

class Student{public String name;public int age;public Student(){ //此为没有参数的构造方法this("wangwu",20);//this()必须放在第一行System.out.println("调用第一个");this.print();//利用this调用其他成员方法,可以不放在第一行}public Student(String name,int age){//此为有两个参数的构造方法this.name = name;this.age = age;System.out.println("调用第二个");}public void print(){System.out.println("姓名:"+this.name+"年龄:"+this.age);//注意这里不加this输出 姓名:null年龄:0}
}
public class Test {public static void main(String[] args) {Student student1 = new Student();//调用上面第一个构造函数student1.name = "zhangsan";student1.age = 18;Student student2 = new Student("lisi",19);//调用上面第二个构造函数student2.print();}
}

5.封装

面向对象程序三大特性:封装、继承、多态。这里先介绍封装的概念。

定义:将类的实现细节进行隐藏,类外看不见数据,实现了类的安全性。

注意:defaule是什么都不写时的默认权限

访问限定符
No范围privatedefaultprotectedpublic
1同一包中的同一类
2同一包中的不同类×
3不同包中的子类××
4不同包中的非子类×××

//包的概念

定义:多个类收集在一起成为一组,称为软件包,类似于目录。

导入:可以让编译器自动导入,也可以手动导入。

通配符*:可以充当任何类。如util.* 不是导入util下的所有类,而是用到哪个类就用哪个类。

但是当使用的类在多个包中都有时,需要手动导入。非必要不用*。

自定义包:在文件最上方加上一个package语句指定改代码在哪个包中。

//如何访问

前面我们说了用private修饰之后,类外就不能使用类内的变量了,那无法访问有什么意义呢?别急,强大的idea可以帮我们用另一种方法访问:

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 class Test {public static void main(String[] args) {Student student = new Student();student.setName("wangwu");//利用setName和getName访问System.out.println(student.getName());student.setAge(20);System.out.println(student.getAge());}
}

6.static成员

特点:1)修饰成员变量或方法,称为类变量/静态成员变量或类方法,不能修饰局部变量;

           2)不依赖对象,不需要new对象,所有对象共用一份

           3)静态方法内部不能调用非静态方法,不能使用this,无法重写;

           4)存储在方法区当中,生命周期伴随类的一生。

访问方式:虽然可以但是不建议通过对象来引用访问,而是通过类名访问

class Student{private String name;//普通成员变量,每个对象都有一份private int age;//普通成员变量public static String classroom = "301";//被static修饰,称为类变量/静态成员变量,所有对象共用一份public Student(String name, int age) {this.name = name;this.age = age;}public static void func() {System.out.println("func……");}
}
public class Test {public static void main(String[] args) {Student student1 = new Student("zhangsan",20);Student student2 = new Student("lisi",21);Student student3 = new Student("wangwu",22);//这些对象都可以不new,不影响类变量和类方法的调用/*System.out.println("教室是"+student1.classroom);//结果是一样的System.out.println("教室是"+student2.classroom);System.out.println("教室是"+student3.classroom);*///虽然可以但是不建议通过对象来引用访问System.out.println("教室是"+Student.classroom);//而是通过类名直接访问;Student.func();}
}

7.代码块

分类:静态代码块实例代码块,同步代码块,普通代码块

注意:

1)顺序:静态代码块 > 构造代码块 > 构造方法 ;

2)静态代码块不管生成多少个对象,都只执行一次

3)如果一个类中包含多个静态代码块,编译器会按照顺序依次执行。

class Student {private String name = "lisi";private int age;{this.name = "zhangsan";//按顺序执行这一行代码,名字为zhangsanSystem.out.println("构造块!");}static {classroom = "201";System.out.println("静态代码块!");}public static String classroom = "208";//按顺序执行这一行代码,班级为208public Student() {System.out.println("调用不带参数的构造方法!");}public Student(String name, int age) {this.name = name;this.age = age;System.out.println("调用带两个参数的构造方法!");}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 class Test {public static void main(String[] args) {Student student = new Student();System.out.println(Student.classroom);//208System.out.println(student.getName());//zhangsan}
}

 

8.对象的打印

编译器自己生成(方法重写):右键 + Generate + toString() + 自选

class Student {public String name;public int age;public Student(String name, int age) {this.name = name;this.age = age;}@Override//方法重写,重写了toString方法public String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}public void print() {System.out.println("姓名:"+this.name+" 年龄:"+this.age);}
}
public class Test {public static void main(String[] args) {Student student = new Student("zhangsan",20);System.out.println(student);//没重写时,打印student的地址student.print();//正常调用上面的成员方法}
}

 


Over!继承和多态见!!

相关文章:

【Java】类和对象,封装

目录 1.类和对象的定义 2.关键字new 3.this引用 4.对象的构造及初始化 5.封装 //包的概念 //如何访问 6.static成员 7.代码块 8.对象的打印 1.类和对象的定义 对象:Java中一切皆对象。 类:一般情况下一个Java文件一个类,每一个类…...

Python小姿势 - 知识点:

知识点: Python的字符串格式化 标题: Python字符串格式化实例解析 顺便介绍一下我的另一篇专栏, 《100天精通Python - 快速入门到黑科技》专栏,是由 CSDN 内容合伙人丨全站排名 Top 4 的硬核博主 不吃西红柿 倾力打造。 基础知识…...

【Python】【进阶篇】9、Django路由系统精讲

目录 Django路由系统精讲1. Django 路由系统应用1)配置第一个URL实现页面访问2)正则与正则分组使用3)正则捕获组使用 2. path()与re_path() Django路由系统精讲 在《URL是什么》一节中,我们对 URL 有了基本的认识,在本…...

在Linux操作系统上部署wgcloud监控

1.wgcloud监控介绍 1.1 介绍 ​ 这是一款开源的主机监控系统,可以支持主机各种指标监测(cpu使用率,cpu温度,内存使用率,磁盘容量空间,磁盘IO,硬盘SMART健康状态,系统负载&#xff…...

浙大的SAMTrack,自动分割和跟踪视频中的任何内容

Meta发布的SAM之后,Meta的Segment Anything模型(可以分割任何对象)体验过感觉很棒,既然能够在图片上面使用,那肯定能够在视频中应用,毕竟视频就是一帧一帧的图片的组合。 果不其然浙江大学就发布了这个SAMTrack,就是在…...

Spring第三方资源配置管理

Spring第三方资源配置管理 1. 管理DataSource连接池对象1.1 管理Druid连接池【重点】1.2 管理c3p0连接池 2. 加载properties属性文件【重点】2.1 基本用法2.2 配置不加载系统属性2.3 加载properties文件写法 说明:以管理DataSource连接池对象为例讲解第三方资源配置…...

网络编程代码实例:多进程版

文章目录 前言代码仓库内容代码(有详细注释)server.cclient.cMakefile 结果总结参考资料作者的话 前言 网络编程代码实例:多进程版。 代码仓库 yezhening/Environment-and-network-programming-examples: 环境和网络编程实例 (github.com)E…...

一家传统制造企业的上云之旅,怎样成为了数字化转型典范?

众所周知,中国是一个制造业大国。在想要上云以及正在上云的企业当中,传统制造企业也占据了相当大的比例。 那么这类企业在实施数字化转型的时候,应该如何着手?我们不妨来看看一家传统制造企业的现身说法。 国茂股份的数字化转型诉…...

C++入门(C++)

目录 命名空间 1、命名空间的定义 2、命名空间的使用 1、加名空间名称和作用域限定符 2、使用using namespace 命名空间引入 3、使用using将命名空间中某个成员引入 C的输入与输出 缺省参数 1、缺省参数的概念 2、缺省参数分类 1、全缺省参数 2、半缺省参数 函数重载 1、函数重…...

Linux 利用网络同步时间

yum -y install ntp ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ntpdate ntp1.aliyun.com 创建加入crontab echo "*/20 * * * * /usr/sbin/ntpdate -u ntp.api.bz >/dev/null &" >> /var/spool/cron/rootntp常用服务器 中国国家授…...

炫技亮点 SpringBoot下消灭If Else,让你的代码更亮眼

文章目录 背景案例第一阶段 萌芽第二阶段 屎上雕花第三阶段 策略工厂模式重构第四阶段 优化 总结 背景 大家好,我是大表哥laker。今天,我要和大家分享一篇关于如何使用策略模式和工厂模式消除If Else耦合问题的文章。这个方法能够让你的代码更加优美、简…...

免费ChatGPT接入网站-网站加入CHATGPT自动生成关键词文章排名

网站怎么接入chatGPT 要将ChatGPT集成到您的网站中,需要进行以下步骤: 注册一个OpenAI账户:访问OpenAI网站并创建一个账户。这将提供访问API密钥所需的身份验证凭据。 获取API密钥:在您的OpenAI控制台中,您可以找到您…...

PostgreSQL的数据类型有哪些?

数据类型分类 分类名称说明与其他数据库的对比布尔类型PG支持SQL标准的boolean数据类型与MySQL中的bool、boolean类型相同,占用1字节存储空间数值类型整数类型有2字节的smallint、4字节的int、8字节的bigint;精确类型的小数有numeric;非精确…...

Android 9.0 系统开机自启动第三方app

1.前言 在9.0的系统rom定制化开发中,在framework定制话的功能开发中,在内置的app中,有时候在系统开机以后会要求启动第三方app的功能,所以这就需要在监听开机完成的广播,然后在启动第三方app就可以了,接下来就需要在系统类中监听开机完成的广播流程来实现功能 2.系统开…...

一些想法:关于学习一门新的编程语言

很多人可能长期使用一种编程语言,并感到很有成就感和舒适感,发现学习一种新的编程语言的想法令人生畏而痛苦。或者可能知道并使用多种编程语言,但有一段时间没有学习新的语言。更或者可能只是好奇别人是如何潜心学习新的编程语言并迅速取得成…...

线性代数——矩阵

文章目录 版权声明基础概念矩阵的运算矩阵的加法数与矩阵相乘矩阵的乘法矩阵的转置 矩阵和方程组方阵和行列式伴随矩阵可逆矩阵分块矩阵矩阵的初等变换初等矩阵等价矩阵行阶梯矩阵行最简矩阵初等变换在矩阵求解中的应用 矩阵的秩 版权声明 本文大部分内容皆来自李永乐老师考研…...

taro之小程序持续集成

小程序持续集成 Taro 小程序端构建后支持 CI(持续集成)的插件 tarojs/plugin-mini-ci。 目前已支持(企业)微信、京东、字节、支付宝、钉钉、百度小程序 功能包括: 构建完毕后自动唤起小程序开发者工具并打开项目上传…...

Ceph入门到精通-Ceph 编排器简介

第 1 章 Ceph 编排器简介 作为存储管理员,您可以将 Ceph 编排器与 Cephadm 实用程序搭配使用,能够发现设备并在 Red Hat Ceph Storage 集群中创建服务。 1.1. 使用 Ceph Orchestrator Red Hat Ceph Storage Orchestrators 是经理模块,主要…...

【Feign扩展】OpenFeign日志打印Http请求参数和响应数据

SpringBoot使用log4j2 在Spring Boot中所有的starter 都是基于spring-boot-starter-logging的&#xff0c;默认使用Logback。使用Log4j2的话&#xff0c;你需要排除 spring-boot-starter-logging 的依赖&#xff0c;并添加 spring-boot-starter-log4j2的依赖。 配置依赖 <…...

MongoDB (零) 安装和简单使用

1.安装(Ubuntu) 1.1.安装gnupg sudo apt-get install gnupg1.2.获取GPG Key curl -fsSL https://pgp.mongodb.com/server-6.0.asc | \sudo gpg -o /usr/share/keyrings/mongodb-server-6.0.gpg \--dearmor1.3.创建本地文件 echo "deb [ archamd64,arm64 signed-by/usr…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下&#xff0c;推客小程序系统凭借其裂变传播、精准营销等特性&#xff0c;成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径&#xff0c;助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...

Python网页自动化Selenium中文文档

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API&#xff0c;让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API&#xff0c;你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...

【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统

Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...