包及权限配置

包的声明和导入

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

注:

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

从不同包中导入相同的类

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

//源文件一:A.java
package X;
public class A{public int x;
}//源文件二:A.java
package Y;
public class A{public String s;
}//源文件三:A.java
package Z;
//import X.A; import Y.A;   //这种导入方式将产生编译错
import X.*; import Y.*;   //正确
public class A{int x;public static void main(String[] args){A a = new A();    a.x = 10;         //正确,此A为Z包中的AZ.A a1 = new Z.A();  a1.x  = 10;    //正确,此A为Z包中的AX.A b = new Z.A();  b.x  = 5;       //正确,此A为X包中的AY.A c = new Z.A();  c.s  = "abc";   //正确,此A为Y包中的A}
}

静态导入

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

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

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

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

访问权限

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

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

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

栗子:

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

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

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

package com.yq;
public class 市场部{private double 成本价;double 出厂价;protected double 代理价;public double 销售价;
}package com.yq;
public class 直营店{;}//同包package com.yq.dl;
public class 代理商 extends com.yq.市场部{;}//不同包的子类
//注:子类不一定要求在父包的子包中,只要包名不同即可package com.yq.yd;
public class 普通药店{;}//不同包

java存储机理绘制规则

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

注:

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

栗子:

class T{static int x;String[][] s;T(int a){x = a;}T(){s = new String[][]{new String[3],{"aaa","bbb"}};}
}

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

包及权限配置java存储机理绘制相关推荐

  1. 第三周 Java语法总结__static关键字__代码块__继承__this和super的区别__重写__final关键字__多态__抽象__接口__形参问题__包__权限修饰符__内部类

    文章目录 6.static关键字 1)静态static关键字的特点: 2)关于static关键字的使用注意事项 3)什么时候将变量定义为成员变量: 7.文档说明书: 8.代码块 9.继承 1)继承的概 ...

  2. 【Java开发语言 00】环境搭建(配置java环境+‘javac’不是内部或外部命令,也不是可运行的程序+安装idea+idea基本用法+新建项目+在新项目的src路径下新建包和类+基础调试+路径)

    idea入门 1 idea安装 1.1 官方下载地址 2 Java语言环境的搭建 下载JDK 安装 JDK(安装路径不要有中文或者特殊符号如空格等) 配置环境变量(必须是全英文状态下的字符) clas ...

  3. 类的包访问权限:《Java编程思想》中一段话的困惑

    类的包访问权限:<Java编程思想>中一段话的困惑 在<java编程思想第三版>(陈昊鹏 饶若楠等译)的第五章隐藏具体实现中,5.4节的最后一段话是: "正如前面所提 ...

  4. Java的四种包访问权限

    Java的四种包访问权限如下: private default protected public 同一类 √ √ √ √ 同一包 √ √ √ 不同包的子类 √ √ 不同包的非子类 √

  5. c语言 r语言 java,R语言rJava包安装载入及JAVA环境配置

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

  6. Java学习第十二天----方法参数类型以及返回值类型问题、链式编程、package包、权限修饰符、内部类、成员内部类

    Java学习第十二天----方法参数类型以及返回值类型问题.链式编程.package包.权限修饰符.内部类.成员内部类 1.方法参数类型: (1)类名作为形式参数: public class MyTe ...

  7. java同一个包是什么意思_java中包到底是什么意思?包访问权限又是什么意思,有C++基础。...

    展开全部 是否是说62616964757a686964616fe4b893e5b19e31333335303535 first.java中有A B C 三个类,second.java中有D E F 三 ...

  8. r java_R语言rJava包安装载入及JAVA环境配置

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

  9. 【华为云技术分享】十分钟从入门到精通(上)—对象存储服务的OBS权限配置

    摘要:作为公有云的数据底座,大量的应用场景产生的数据都会存储到OBS对象存储服务中,如直播.电商.大数据可视化.机器学习.物联网等.其灵活的权限配置功能,能够解决如共享少部分数据或者数据全部托出等实际 ...

最新文章

  1. Feedburner关于Feed的思考
  2. linux -------- 使用xshell ,winscp 连接linux 以及一些问题解决
  3. 用原生JavaScript实现图片瀑布流的浏览效果
  4. android 显示单位 像素
  5. 【设计模式】第五章 责任链模式
  6. Java读书笔记(8)-单例模式
  7. python自动化开发-[第十四天]-javascript(续)
  8. java 算法递归案例_JAVA 几个递归算法实例
  9. HTML怎么写入形状,css3写各种形状(收集篇...)
  10. 设计模式(11)——组合模式
  11. ACM学习历程—HDU1584 蜘蛛牌(动态规划 状态压缩 || 区间DP)
  12. cad相对坐标快捷键_cad相对坐标怎么输入?CAD中输入西安80坐标绘图的教程
  13. 纯生js ajax,纯生js实现Element中input组件的部分功能(慢慢完善)并封装成组件
  14. dynamics crm 常用js
  15. 任正非5年后重新强调:华为到了炸研发金字塔的时候
  16. 八、Web 的攻击技术
  17. macM1芯片通过第三方安装php
  18. C#基础(10)——飞行棋游戏
  19. Mysql数据库备份和还原
  20. rfid android开发板,iTOP-6818开发板-Android4.4系统下RFID射频模块测试例程

热门文章

  1. 学术英语阅读与写作5:实验结果Result
  2. 企业数字化转型困难的这个锅必须得IT行业自己来背
  3. Mathematica常用操作
  4. 论文笔记:《Object-Aware Guidance for Autonomous Scene Reconstruction》
  5. 汤道生对话亚马逊CTO:安全不只是技术,要从战略视角系统构建
  6. WIN10系统C盘瘦身
  7. 使用selenium抓取网页内容
  8. 英语学习也可以“做中学”
  9. Linux服务器磁盘扩容步骤
  10. 影响世界的儿童冒险动画:《丁丁历险记》 The Adventure of Tintin