JAVA封装和包

一.包的概念:

下面是包的目录位置:

在src底下的demo,com,baidu相当于一个文件夹,可以存放类,同一个包类名不能相同,不同的包的类名可以相同。(通俗点来说:一个包相当于一个文件夹,里面的类相当于文件)

自定义包里的类可以被其他包里的类访问。(具体看下面内容)

二.访问权限控制符

有这么一张图:("√"代表有权限访问的类)

它可以修饰类的成员属性,被修饰的成员访问权限会被改变。

(1)private

比如有这么一段代码:

这是同一个包的不同的类,正常来说,public 修饰的成员变量 在另一个类里也能访问赋值,但这里报错了,我们通过引用变量赋值不了,是因为,这两个成员属性被 private 修饰了,使得同一个包不同的类里不能访问了,那么我们想要赋值怎么办呢?

可以这样:

可以看到,正常编译并打印了数据。

我们是通过左边类里的方法 setName 和 set Age 来给成员变量赋值,在右边通过 引用 . 方法名就可以访问左边方法 setName 和 set Age 来给成员变量赋值了。

(2) default

该访问权限控制符是什么都不写时的默认权限。

看下面代码:

成员属性前面什么都不写,默认权限是 default ,这是同一个包不同的两个类,这两个类都在 demo 包里,我们是通过右边的类的引用来赋值,可以看到正常编译并打印了。

但是,如果在不同的包呢?

Student 类是在 demo包下面的 ,Test 类是在 com 包下面的,结果编译失败了。

三.static修饰成员属性

看下面代码:

成员变量 h 被 static 修饰后,那么此时每个对象当中的成员就不包含这个属性了,而是单独存储在方法区中。

h 成为静态成员变量,也叫类变量。那么,我们可以怎么访问他呢?

有两种方法:

第一种:通过成员变量来访问:

可以看到打印出结果了。但是,这样访问静态成员变量是不合理的,不建议这样访问。

第二种:通过类名访问:

这样才是合理的,通过 类名.静态成员变量名 来进行访问。

四.static 修饰方法

如果静态成员变量被private修饰了,那么外面的类又该怎么访问他呢?

看下面代码:

上述代码中,我们是通过创建一个静态方法 public static String getclassroom 来进行访问的,通过 类名.方法名 来进行调用该静态方法,就能获得静态成员的值进行打印。

注意:

静态方法不能直接来访问 外部的非静态成员变量/方法。

比如:

因为 变量 name 和 age 的创建 需要有对象,但是右边传递的是类名,并没有引用,也没有对象的 变量 name 和 age ,所以左边的静态方法 getclassroom 无法获得引用信息。

五.代码块

代码块分为:

实例代码块,静态代码块,构造代码块

他们的执行顺序是:

(静态的成员变量) ----> 静态代码块 ----> 实例代码块 ----> 构造代码块

比如:

程序的结果:

首先,我们可以看到,静态代码块只会执行一次,后面 student 2 访问类时不会再打印一次静态代码块内容了,打印结果其实还与静态代码块定义的顺序有关,如果把静态代码块1 和 2 调换顺序,结果就会相反,本图不做调换顺序的演示。

静态代码块可以给静态成员赋值,不能给非静态成员赋值,因为非静态成员访问需要引用,而静态代码块不需要引用。

实例代码块执行结果也和定义的顺序有关,并且实例代码块可以给非静态成员赋值。

最后是执行构造代码。

相关推荐
期待のcode34 分钟前
Spring框架1—Spring的IOC核心技术1
java·后端·spring·架构
葵野寺43 分钟前
【RelayMQ】基于 Java 实现轻量级消息队列(七)
java·开发语言·网络·rabbitmq·java-rabbitmq
书院门前细致的苹果1 小时前
JVM 全面详解:深入理解 Java 的核心运行机制
java·jvm
上官浩仁1 小时前
springboot excel 表格入门与实战
java·spring boot·excel
zyx没烦恼2 小时前
Qt 基础编程核心知识点全解析:含 Hello World 实现、对象树、坐标系及开发工具使用
开发语言·qt
木心爱编程2 小时前
C++链表实战:STL与手动实现详解
开发语言·c++·链表
mkhase2 小时前
9.11-QT-QT的基本使用
开发语言·qt
Kyln.Wu2 小时前
【python实用小脚本-211】[硬件互联] 桌面壁纸×Python梦幻联动|用10行代码实现“开机盲盒”自动化改造实录(建议收藏)
开发语言·python·自动化
Hello.Reader2 小时前
从零到一上手 Protocol Buffers用 C# 打造可演进的通讯录
java·linux·c#
ONLYOFFICE2 小时前
如何在ONLYOFFICE中使用OCR工具:轻松识别图片和PDF中的文字
编辑器·ocr·office