新手入门Java第二阶段 封装概念及包、访问修饰符和static修饰符介绍

第三章 封装

课前回顾

1.带参方法如何定义

访问修饰符 返回值类型 方法名(参数列表){//形式参数列表}对象名.方法名(实参列表);

2.方法的参数是如何传递的

在java中,方法参数的传递都是值传递。只是基本数据类型作为参数传递时,传递的是值的拷贝。引用数据类型作为参数传递时,传递的是堆内存的空间地址值

3.什么是方法重载

在同一个类中,如果存在多个方法名称相同,但参数列表不一致。这些方法构成了方法重载。

4.return关键字有什么作用

return关键字的主要作用就是给出方法执行后的结果,使方法直接结束。

第一节 封装(Encapsulation)

1.什么是封装

封装就是将类的部分属性和方法隐藏起来,不允许外部程序直接访问,只能通过该类提供的公开的方法来访问类中定义的属性和方法。

封装是面向对象的三大特性之一。

2.如何使用封装

示例

public class Person {public String name; //姓名public int age; //年龄public String secert; //秘密public Person(String name,int age,String secert){this.name = name;this.age = age;this.secert = secert;}
}

此时PersonTest正常

在这里插入图片描述

修改属性的可见性:将类中定义的所有属性全部修改为private修饰

public class Person {//private表示私有的意思,相当于个人隐私private String name; //姓名private int age; //年龄private String secert; //秘密public Person(String name,int age,String secert){this.name = name;this.age = age;this.secert = secert;}
}

在这里插入图片描述

修改之后在PersonTest中就访问不到Person中的age了

创建公开的getter/setter方法:用于读取/修改属性值

public class Person {//private表示私有的意思,相当于个人隐私private String name; //姓名private int age; //年龄private String secert; //秘密public Person(String name,int age,String secert){this.name = name;this.age = age;this.secert = secert;}//可以用快捷键ALT + INSERTpublic 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 String getSecert() {return secert;}public void setSecert(String secert) {this.secert = secert;}
}

在getter/setter方法中加入控制语句:用于对属性值的合法性校验

public void setAge(int age) {if(age < 0){System.out.println("你输入的年龄不合法,年龄必须为大于0的整数");} else{this.age = age;}
}

3.为什么要使用封装

a.封装提高了代码的重用性。因为封装会提供对外访问的公开的方法,而方法可以重用,因此封装提高了代码的重用性。

b.封装提高了代码的可维护性。修改代码时只需要修改部分,但不会影响其他代码。

比如:年龄在设计时只考虑到了负数的情况,没有考虑实际生活中的情况,人的年龄一般都不会超过200岁,因此还需要加上一层验证

public void setAge(int age) {if(age < 0 || age > 200){System.out.println("你输入的年龄不合法,年龄必须为大于0的整数");} else{this.age = age;}
}

c.封装隐藏了类的具体实现细节,保护了代码实现逻辑。

第二节 包

1.什么是包

包是Java中的一个专业名词。包的本质就是一个文件夹。

2.为什么要使用包

因为包可以对我们编写的类进行分类。可以防止命名冲突和访问权限控制。

3.如何创建包

语法

package 包名;

包名命名规范:

包名一般都是由小写字母和数字组成,每个包之间用‘ . ’隔开,换言之,每出现一个‘ . ',就是一个包

包名一般都含有前缀,比如个人/组织通常都是org.姓名,公司通常都是 com.公司名称简写或者cn.公司名称简写

如果一个类中有包的定义,那么这个类的第一行有效代码一定是包的定义

4.如何引入包

为了使用不在同一包中的类,需要在java程序中使用import关键字引入这个类

语法

import 包名.类名;

为什么会引入包?

因为JVM只能识别当前包下所有的类,如果要使用当前包之外的其他包中的类,那必须告诉JVM,使用的是哪一个包中的哪一个类。

示例

package org.wu.lesson;//类的全限定名:  包名 + “.” + 类名
import java.util.Scanner; //告诉JVM,到java.util包下去找一个名为Scanner的类public class Test {public static void main(String[] args) {Scanner sc = new Scanner(System.in);Student student = new Student();}
}

//继续在这个包中开辟一个Student类
package org.wu.lesson;public class Student {
}

一个类同时引用了两个来自不同包的同名类,必须通过完整类名(类的全限定名)来区分

示例

package org.wu.lesson;//类的全限定名:  包名 + “.” + 类名
import com.alibaba.dubbo.User;import java.util.Scanner; //告诉JVM,到java.util包下去找一个名为Scanner的类public class Test {public static void main(String[] args) {Scanner sc = new Scanner(System.in);Student student = new Student();User user = new User();//因为该类中引入了com.alibaba.dubbo.User,因此如果不写包名,那么默认使用的就是com.alibaba.dubbo.User//如果需要使用其他包中的User,则必须使用类的全限定名来进行对象的构建与赋值操作com.ly.chapter11.User user1 = new com.ly.chapter11.User();}
}

5.常用包说明

java.lang包:属于java语言开发包,该包中的类可以直接拿来使用,而不需要引入包,因为JVM会自动引入。比如我们经常使用的

System、String、Math等

java.util包:属于java提供的一些使用类以及工具类。比如我们经常使用的Scanner、

第三节 访问修饰符

1.概念

访问修饰符就是控制访问权限的修饰符号

2.类的访问修饰符

类的访问修饰符只有两种:public修饰符和默认修饰符(不写修饰符就是默认)

public修饰符修饰类表示类可以公开访问。默认修饰符修饰类表示该类只能在同一个包中可以访问

示例

在这里插入图片描述

默认修饰符修饰的Teacher类:

在这里插入图片描述

在同一个包中的School可以访问到Teacher类:

在这里插入图片描述

在同一个包的子包test中的TeacherTest访问不到Teacher类:

在这里插入图片描述

3.类成员访问修饰符

类成员包括了成员属性和成员方法。类成员访问修饰符换言之就是成员属性和成员方法的访问修饰符。

在这里插入图片描述

示例

在School类中定义四种修饰符修饰的成员属性:

在这里插入图片描述

发现show()没有报错,说明在同一个类中四种修饰符都可以访问

在School所在包中定义一个SchoolTest类(在同一包中):

在这里插入图片描述

发现无法访问到School类中private修饰的成员

子类在后面的学习中会讲到,目前暂时不举例,知道即可

在任何地方:

在这里插入图片描述

发现只有School类中public修饰的成员才能访问到

第四节 static修饰符

1.static修饰符应用范围

static修饰符只能用来修饰类中定义的成员变量、成员方法、代码块以及内部类(内部类有专门章节讲解)。

2.static修饰成员变量

static修饰的成员变量称之为类变量,属于该类所有成员共享。

示例

package cn.lyxq.chapter11;public class ChinesePeople {private String name;private int age;//使用static修饰的成员变量称之为类变量,不会随着成员变化而变化,属于所有成员共享public static String country = "中国";public ChinesePeople(String name,int age){this.name = name;this.age = 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;}}
package cn.lyxq.chapter11;public class ChinesePeopleTest {public static void main(String[] args) {ChinesePeople cp1 = new ChinesePeople("张三",20);System.out.println(cp1.country);ChinesePeople.country = "XXX";ChinesePeople cp2 = new ChinesePeople("李四",30);System.out.println(cp2.country);ChinesePeople cp3 = new ChinesePeople("王五",30);System.out.println(cp3.country);}
}

编译结果为:

在这里插入图片描述

如果类变量是公开的,那么可以使用类名.变量名直接访问该变量

3.static修饰成员方法

static修饰的成员方法称之为类方法。属于该类所有成员共享。

示例

package cn.lyxq.chapter11;public class ChinesePeople {private String name;private int age;//使用static修饰的成员变量称之为类变量,不会随着成员变化而变化,属于所有成员共享private static String country = "中国";public ChinesePeople(String name,int age){this.name = name;this.age = 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 static String getCountry() {return country;}//类方法public static void setCountry(String country) {ChinesePeople.country = country;}
}
package cn.lyxq.chapter11;public class ChinesePeopleTest {public static void main(String[] args) {ChinesePeople cp1 = new ChinesePeople("张三",20);System.out.println(cp1.getCountry());cp1.setCountry("XXX");ChinesePeople cp2 = new ChinesePeople("李四",30);System.out.println(cp2.getCountry());ChinesePeople cp3 = new ChinesePeople("王五",30);System.out.println(cp3.getCountry());}
}

编译结果为:

在这里插入图片描述

如果类方法是公开的,那么可以使用类名.方法名直接访问该方法

4.static修饰代码块

static修饰的代码块称为静态代码块,在JVM第一次记载类时执行(要么是第一次调用类的方法时,要么就是第一次调用类的构造方法时)。因此,静态代码块只能够被执行一次,通常用于一些系统设置场景。

示例

package cn.lyxq.chapter11;public class ChinesePeople {private String name;private int age;//使用static修饰的成员变量称之为类变量,不会随着成员变化而变化,属于所有成员共享private static String country;//static修饰的代码块称为静态代码块,在JVM第一次记载类时执行,只能执行一次static {country = "中国";System.out.println("country属性已经被赋值");}public ChinesePeople(String name,int age){this.name = name;this.age = 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 static String getCountry() {return country;}//类方法public static void setCountry(String country) {ChinesePeople.country = country;}
}

5.static内存

画图示例:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

移动web开发流式布局

1.0 移动端基础 1.1 浏览器现状 PC端常见浏览器&#xff1a;360浏览器、谷歌浏览器、火狐浏览器、QQ浏览器、百度浏览器、搜狗浏览器、IE浏览器。 内核&#xff1a; 浏览器内核备注Safariwebkitwebkit内核是苹果公司开发的一款渲染引擎&#xff0c;目前已被很多手机厂商所采…

UE5 蓝图编辑美化学习

虚幻引擎中干净整洁蓝图的15个提示_哔哩哔哩_bilibili 1.双击线段成节点。 好用&#xff0c;爱用 2.用序列节点 好用&#xff0c;爱用 3.用枚举。 好用&#xff0c;能避免一些的拼写错误 4.对齐节点 两点一水平线 5.节点上下贴节点 &#xff08;以前不懂&#xff0c;现在经常…

Gitlab添加ssh-key报500错误处理

Gitlab添加ssh-key报500错误 一、查看日志 发现Errno::Enoent(No such file or derectory -ssh): rootasu1:/home/caixin# tail -f /var/log/gitlab/gitlab-rails/production.log二、分析 根据日志提示&#xff0c;好像是缺少文件或目录&#xff0c;后面有个ssh,难首是依赖s…

C#winform上位机开发学习笔记1-串口助手的ModbusCRC功能

1.首先自定义CRC校验函数 private UInt16 Crc_Check(byte[] Data, byte DataLEN){UInt16 CRC 0xFFFF;for (byte i 0; i < DataLEN; i){ CRC ^ Data[i];for(byte j 0; j < 8; j){if((CRC & 0x0001) 0x0001){CRC (UInt16)((CRC >> 1) ^ 0xA001);}else{CRC …

SQL 最大连续合格次数 最大连胜记录次数 最大连败记录次数

有这样一个问题&#xff0c;工厂中要统计某个供应商送货检验的情况&#xff0c;依照其连续合格次数&#xff0c;决定是否免检&#xff0c;不使用游标或者循环&#xff0c;如何写这个sql。 此情景也可以用于统计连胜记录等 先要学习一下 窗函数LAG&#xff0c;指的是按分组和排…

vue 解决el-table 表体数据发生变化时,未重新渲染问题

效果图父组件中数量改变后总数重新计算 子组件完整代码 <template><el-tableshow-summaryref"multipleTable"v-bind"$props"selection-change"handleSelectionChange"row-click"handleRowClick":summary-method"getSum…

经典目标检测YOLO系列(二)YOLOV2的复现(2)正样本的匹配、损失函数的实现及模型训练

经典目标检测YOLO系列(二)YOLOV2的复现(2)正样本的匹配、损失函数的实现及模型训练 我们在之前实现YOLOv1的基础上&#xff0c;加入了先验框机制&#xff0c;快速的实现了YOLOv2的网络架构&#xff0c;并且实现了前向推理过程。 经典目标检测YOLO系列(二)YOLOV2的复现(1)总体…

【Go面试向】rune和byte类型的认识与使用

【Go】rune和byte类型的认识与使用 大家好 我是寸铁&#x1f44a; 总结了一篇rune和byte类型的认识与使用的文章✨ 喜欢的小伙伴可以点点关注 &#x1f49d; byte和rune类型定义 byte,占用1个字节&#xff0c;共8个比特位&#xff0c;所以它实际上和uint8没什么本质区别,它表示…

Joern环境的安装(Windows版)

Joern环境的安装(Windows版) 网上很少有关于Windows下安装Joern的教程&#xff0c;而我最初使用也是装在Ubuntu虚拟机中&#xff0c;这样使用很占内存&#xff0c;影响体验感。在Windows下使用源码安装Joern也是非常简单的过程&#xff1a; 提前需要的本地环境&#xff1a; …

基于Java+SSM框架的办公用品管理系统详细设计和实现【附源码】

基于JavaSSM框架的办公用品管理系统详细设计和实现【附源码】 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定…

GO 中如何防止 goroutine 泄露

文章目录 概述如何监控泄露一个简单的例子泄露情况分类chanel 引起的泄露发送不接收接收不发送nil channel真实的场景 传统同步机制MutexWaitGroup 总结参考资料 今天来简单谈谈&#xff0c;Go 如何防止 goroutine 泄露。 概述 Go 的并发模型与其他语言不同&#xff0c;虽说它…

蓝天采集器,功能逆天的网站数据抓取神器,轻松助你成为采集达人,附带搭建配置文档

源码介绍 蓝天采集器是一款专为web服务器打造的数据采集神器。与市面上常见的桌面端采集工具&#xff08;如火车头等&#xff09;相比&#xff0c;蓝天采集器在易用性、上手成本和灵活性方面更胜一筹。它部署简便&#xff0c;无需复杂的设置&#xff0c;即可迅速融入您的web服…

详解IP安全:IPSec协议簇 | AH协议 | ESP协议 | IKE协议_ipsec esp

目录 IP安全概述 IPSec协议簇 IPSec的实现方式 AH&#xff08;Authentication Header&#xff0c;认证头&#xff09; ESP&#xff08;Encapsulating Security Payload&#xff0c;封装安全载荷&#xff09; IKE&#xff08;Internet Key Exchange&#xff0c;因特网密钥…

storm统计服务开启zookeeper、kafka 、Storm(sasl认证)

部署storm统计服务开启zookeeper、kafka 、Storm&#xff08;sasl认证&#xff09; 当前测试验证结果&#xff1a; 单独配置zookeeper 支持acl 设置用户和密码&#xff0c;在storm不修改代码情况下和kafka支持当kafka 开启ACL时&#xff0c;storm 和ccod模块不清楚配置用户和密…

2018年认证杯SPSSPRO杯数学建模A题(第二阶段)海豚与沙丁鱼全过程文档及程序

2018年认证杯SPSSPRO杯数学建模 基于聚类分析的海豚捕食合作策略 A题 海豚与沙丁鱼 原题再现&#xff1a; 沙丁鱼以聚成大群的方式来对抗海豚的捕食。由于水下光线很暗&#xff0c;所以在距离较远时&#xff0c;海豚只能使用回声定位方法来判断鱼群的整体位置&#xff0c;难…

第4章 C++的类

类的保留字&#xff1a;class、struct 或 union 可用来声明和定义类。类的声明由保留字class、struct或union加上类的名称构成。类的定义包括类的声明部分和类的由{}括起来的主体两部分构成。类的实现通常指类的函数成员的实现&#xff0c;即定义类的函数成员。 class 类名;//…

C#,字符串匹配(模式搜索)Sunday算法的源代码

Sunday算法是Daniel M.Sunday于1990年提出的一种字符串模式匹配算法。 核心思想&#xff1a;在匹配过程中&#xff0c;模式串并不被要求一定要按从左向右进行比较还是从右向左进行比较&#xff0c;它在发现不匹配时&#xff0c;算法能跳过尽可能多的字符以进行下一步的匹配&…

港科夜闻|香港科大团队研发多功能,可重构和抗破坏单线感测器阵列

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大团队研发多功能、可重构和抗破坏单线感测器阵列。研究人员开发出一种受人类听觉系统启发的感测器阵列设计技术。透过模仿人耳根据音位分布来区分声音的能力&#xff0c;这种新型感测器阵列方法可能优化感测器阵列…

Yolov8_使用自定义数据集训练模型1

前面几篇文章介绍了如何搭建Yolov8环境、使用默认的模型训练和推理图片及视频的效果、并使用GPU版本的torch加速推理、导出.engine格式的模型进一步利用GPU加速&#xff0c;本篇介绍如何自定义数据集&#xff0c;这样就可以训练出识别特定物体的模型。 《Yolov8_使用自定义数据…

innoDB存储引擎

1.逻辑存储结构 行数据->行->页->区->段->表空间 表空间(ibd文件)&#xff0c;一个mysql实例可以对应多个表空间&#xff0c;来存储记录&#xff0c;索引等数据。 段&#xff1a;分为数据段和索引段&#xff0c;回滚段&#xff0c;数据段就是B树的叶子节点&am…