【Java】Java进阶学习笔记(一)—— 面向对象(封装)
【Java】Java进阶学习笔记(一)—— 面向对象(封装)
- 一、类中成分
- 1、类中成分
- 2、this关键字
- this() 访问构造器方法
- 3、static关键字
- 1. 成员变量的区分
- 2. 成员方法的区分
- 3. 成员变量访问语法的区分
- 二、封装
- 1、封装的定义
- 封装的好处
- 2、实现Java封装的步骤
- 3、封装实例
- 4、IDEA 行为封装的快捷键
- 5、在类的封装中加入抛出异常判断
一、类中成分
1、类中成分
-
成员变量(Field:描述类和对象的属性信息的)
-
成员方法(Methpd:描述类或者对象的行为信息的):包括实例方法,静态方法,抽象方法,getter setter 方法
-
构造器(Constructor:初始化一个类的对象并返回引用)
* 默认无参构造器:一个类默认会自带一个无参构造器,即使不写构造器,也有构造器存在,但是如果一个类它写了一个构造器,那么默认的无参构造器就被覆盖了!
* 有参构造器 -
代码块
-
内部类
/*javaBean类: 封装数据
*/
public class Student {// 两个成员变量 私有private String name;private int age;// 无参构造器public Student(){}// 有参数构造器public Student(String name,int age){this.name = name;this.age = age;}// 成员方法: setXX \ gerXXpublic void setName(String name){this.name = name; }public String getName(){return name;}public void setAge(int age){this.age = age}public int getAge(){return age;}public void show(){System.out.print;n(name + "..." + age);}}
2、this关键字
- this关键字可以用在实例方法和构造器中
(1)this 关键字用在方法中,谁调用这个方法,this 就代表谁;
(2)this 关键字用在构造器上,代表了构造器正在初始化那个对象的引用。
注意:对于static修饰的方法而言,可以直接使用类来调用该方法,如果在ststic修饰的方法中使用this关键字,则这个关键字就会无法指向合适的对象,所以,static修饰的方法中不能用this引用,并且Java语法规定,静态成员不能直接访问非静态成员;
/*javaBean类: 封装数据
*/
public class Student {// 两个成员变量 私有private String name;private int age;// 无参构造器public Student(){}// 有参数构造器中可以用 this 关键字public Student(String name,int age){this.name = name;this.age = age;}// 实例方法中可以用 this 关键字// 成员方法: setXX \ gerXXpublic void setName(String name){this.name = name; }public String getName(){return name;}public void setAge(int age){this.age = age}public int getAge(){return age;}public void show(){System.out.print;n(name + "..." + age);}
}
this() 访问构造器方法
作用:this() 用于访问本类的构造方法(构造器是类的一种特殊方法,方法名称和类名相同,没有返回值,括号中可以有参数,如果有参数就是有参构造方法)
- 通过一个构造器方法1去调用另一个构造器方法2,实现代码复用;
- 构造器方法1和构造器方法2都在同一个类中;
- 语法:this(实参列表);
- this(实参列表)的使用只能出现在第一个构造方法的第一行。
例:创建一个Student学生类,利用this(“实参列表”)给实例变量name赋值
通过this("实参列表")调用类中的有参构造器对name进行赋值
this("实参列表“)必须放在第一个构造器的第一行
public class Student {public String name;//无参构造器public Student() {//通过this(“实参列表")调用类中的有参构造器对name进行赋值//this("有参构造")必须放在第一个构造器的第一行this("甲");}//有参构造器public Student(String name) {this.name = name;}}
在测试类中。利用new关键字new一个对象出来后,打印输出name的值为甲。
代码示例如下:
public class DemoApplication {public static void main(String[] args) {//利用new关键字new一个Student类的对象Student student = new Student();//控制台打印输出结果为:甲System.out.println(student.name);}
}
3、static关键字
– 按照有无static修饰,成员变量和方法可以分为
1. 成员变量的区分
(1)静态成员变量(类变量)
有 static 修饰的成员变量称为静态成员变量,也叫类变量,属于类本身,直接用类名访问即可。
(2)实例成员变量
无 static 修饰的成员变量称为实例成员变量,属于类的每个对象的,必须用类的对象来访问。
2. 成员方法的区分
(1)静态方法
有static修饰的成员方法称为静态方法,也叫类方法,属于类本身的,直接用类名访问即可。
(2)实例方法
无static修饰的成员方法称为实例方法,属于类的每个对象的,必须用类的对象来访问。
3. 成员变量访问语法的区分
(1)静态成员变量访问:
类名.静态成员变量
对象.静态成员变量(也可以访问,但是不推荐)
(2)实例成员变量的访问:
对象.实例成员变量
public class Student {// 1.静态成员变量: 有static修饰,属于类本身,直接用类名访问即可!public static String schoolName = "中国";// 2.实例成员变量: 无static修饰,属于类的对象,必须用对象访问private String name;private int age;public static void main(String[] args){// 1.类名.静态成员变量System.out.println(Student.schoolName);// 注意:同一个类中访问静态成员变量可以省略类名不写System.out.println(schoolName);// 2.对象.实例成员变量Student s1 = new Student();s1.name = "孙悟空";System.out.println(s1.name);// 3.对象.静态成员变量(不推荐)System.out.println(s1.schoolName);// 静态成员变量属于类,直接用类名访问即可}
}
二、封装
1、封装的定义
封装就是隐藏对象的属性和实现细节,仅提供公共访问方式来让外界访问。当内部的逻辑发生变化时,外部调用不用因此而修改,它们只调用开放的接口,而不用去关心内部的实现。
封装的好处
1. 良好的封装能够减少耦合。2. 类内部的结构可以自由修改。3. 可以对成员变量进行更精确的控制。4. 隐藏信息,实现细节。
2、实现Java封装的步骤
- 修改属性的可见性来限制对属性的访问(一般限制为private),例如:
public class Person {private String name;private int age;
}
- 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问,例如:
public class Person{private String name;private int age;
public int getAge(){return age;}
public String getName(){return name;}
public void setAge(int age){this.age = age;}
public void setName(String name){this.name = name;}
}
采用 this 关键字是为了解决实例变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突。
3、封装实例
/* 文件名: EncapTest.java */
public class EncapTest{private String name;private String idNum;private int age;public int getAge(){return age;}public String getName(){return name;}public String getIdNum(){return idNum;}public void setAge( int newAge){age = newAge;}public void setName(String newName){name = newName;}public void setIdNum( String newId){idNum = newId;}
}
以上实例中public方法是外部类访问该类成员变量的入口。通常情况下,这些方法被称为getter和setter方法。
因此,任何要访问类中私有成员变量的类都要通过这些getter和setter方法。
/* F文件名 : RunEncap.java */
public class RunEncap{public static void main(String args[]){EncapTest encap = new EncapTest();encap.setName("James");encap.setAge(20);encap.setIdNum("12343ms");System.out.print("Name : " + encap.getName()+ " Age : "+ encap.getAge());}
}
以上代码编译运行结果如下:
Name : James Age : 20
4、IDEA 行为封装的快捷键
- 点击右键,选择Generate

- 选择Getter and Setter

- 选择要进行封装的属性(按住Shift可多选),点击ok

5、在类的封装中加入抛出异常判断
定义一个 Car类,封装其属性 name 和 color,
对于 color属性来说,不能为 red,否则爆红。
对于 name属性来说,不能传入 null,否则报错。
public class Car {private String name;private String color;public String getName() {return name;}public void setName(String name) {/*** 判断 如果在启动项中赋值name为空 抛出异常*/if ( name == null) {throw new IllegalArgumentException("invalid name");}this.name = name;}public String getColor() {return color;}public void setColor(String color) {/*** 判断 如果在启动项中赋值color为red 抛出异常*/if ( name == null || name.isEmpty() ) {throw new IllegalArgumentException("invalid name");}this.color = color;}
}
在测试文件中:
public class DemoApplication {public static void main(String[] args) {Car car = new Car();car.setColor("red");System.out.println("车子的颜色为--------------------"+car.getColor());car.setName(" ");System.out.println("车子的名字为---------------------"+car.getName());}
}
控制台报错如下:

相关文章:
【Java】Java进阶学习笔记(一)—— 面向对象(封装)
【Java】Java进阶学习笔记(一)—— 面向对象(封装)一、类中成分1、类中成分2、this关键字this() 访问构造器方法3、static关键字1. 成员变量的区分2. 成员方法的区分3. 成员变量访问语法的区分二、封装1、封装的定义封装的好处2、…...
jsp拆迁管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
一、源码特点 JSP 拆迁管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0&…...
CCNP350-401学习笔记(易错题合集)
CCNP350-401学习笔记(1-50题)_殊彦_sy的博客-CSDN博客CCNP350-401学习笔记(2023.2.17)https://blog.csdn.net/shuyan1115/article/details/129088574?spm1001.2014.3001.5502CCNP350-401学习笔记(51-100题)…...
喀秋莎Camtasia2023最新版本电脑录屏剪辑软件
录屏软件的鼻祖是techSmith 的喀秋莎(Techsmith Camtasia Studio),视频编辑软件Camtasia 2023发布,十大新功能放出!作为一个自媒体人,每天都要录制编辑视频,选择一个好的视频编辑工具就是大家首先面临的一个…...
「考研算法」
考研算法 前言 本系列文章涉及的算法内容,针对的是哈尔滨工业大学854科目。在本文中通过具体的算法题进行讲解相应算法。 今天涉及的算法主要有线性筛,十大排序中快速排序和归并排序。 后续会有动态规划的相关算法以及尝试模型的总结,如果…...
Android Framework-操作系统基础
最近在看《深入理解Android内核设计思想(第2版)》,个人感觉很不错,内容很多,现将书里个人认为比较重要的内容摘录一下,方便后期随时翻看。 计算机体系结构 硬件是软件的基石,所有的软件功能最…...
美国最新调查显示 50% 企业已在用 ChatGPT,其中 48% 已让其代替员工,你怎么看?
美国企业开始使用ChatGPT,我认为这不是什么新闻。 如果美国的企业现在还不使用ChatGPT,那才是个大新闻。 据新闻源显示,已经使用chatGPT的企业中,48%已经让其代替员工工作。 ChatGPT的具体职责包括:客服、代码编写、招…...
[Java·算法·中等]LeetCode17. 电话号码的字母组合
每天一题,防止痴呆题目示例分析思路1题解1分析思路2题解2题目 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。…...
C#7/C#8/C#9 与dotnetSDK 以及dotnet framework对应关系
语言版本 对应的.net framework版本 对应的.net sdk版本 推荐使用的vs studio C#7.3 3.5、 4.0、 4.5 、4.5.1、 4.5.2 、4.6 、4.6.1、 4.6.2 4.7.1、 4.7.2 .netcore 2.0、.netcore2.1、 .netcore2.2 C#8.0 / F#4.7 不支持 .netcore 3.0、.netcore 3.1 C# 9.0 …...
jvm调优经验总结
最近一段时间很忙,忙到每天10点多11点下班还是感觉有很多事没有做完,不过倒也没有什么太过低落的情绪,有时候只安静的看一个视频,简单看点文字,或者平静的坐着,并没有太多想法。短时间的工作压力是可以接受…...
等保合规知识常见问题解答
Q1:什么是等级保护? 答:等级保护是指对国家重要信息、法人和其他组织及公民的专有信息以及公开信息和存储、传输、处理这些信息的信息系统分等级实行安全保护,对信息系统中使用的信息安全产品实行按等级管理,对信息系统…...
分享5款Windows同类软件中的翘楚
今天要给大家推荐的是5款软件,每个都是同类软件中的个中翘楚,请大家给我高调地使用起来,不用替我藏着掖着。1.沙盒工具——Sandboxie Sandboxie是一个电脑必备的沙盘工具,对于从网上下载的软件安装包、文件、视频、图片等等一切不…...
记--springboot-工具类中使用@Component、@Resource与@Value失效
写一个工具类 需要使用Resource注入RedisTemplate 使用Value获取application.properties配置文件中配置 并使用Component将该工具类交个spring管理 调试的时候RedisTemplate以及所有的变量全是是null 看了网上的各种解决方式五花八门 有的说出现问题的原因:Compon…...
手写一个react,看透react运行机制
适合人群 本文适合0.5~3年的react开发人员的进阶。 讲讲废话: react的源码,的确是比vue的难度要深一些,本文也是针对初中级,本意让博友们了解整个react的执行过程。 写源码之前的必备知识点 JSX 首先我们需要了解什么是JSX。…...
JS判断输入值是否为正整数,判断变量是否为数字
这篇文章将讨论如何确定一个变量是否代表 JavaScript 中的有效数字。 1.JS中的test是原来是JS中检测字符串中是否存在的一种模式,JS输入值是否为判断正整数代码: <script type”text/javascript”> function test() { var num document.getElem…...
Android开发八股文,Android也有自己的八股文了
前言别的行业都有自己的八股文,凭什么Android没有。2023春招即将来临,很多同学会问 Android开发的面试题有必要背吗?我的回答是:很有必要。你可以讨厌这种模式,但你一定要去背,因为不背你就进不了大厂。国内…...
你需要同款“Unreal项目自动化编译、打包和部署”方案吗?
在过往几期的UWA Pipeline最佳实践案例中,我们分享了如何通过Pipeline实现性能优化、性能管理、游戏内容验收和云真机系统的应用(实现批量真机设备的自动化测试,以及针对特效性能优化的方式),其实这些高效的方法并不局…...
电子技术——CMOS-AB类输出阶
电子技术——CMOS-AB类输出阶 本节我们研究CMOS-AB类输出阶。 经典配置 下图展示了一个经典的CMOS-AB类输出阶: 这个很像BJT二极管偏置版本的AB类输出阶,在这里二极管偏置变成了 Q1Q_1Q1 和 Q2Q_2Q2 偏置。不想BJT的情况,这里 QNQ_NQN…...
2023王道考研数据结构笔记第二章线性表
第二章 线性表 2.1 线性表的定义 2.1.1 线性表的基本概念 线性表是具有相同数据类型的n(n>0)个数据元素的有限序列,其中n为表长,当n0时线性表是一个空表。若用L命名线性表,则其一般表示为: L(a1,a2,...,ai,ai1,...,an)L(a_1…...
[chapter 11][NR Physical Layer][Layer Mapping]
前言:这里参考Curious Being系列 ,简单介绍一下NR 5G 物理层核心技术层映射.我们主要讲了一下what is layer Mapping, why need layer Mapping, how layer Mapping 参考文档:3GPP 38.211- 6.3.1.3 Layer mapping《5G NR Physical Layer | Cha…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
