新手入门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.rhkb.cn/news/241473.html

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

相关文章

Linux--磁盘与文件系统

目录 1.什么是文件系统 2.磁盘 2.1什么时磁盘 2.2磁盘的物理存储结构 2.3磁盘的逻辑抽象结构 3.磁盘文件系统&#xff08;EXT2&#xff09; inode Table(i结点表) Data Block inode Bitmap(inode位图) Block Bitmap(块位图) 在Linux如何删除文件 Group Descriptor Ta…

C++类相关oj题目分享(计算日期到天数转换、日期差值、打印日期、日期累加)

文章目录 1.计算日期到天数转换题目详情代码思路 2.KY111 日期差值题目详情代码思路 3.KY222 打印日期题目详情代码 4.KY258 日期累加题目详情代码思路 1.计算日期到天数转换 传送门 题目详情 代码 #include <iostream> using namespace std; int GetDay(int year,int…

【创作活动】ChatGPT 和文心一言哪个更好用?

文章目录 文心一言优点缺点 ChatGPT优点缺点 Java编码能力比较对人工智能的看法 ChatGPT是由OpenAI开发的交互式AI大模型&#xff0c; 文心一言是由百度研发的知识增强大语言模型&#xff0c;本文从Java开发的角度对比一下哪个更好用&#xff08;本文仅用于投稿CSDN创造活动&am…

虚拟线程探索与实践

优质博文&#xff1a;IT-BLOG-CN 一、简介 虚拟线程是轻量级线程&#xff0c;极大地减少了编写、维护和观察高吞吐量并发应用的工作量。虚拟线程是由JEP 425提出的预览功能&#xff0c;并在JDK 19中发布&#xff0c;JDK 21中最终确定虚拟线程&#xff0c;以下是根据开发者反馈…

中小企业股权质押融资(下)

股权质押融资的主要风险 由于股权资产的特殊性&#xff0c;较固定资产抵押和质押、第三方担保等方式&#xff0c;股权质押融资风险易受企业经营状况等因素的影响&#xff0c;主要包括股权价值下跌的风险、股权质押的道德风险、股权处置风险以及现行法律不完善导致的法律风险。…

30分钟带你深入优化安卓Bitmap大图

30分钟带你源码深入了解Bitmap以及优化安卓大图 一、前言二、Bitmap入门1. 如何创建Bitmap?2. Bitmap的堆内存分布在哪里3. 图片文件越大&#xff0c;Bitmap堆内存会越大吗&#xff1f;4. 如何管理Bitmap的内存&#xff1f;5. 实战修改Bitmap的堆内存&#xff0c;改变图片的图…

一万六千字大章:Chrome 浏览器插件 V3 版本 Manifest.json 文件全字段解析

Chrome 浏览器插件 V3 版本 Manifest.json 文件全字段解析 Manifest.json 文件格式 每个扩展程序的根目录中都必须有一个 manifest.json 文件&#xff0c;其中列出了有关该扩展程序的结构和行为的重要信息。 1、Demo 展示 1. 最小文件 {"manifest_version": 3,&quo…

【算法与数据结构】Java实现查找与排序

文章目录 第一部分&#xff1a;查找算法二分查找插值查找分块查找哈希查找树表查找 第二部分&#xff1a;排序算法冒泡排序选择排序插入排序快速排序 总结 第一部分&#xff1a;查找算法 二分查找 也叫做折半查找&#xff0c;属于有序查找算法。 前提条件&#xff1a;数组数据…

C#MQTT编程07--MQTT服务器和客户端(wpf版)

1、前言 上篇完成了winform版的mqtt服务器和客户端&#xff0c;实现了订阅和发布&#xff0c;效果666&#xff0c;长这样 这节要做的wpf版&#xff0c;长这样&#xff0c;效果也是帅BBBB帅&#xff0c;wpf技术是cs程序软件的福音。 wpf的基础知识和案例项目可以看我的另一个专…

使用Python的pygame库实现下雪的效果

使用Python的pygame库实现下雪的效果 关于Python中pygame游戏模块的安装使用可见 https://blog.csdn.net/cnds123/article/details/119514520 先给出效果图&#xff1a; 源码如下&#xff1a; import pygame import random# 初始化pygame pygame.init()# 设置屏幕尺寸 width…

用Python优雅地写出数学表达式的LaTeX代码

用Python优雅地写出数学表达式的LaTeX代码 目录 Latexify LaTeX 安装方法 版本要求 使用方法 实例一 实例二 实例三 实例四 实例五 Latexify Latexify是一个Python库&#xff0c;它可以将数学表达式转换为LaTeX代码。通过使用latexify-py&#xff0c;可以将数学表达…

传统语音识别系统流程

文章目录 概述语音识别原理公式语音识别术语&#xff1a;分帧提取声学特征声学模型 概述 语音识别传统方法主要分两个阶段&#xff1a;训练和识别&#xff0c;训练阶段主要是生成声学模型和语言模型给识别阶段用。传统方法主要有五大模块组成&#xff0c;分别是特征提取&#…

java使用jsch处理软链接判断是否文件夹

前言 这一次主要是碰到一个问题。因为使用jsch去读取文件的时候&#xff0c;有一些文件它是使用软链接制作的一个映射。因为这里面有一个问题。如果它是软链接你就无法判断他到底是文件。还是文件夹&#xff1f;因为他没有提供可以直接读取的方法&#xff0c;用权限信息去判断…

vue2使用 element表格展开功能渲染子表格

默认样式 修改后 样式2 <el-table :data"needDataFollow" border style"width: 100%"><el-table-column align"center" label"序号" type"index" width"80" /><el-table-column align"cent…

64.Spring事件监听的核心机制是什么?

Spring事件监听的核心机制是什么? spring的事件监听有三个部分组成 事件(ApplicationEvent) 负责对应相应监听器 事件源发生某事件是特定事件监听器被触发的原因监听器(ApplicationListener) 对应于观察者模式中的观察者。监听器监听特定事件,并在内部定义了事件发生后的响应…

关于java中的Super详解

关于java中的Super详解 我们在上一篇文章中了解到了面向对象三大基本特征&#xff0c;继承&#xff0c;我们本篇文章中来了解一下Super&#x1f600;。 一、Super和this调用属性 this&#xff1a;当前类中使用。super&#xff1a;父类使用。 我们直接用代码来说明一下。 1…

如何使用JS逆向爬取网站数据

引言&#xff1a; JS逆向是指利用编程技术对网站上的JavaScript代码进行逆向分析&#xff0c;从而实现对网站数据的抓取和分析。这种技术在网络数据采集和分析中具有重要的应用价值&#xff0c;能够帮助程序员获取网站上的有用信息&#xff0c;并进行进一步的处理和分析。 基…

windows vscode jsoncpp cmake c++ 构建项目

jsoncpp的编译和使用推荐文章&#xff1a;jsoncpp的编译和使用 | 爱编程的大丙 (subingwen.cn)https://www.subingwen.cn/cpp/jsoncpp/从这个链接下载jsoncpp-master&#xff1a;https://github.com/open-source-parsers/jsoncpp 可以把这个文件夹名字改成jsoncpp&#xff0c;…

探索设计模式的魅力:“感受单例模式的力量与神秘” - 掌握编程的王牌技巧

在软件开发的赛场上&#xff0c;单例模式以其独特的魅力长期占据着重要的地位。作为设计模式中的一员&#xff0c;它在整个软件工程的棋盘上扮演着关键性角色。本文将带你深入探索单例模式的神秘面纱&#xff0c;从历史渊源到现代应用&#xff0c;从基础实现到高级技巧&#xf…

未来的NAS:连接您的数字生活

未来的NAS&#xff1a;连接您的数字生活 引言 网络附加存储&#xff08;Network Attached Storage&#xff0c;简称NAS&#xff09;是一种通过网络连接的存储设备&#xff0c;用于集中存储和共享数据。传统的NAS设备通常包含一个或多个硬盘驱动器&#xff0c;可以通过局域网连…