包及权限配置

包的声明和导入

  1. //声明
  2. package aa.bb.cc;
  3. public class A{;}
  4. class B{;}
  5. //即在java输出目录aa.bb.cc中放入编译后的A.class和B.class文件
  6. //使用其他包中的类的两种方式
  7. //第一种:导入,import 包名.类名|接口名|*;
  8. import aa.bb.cc.A;
  9. //第二种:使用类的全名,即"包名.类名"
  10. aa.bb.cc.A a =new aa.bb.cc.A();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

注:

  1. 必须用声明(package)包的形式将类放入指定包中,必须用导入(import)包/类的形式使用包中的类
  2. 一个Java源文件只能声明一个包,且声明语句必须作为源文件的第一条指令
  3. 通常,功能相关密切的类、接口才能被放在同一包中
  4. 一个.java文件可包含多个import语句,但只能导入public权限的类或接口,一个.java文件只有一个public类,且该类名与文件名要相同
  5. 导入时不会导入子包,如要导入java.util包中的Scanner,用import java.*无法实现

从不同包中导入相同的类

从不同包中可以导入相同的类,但使用时必须用全名

  1. //源文件一:A.java
  2. package X;
  3. public class A{
  4. public int x;
  5. }
  6. //源文件二:A.java
  7. package Y;
  8. public class A{
  9. public String s;
  10. }
  11. //源文件三:A.java
  12. package Z;
  13. //import X.A; import Y.A; //这种导入方式将产生编译错
  14. import X.*; import Y.*; //正确
  15. public class A{
  16. int x;
  17. public static void main(String[] args){
  18. A a = new A(); a.x = 10; //正确,此A为Z包中的A
  19. Z.A a1 = new Z.A(); a1.x = 10; //正确,此A为Z包中的A
  20. X.A b = new Z.A(); b.x = 5; //正确,此A为X包中的A
  21. Y.A c = new Z.A(); c.s = "abc"; //正确,此A为Y包中的A
  22. }
  23. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

静态导入

JDK1.5版新增静态导入,可导入类/接口中的所有或特定静态成员,格式如下:

  1. import static <包名>.类名.*;
  2. import static <包名>.类名.<成员名>;

导入成员后,可以不加类名,直接使用成员

  1. //源文件:A.java
  2. package X;
  3. public class A{
  4. public static int a;
  5. public static void f(int x){ System.out.print(" x=" + x); }
  6. public static void f(int x,int y){ System.out.print(" x=" + x + " y=" + y); }
  7. }
  8. //源文件:B.java
  9. import static java.lang.Math.PI;
  10. import static X.A.*;//在导入静态成员方法时,不能加参数,如import static X.A.f;
  11. class B{
  12. public static void main(String[] args){
  13. f(1); f(2,3); a = 10;
  14. System.out.print(" a=" + a + " PI=" + PI);
  15. }
  16. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

访问权限

  1. 类的访问权限有两种:public和缺省

    • 缺省:只能被该类所属包中的类访问,不能被其他包中的类访问
    • public:访问不受包限制
  2. 类中成员的访问权限有四种:private、缺省、protected和public

    • private:仅能被该类自己访问,其他任何类都不能访问该成员
    • 缺省:只有包内的类才可访问
    • protected:允许包中的类和包外的子类访问
    • public:对访问无限制
    修饰符 同一类 同一包 不同包的子类 所有类
    public
    protected  
    缺省    
    private      
  3. 无关系的两个类跨包访问只能访问其包中的public类的public成员

栗子:

假设某药企需要开发一个信息管理系统,其中药品价格涉及四种:成本价、出厂价、代理价、销售价,均由药厂的市场部决定。药品销售涉及直营店、代理商、普通药店三类客户。为安全起见,指定如下策略:

  1. 市场部可以控制上述四种价格;
  2. 厂家直营店只能看到出厂价、代理价和销售价;
  3. 代理商只能看到代理价和销售价;
  4. 普通药店只能看到销售价。

请设计一组包和市场部、直营店、代理商、普通药店等四个类,并完成类及其成员的权限配置。

  1. package com.yq;
  2. public class 市场部{
  3. private double 成本价;
  4. double 出厂价;
  5. protected double 代理价;
  6. public double 销售价;
  7. }
  8. package com.yq;
  9. public class 直营店{;}//同包
  10. package com.yq.dl;
  11. public class 代理商 extends com.yq.市场部{;}//不同包的子类
  12. //注:子类不一定要求在父包的子包中,只要包名不同即可
  13. package com.yq.yd;
  14. public class 普通药店{;}//不同包
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

java存储机理绘制规则

  1. 栈:存放函数中定义的所有变量
  2. 堆:存放所有创建出来的对象
  3. 方法区:存放类的定义
  4. 三者的联系:在函数中new出对象,对象的引用名在栈中,指向堆中创建出的对象,每个对象都附加一个指向其所属类型(即方法区)的指针

注:

  • 栈从main函数开始创建
  • 对象存于堆中,对象的引用存于栈中,即引用指向堆中创建的对象
  • 栈空间的数据被系统自动管理,在函数调用时自动创建数据空间,在函数运行结束时自动释放数据空间
  • 对象中的实例变量存于堆中,函数中的变量存于栈中
  • 方法区中的静态变量直接赋值,实例变量只是声明,在创建对象后在堆中赋值
  • 对象未赋值为null,int型为0,String型为""
  • 如果是基本型直接填值,如果是引用型则通过指针指向一个对象
  • 画图用实线虚线不讲究,书中用的是虚线
  1. int[] a = new int[5];//显式调用new操作,其中a存于栈空间,a引用的对象存于堆空间
  2. int[] b = {1,2,3,4};//隐式调用new操作,其中b存于栈空间,b引用的对象存于堆空间
  3. String s = "abc";//隐式调用new操作,其中s存于栈空间,"abc"存于堆空间
  • 1
  • 2
  • 3

栗子:

  1. class T{
  2. static int x;
  3. String[][] s;
  4. T(int a){x = a;}
  5. T(){s = new String[][]{new String[3],{"aaa","bbb"}};}
  6. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

依次执行下列两条语句:T a=new T(5); T b=new T();请画出相关数据在栈、堆、方法区中的内存示意图

原文章:https://blog.csdn.net/qq_46469137/article/details/112151722

包及权限配置&java存储机理绘制的更多相关文章

  1. Win10配置Java环境变量

    很多同学在学习Java入门的时候被Java环境变量搞的一头雾水,今天这篇文章拓薪教育就来说一下如何在win10下配置环境变量; 下载jdk安装包: 首先我们需要下载jdk的安装包,这里提供jdk的安装 ...

  2. R语言rJava包安装载入及JAVA环境配置

    rJava 包的安装与载入 一般文本分词的教程都会贴出: install.packages("rJava") library(rJava) 来引导我们装载rJava包,运行inst ...

  3. Mac 配置java版本 ---- MySql数据库权限设置 --- openfire

    java -version 显示java 版本 sudo su - root 切换身份 cd /usr/local/openfire 进入openfire目录 cd bin/ 进入 bin vim o ...

  4. Jetty集群配置Session存储到MySQL、MongoDB

    在Web开发中,Session表示HTTP服务器与客户端(例如浏览器)的“会话”,每个客户端会有其对应的Session保存在服务器端,通常用来保存和客户端关联的一些信息,例如是否登录.购物车等. Se ...

  5. Jetty容器集群配置Session存储到MySQL、MongoDB

    在Web开发中,Session表示HTTP服务器与客户端(例如浏览器)的"会话",每个客户端会有其对应的Session保存在服务器端,通常用来保存和客户端关联的一些信息,例如是否登 ...

  6. Linux配置mysql (centos配置java环境 mysql配置篇 总结四)

    ♣安装的几种方法和比较 ♣配置yum源 ♣安装mysql ♣启动mysql ♣修改密码 ♣导入.sql文件 ♣缓存设置 ♣允许远程登录(navicat) ♣配置编码为utf8  1.关于Linux系统 ...

  7. Linux配置tomcat (centos配置java环境 tomcat配置篇 总结三)

    ♣下载安装tomcat7 ♣设置启动和关闭 ♣设置用户名和密码 ♣发布java web项目 声明:这篇教程是建立在前两篇教程的基础上的,所以,还没安装工具和jdk,可以先看这个系列的前面两篇(去到文末 ...

  8. centos上安装配置java WEB环境_java(转)

    趁着十一期间,好好的写写随笔来记录自己所学.所践和所得,不足之处,欢迎各位拍砖~~~ 工具:Xftp 5.Xshell 5 一.安装jdk 1. 使用Xftp 5把jdk-8u65-linux-x64 ...

  9. svn数据仓库配置,权限配置

    svn服务的开启有两种方式, ·        自带的svnserve服务(访问地址类似于svn://192.168.80.18/repos/) ·        与Apache配合使用  (访问地址 ...

随机推荐

  1. POJ3687拓扑排序+贪心

    题意:       给你n个求,他们的重量是1-n(并不是说1号求的重量是1...),然后给你m组关系a,b,表示a的重量小于b的重量,然后让你输出满足要求的前提下每个球的重量,要求字典序最小. 思路 ...

  2. [LeetCode每日一题]80. 删除有序数组中的重复项 II

    [LeetCode每日一题]80. 删除有序数组中的重复项 II 问题 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度. 不要使用额外 ...

  3. Mac终端使用tree命令查看目录结构

    使用brew管理tree扩展 brew search tree brew install tree tree

  4. mysql安装_图文详细安装步骤_让你轻松安装并使用(超详细步骤)

    mysql的下载就不用说了,自行到官网下载..(本人下载的是mysql5.0版本) 下面开始正式安装 1.双击mysql_setup.exe后,直接点击Next 2.选择"I accept ...

  5. 多线程-4.wait() notify() notifyAll() 生产者消费者模型

    1.wait()方法 该方法继承于Object类.在调用obj.wait()方法后,当前线程会失去obj的锁.待其他线程调用obj.notify()或notifyAll()方法后进入锁等待池,争抢到锁 ...

  6. 2021ArchSummit全球架构师峰会上,大家在聊些什么

    大会PPT公开下载链接:https://ppt.infoq.cn/list/assh2021 大会主要情况介绍 2021 ArchSummit全球架构师峰会是该大会正式成立的第十年,是极客邦科技旗下I ...

  7. 通过Python将监控数据由influxdb写入到MySQL

    一.项目背景 我们知道InfluxDB是最受欢迎的时序数据库(TSDB).InfluxDB具有 持续高并发写入.无更新:数据压缩存储:低查询延时 的特点.从下面这个权威的统计图中,就可以看出Influ ...

  8. Java常用类详解

    目录 1. String类 1.1 String的特性 1.2 String字面量赋值的内存理解 1.3 String new方式赋值的内存理解 1.4 String 拼接字面量和变量的方式赋值 1. ...

  9. QFNU-11.08training

    7-1  阅览室 题目: 天梯图书阅览室请你编写一个简单的图书借阅统计程序.当读者借书时,管理员输入书号并按下S键,程序开始计时:当读者还书时,管理员输入书号并按下E键,程序结束计时.书号为不超过10 ...

  10. ES6对象的新增方法的使用

    Object.assign Object Object.assign(target, ...sources) 将所有可枚举属性的值从一个或多个源对象复制到目标对象 参数: target 目标对象 so ...