【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…...
什么是工业物联网(IIoT)?
什么是工业物联网(IIoT)?工业物联网(IIoT) 被定义为一组设备和应用,允许大企业创建从核心到边缘的端到端连接环境。其还包括传统的物理基础设施,如集装箱和物流卡车,以收集数据,对事件做出反应,并在智能设备的帮助下做…...
「TCG 规范解读」PC 平台相关规范(4)
可信计算组织(Ttrusted Computing Group,TCG)是一个非盈利的工业标准组织,它的宗旨是加强在相异计算机平台上的计算环境的安全性。TCG于2003年春成立,并采纳了由可信计算平台联盟(the Trusted Computing Platform Alli…...
CSS背景属性之颜色渐变
颜色渐变 颜色渐变其实在网页设计中并不是特别常见, 但也不可避免的会出现导航栏是渐变色这种情况或者别的不是单一颜色的情况, 例如:这样的设计解决方案并不是只可以使用颜色渐变,我们可以使用两个div拼接,将文字放…...
IPv4地址细讲
文章目录一、IPv4地址简介二、IPv4地址的表示方法点分十进制记法三、IP地址的分类四、特殊IPv4地址:全 “0” 和全 “1”五、常用的三类IP地址使用范围六、五类IP地址的范围一、IPv4地址简介 IPv4地址分5类,每一类地址都由固定长度的字段组成࿱…...
sql语句中exists用法详解
文章目录一、语法说明exists:not exists:二、常用示例说明1.查询a表在b表中存在数据2.查询a表在b表中不存在数据3.查询时间最新记录4.exists替代distinct剔除重复数据总结一、语法说明 exists: 括号内子查询sql语句返回结果不为空ÿ…...
思迅软件端口不通导致软件和软锁报错的问题
一、端口不通导致软件和软锁报错的问题 问题说明:打开软件提示到:xxx.xxx.xxx.xxx失败! 处理步骤1: 假设软锁服务器IP为192.168.0.1,分别在服务器本机和客户端电脑测试软锁服务: 在服务器的浏览器中访问地址: http:/…...
Docker之路(7.DockerFile文件编写、DockerFile 指令解释、CMD与ENTRYPOINT的区别)
1.DockerFile介绍 dockerfile 是用来构建docker镜像的文件!命令参数脚本! 构建步骤: 编写一个dockerfile文件docker build构建成为一个镜像docker run 运行镜像docker push发布镜像(DockerHub、阿里云镜像仓库) 2.Dock…...
[软件测试]如何使用Eclipse导入项目并打开
🧑🎓个人介绍:大二软件生,现学JAVA、Linux、MySQL、算法 💻博客主页:渡过晚枫渡过晚枫 👓系列专栏:[编程神域 C语言],[java/初学者],[蓝桥杯] Ὅ…...
emplace_back与push_back异同
vector的emplace_back与push_back 文章目录vector的emplace_back与push_back前言1.区别总览2.push_back支持右值引用不支持传入多个构造参数总是会进行拷贝构造3.emplace_backemplace_back可以接受多个构造参数支持原地构造前言 在vector中,通过push_back与emplace_…...
【C语言航路】第十五站:程序环境和预处理
目录 一、程序的翻译环境和执行环境 二、编译和链接 1.翻译环境 2.编译本身也分为几个阶段 3.运行环境 三、预处理 1.预定义符号 2.#define 1.#define定义标识符 2.#define定义宏 3.#define 替换规则 4.#和## 5.带副作用的宏参数 6.宏和函数的对比 7.命名约定 …...
网站流量分析系统/电商运营培训大概多少学费
仅作为记录,大佬请跳过。 感谢大佬博主文章: 传送门 传送门2...
网络服务器无响应原因/爱站seo工具包
何为协程 协程,又称微线程。英文名Coroutine。 协程最大的优势就是协程极高的执行效率。因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协…...
网站备案 多ip/免费创建个人博客网站
学习目的及目标 掌握UDP原理和工作过程 掌握乐鑫ESP32的UDP的程序设计 主要掌握UDP源码过程UDP科普(来自百度百科)UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型…...
驻马店市住房和城乡建设局网站首页/北京seo服务销售
D3.js Canvas 绘制组织结构图 使用 D3.js 默认的 svg 渲染 D3默认的树状图画图使用的是svg, 比如这个来自D3作者的例子: https://bl.ocks.org/mbostock/... 使用svg有好有坏: 好处是方便操作dom元素, 添加用户交互坏处是渲染效率不高, 在数据量较大时页面易掉帧, 卡顿在大多数…...
免费注册自己的网站/培训课
1354 选数字基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题收藏关注当给定一个序列a[0],a[1],a[2],...,a[n-1] 和一个整数K时,我们想找出,有多少子序列满足这么一个条件:把当前子序列里面的所有元素乘…...
论网站建设情况/百度怎么投放广告
一、基本原理 1.数据源无关的数据统一操作,LINQ语句做了一个程序语句到各种数据源之间的抽象统一中间件。where开始,select或group结束. order 和group,select new等各种语句 。 2.用了拓展方法,在generic枚举类型来做࿰…...