当前位置: 首页 > news >正文

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 调换顺序,结果就会相反,本图不做调换顺序的演示。

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

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

         最后是执行构造代码。

        

         

        

        

        


http://www.mrgr.cn/news/52335.html

相关文章:

  • C# 里反射(Reflection)的應用說明
  • 并查集算法
  • 一站式讲解Wireshark网络抓包分析的若干场景、过滤条件及分析方法
  • 深入探索 C++ STL: 高效双向链表 list 的使用与实践
  • 【数据结构】在二叉树中有两个结点m和n,若m是n的祖先,则使用后序遍历可以找到从m到n的路径
  • 兰迪·舍克曼担任生命银行链(LBC)顾问,赋能基因数据技术发展
  • 【C++刷题】力扣-#170-两数之和III-数据结构设计
  • 基础实验4-2.7 修理牧场
  • kernel panic 稳定性分析实例(三)
  • 线性可分支持向量机的原理推导
  • Shell编程-for循环
  • 【存储设备专栏 2.8 -- gio mount -d /dev/sdb1 挂载U盘后查看挂载的目录】
  • 2024年推荐的7个自助建站工具?
  • 深度学习笔记20_数据增强
  • 一文详解 requests 库中 json 参数和 data 参数的用法
  • 最强小模型又易主!Mistral发布小部长Ministral 3B、8B,登基边缘计算之王!
  • 玩转Prometheus的pushgateway和联邦集群
  • perl模式匹配修饰符
  • 人工智能学习框架
  • 案例分析:Modbus设备如何通过MQTT网关连接阿里云IoT