【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…...

【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...

MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...