包及权限配置

包的声明和导入

//声明
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
  • 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.*无法实现

从不同包中导入相同的类

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

//源文件一: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包中的A
Z.A a1 = new Z.A(); a1.x = 10; //正确,此A为Z包中的A
X.A b = new Z.A(); b.x = 5; //正确,此A为X包中的A
Y.A c = new Z.A(); c.s = "abc"; //正确,此A为Y包中的A
}
}
  • 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 <包名>.类名.<成员名>;

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

//源文件: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
  • 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. 普通药店只能看到销售价。

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

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 普通药店{;}//不同包
  • 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型为""
  • 如果是基本型直接填值,如果是引用型则通过指针指向一个对象
  • 画图用实线虚线不讲究,书中用的是虚线
int[] a = new int[5];//显式调用new操作,其中a存于栈空间,a引用的对象存于堆空间
int[] b = {1,2,3,4};//隐式调用new操作,其中b存于栈空间,b引用的对象存于堆空间
String s = "abc";//隐式调用new操作,其中s存于栈空间,"abc"存于堆空间
  • 1
  • 2
  • 3

栗子:

class T{
static int x;
String[][] s;
T(int a){x = a;}
T(){s = new String[][]{new String[3],{"aaa","bbb"}};}
}
  • 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. hdu3117 斐波那契前后4位

    题意:       求斐波那契的前后4位,n <= 10^8. 思路:       至于前四位,和hdu1568的求法一样:       http://blog.csdn.net/u013761 ...

  2. Python脚本扫描给定网段的MAC地址表(scapy或 python-nmap)

    目录 用scapy模块写 用 python-nmap 模块写 python3.7  windows环境 以下两个都可以扫描指定主机或者指定网段的 IP 对应的 MAC 地址,然后保存到 csv 文件中 ...

  3. nodejs-函数&路由

    函数------------------------------------------------------------ 基本函数 function say(word) { console.log ...

  4. Linux-鸟菜-5-文件权限

    Linux-鸟菜-5-文件权限 Linux作为多用户多任务的操作系统,文件权限以及目录配置相对于Windows的话应该更重要更细致一些.Linux一般将文件可存取的身份分为三个类别,分别是owner/ ...

  5. Andrew Ng机器学习算法入门(十):过拟合问题解决方法

    在使用机器学习对训练数据进行学习和分类的时候,会出现欠拟合和过拟合的问题.那么什么是欠拟合和过拟合问题呢?

  6. Day003 变量、常量、作用域

    变量 变量:就是可以变化的量 Java是一种强类型语言,每个变量都必须声明其类型. Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域 变量的定义 数据类型 变量名 = 值:可以 ...

  7. 逆向工程初步160个crackme-------2

    有了第一个crackme的经验后,这个crackme用了半个小时就验证成功了.(思路和第一个crackme相似) 动态调试工具:ollydbg (2.10) 文件分析工具:PEID (0.95) 同样 ...

  8. BUAA软件工程热身作业

    写在前面 项目 内容 所属课程 2020春季计算机学院软件工程(罗杰 任健) (北航) 作业要求 热身作业(阅读) 课程目标 培养软件开发能力 本作业对实现目标的具体作用 深入认识自己,总结过往并展望 ...

  9. createrepo 建立本地yum源

    linux使用createrepo制作本地yum源   目录 linux使用createrepo制作本地yum源 安装createrepo软件包 进入本地rpm包目录 执行完后可以看到生成的repod ...

  10. 使用sosreport命令生成诊断包

    [RHEL]-7-常用系统状态检测命令 引言 这篇文章介绍RHEL中最常用的几个系统状态检测命令,包括:网络状态.内存.主机名及其架构.系统负载及其用户登录状态等. 文章目录 0×1.查看网络状态 0 ...