范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

JAVA学习基础之包及访问控制权限

  第八章、包及访问控制权限
  8-1、包的定义及导入
  package是在使用多个类或接口时,为了避免名称重复而采用的一种措施,直接在程序中加入package关键字即可。包的定义格式:
  package 包名称.子包名称;package org.lxh.demo08 ; // 定义一个包
  class Demo{
  public String getInfo(){
  return "Hello World!!!" ;
  }
  };
  public class PackageDemo01{
  public static void main(String args[]){
  System.out.println(new Demo().getInfo());
  }
  };
  一个包其实就是一个文件夹,定义包之后,会生成一个名为org的文件夹,里面就有两个类文件。执行程序打包命令:
  javac –d . PackageDemo01.java
  程序编译完成后会生成一个名为org的文件夹,里面会生成一个Demo.class和PackageDemo01.class的两个类文件。生成完*.class之后就可以直接访问了:
  java org.lxh.demo08.PackageDemo01
  8-2、包的导入
  当一个包的class文件需要使用另外一个包的class文件的时候就需要使用导入指令。在之前的程序中,两个类是存放在一个包中的,因此代码与之前没有什么根本的不同,但是如果几个类存放在不同的包中,则在使用类的时候就必须通过import语句导入。
  语法:
  ·import 包名称.子包名称.类名称; 手工导入所需要的类
  ·import 包名称.子包名称.*;   由JVM自动加载所需要的类
  Demo.java:package org.lxh.demo08.c ;
  public class Demo{
  public String getContent(){
  return "MLDN LXH" ;
  }
  };
  ImportDemo01.java:package org.lxh.demo08.b ; // 放在不同的包中
  import org.lxh.demo08.a.* ; // 导入不同包中的Demo类
  public class ImportDemo01{
  public static void main(String args[]){
  System.out.println(new Demo().getContent ()) ;
  }
  };
  编译的时候应该先编译Demo.java类,之后再编译ImportDemo01.java,因为后者使用了前者的类进行操作。
  编译ImportDemo01.java的时候出现了以下的错误提示:ImportDemo01.java:2: 错误: 程序包org.lxh.demo08.a不存在
  import org.lxh.demo08.a.* ; // 导入不同包中的Demo类
  ^
  ImportDemo01.java:5: 错误: 找不到符号
  System.out.println(new Demo().getInfo()) ;
  ^
  符号: 类 Demo
  位置: 类 ImportDemo01
  2 个错误
  也就是说Demo类如果需要被外包访问的时候需要定义成public class,修改Demo类:package org.lxh.demo08.a;
  public class Demo{
  public String getContent (){
  return "Hello World!!!";
  }
  }
  关于public class与class声明类:
  如果一个类声明为public class则文件名称必须与类名称一致,而且在一个类中只能有一个public class,而如果使用class声明一个类,则文件名称可以与类名称不一致,但是执行的时候必须执行生成的class文件名称。除了这些之外,public class和class还在包的访问上有所限制,如果一个类只在本包中访问,不需要被外包访问,则直接声明成class即可,而如果一个类需要被外包访问,则必须声明为public class。
  以上的操作是明确的使用了包.类名称的方式导入的,如果现在假设要导入一个包中的很多类,这样写肯定很麻烦,我们可以直接使用"*"的方式进行导入:package org.lxh.demo08.b ; // 放在不同的包中
  import org.lxh.demo08.a.* ; // 导入不同包中的Demo类
  public class ImportDemo01{
  public static void main(String args[]){
  System.out.println(new Demo().getInfo()) ;
  }
  };
  上面两种导入语句哪种性能更高呢?
  ·第一种:import org.lxh.demo08.a.Demo;
  ·第二种:import org.lxh.demo08.a.*;
  实际上这两种的性能都是一样的,因为如果使用后者,是由JVM帮助用户判定需要导入的类,不需要的类,是不会被加载进来的。
  但是在导包的时候也需要注意另外一个问题,如果现在导入了不同包的同名类的时候,则就有可能出现不明确的错误信息。package org.lxh.demo08.c ;
  public class Demo{
  public String getContent(){
  return "MLDN LXH" ;
  }
  };
  现在在org.lxh.demo08.a中有一个Demo类,在org.lxh.demo08.b中也有一个Demo类,之后定义一个类,需要同时导入a 和 c的包。package org.lxh.demo08.d ;
  import org.lxh.demo08.a.* ; // 包中存在Demo类
  import org.lxh.demo08.c.* ; // 包中存在Demo类
  public class ImportDemo02{
  public static void main(String args[]){
  Demo d = new Demo() ;
  System.out.println(d.getContent ()) ;
  }
  };
  编译出错:ImportDemo02.java:6: 错误: 对Demo的引用不明确, org.lxh.demo08.c中的类 org.lxh.demo08.c.Demo和org.lxh.demo08.a中的类 org.lxh.demo08.a.Demo都匹配
  Demo d = new Demo() ;
  ^
  ImportDemo02.java:6: 错误: 对Demo的引用不明确, org.lxh.demo08.c中的类 org.lxh.demo08.c.Demo和org.lxh.demo08.a中的类 org.lxh.demo08.a.Demo都匹配
  Demo d = new Demo() ;
  ^
  2 个错误
  所以此时,如果出现这样情况的话,则最好写入完整的"包.类名称"。
  修改代码:package org.lxh.demo08.d ;
  import org.lxh.demo08.a.* ; // 包中存在Demo类
  import org.lxh.demo08.c.* ; // 包中存在Demo类
  public class ImportDemo02{
  public static void main(String args[]){
  org.lxh.demo08.a.Demo d = new org.lxh.demo08.a.Demo () ;
  System.out.println(d.getContent ()) ;
  }
  };
  8-3、系统常见包
  名称
  作用
  1
  java.lang   此包为基本包,像String这样的类就都保存在此包之中,在JDK1.0的时候如果想编写程序,则必须手工导入此包,但是随后的JDK解决了此问题,所以此包现在为自动导入。   2
  java.lang.reflect   此包为反射机制的包,是java.lang的子包,在JAVA常用类库中会介绍。   3
  java.util   此包为工具包,一些常用的类库、日期操作等都在此包中。   4
  java.text   提供了一些文本的处理类库   5
  java.sql   数据库操作包,提供了各种数据库操作的类和接口。   6
  java.net   完成网络编程   7
  java.io   输入、输出处理   8
  java.awt   包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)   9
  javax.swing   此包用于建立图形用户界面,此包中的组件相对于java.awt包而言是轻量级组件   8-4、静态导入   如果一个类中的方法全部是使用static声明的静态方法,则在导入的时候就可以直接使用"import static"的方式导入,导入的格式如下:   import static 包.类.*;package org.lxh.demo08.e ;   public class Operate{ // 里面的方法全部都是static类型   public static int add(int i,int j) { // 加法操作   return i + j ;   }   public static int sub(int i,int j) { // 减法操作   return i - j ;   }   public static int mul(int i,int j) { // 乘法操作   return i * j ;   }   public static int p(int i,int j) { // 除法操作   return i / j ;   }   };   如果按之前的import导入的话,则调用的时候肯定使用的是类.方法()。package org.lxh.demo08.f ;   import static org.lxh.demo08.e.Operate.* ; // 静态导入   public class StaticImportDemo{   public static void main(String args[]){   System.out.println("3 + 3 = " + add(3,3)) ; // 直接调用静态方法   System.out.println("3 - 2 = " + sub(3,2)) ; // 直接调用静态方法   System.out.println("3 * 3 = " + mul(3,3)) ; // 直接调用静态方法   System.out.println("3 / 3 = " + p(3,3)) ; // 直接调用静态方法   }   };   8-5、jar命令   当开发者为客户开发出了一套JAVA类之后,肯定要把这些类交给用户使用,但是如果所有的类是直接通过*.class的格式给用户,则会比较麻烦,所以一般情况下会将这些*.class文件压缩成一个文件交付给客户使用,那么这样的文件就称为jar文件(Java Archive File),如果要想生成jar文件,直接使用JDK中bin目录里的jar.exe就可以将所有的类文件进行压缩。   JAR命令中的主要参数:   · "C":创建新的文档   · "V":生成详细的输出信息   · "F":指定存档的文件名用法: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...   选项包括:   -c 创建新的归档文件   -t 列出归档目录   -x 从档案中提取指定的 (或所有) 文件   -u 更新现有的归档文件   -v 在标准输出中生成详细输出   -f 指定归档文件名   -m 包含指定清单文件中的清单信息   -e 为捆绑到可执行 jar 文件的独立应用程序   指定应用程序入口点   -0 仅存储; 不使用情况任何 ZIP 压缩   -M 不创建条目的清单文件   -i 为指定的 jar 文件生成索引信息   -C 更改为指定的目录并包含其中的文件   如果有任何目录文件, 则对其进行递归处理。   清单文件名, 归档文件名和入口点名称的指定顺序   与 "m", "f" 和 "e" 标记的指定顺序相同。   示例 1: 将两个类文件归档到一个名为 classes.jar 的归档文件中:   jar cvf classes.jar Foo.class Bar.class   示例 2: 使用现有的清单文件 "mymanifest" 并   将 foo/ 目录中的所有文件归档到 "classes.jar" 中:   jar cvfm classes.jar mymanifest -C foo/。   例:package org.lxh.demo08.demo ;   public class Hello{   public String getInfo(){   return "Hello World!!!" ;   }   };   将其打包编译:javac –d . Hello.java   将其打成jar包:jar –cvf my.jar org已添加清单   正在添加: org/(输入 = 0) (输出 = 0)(存储了 0%)   正在添加: org/lxh/(输入 = 0) (输出 = 0)(存储了 0%)   正在添加: org/lxh/demo08/(输入 = 0) (输出 = 0)(存储了 0%)   正在添加: org/lxh/demo08/Demo.class(输入 = 300) (输出 = 237)(压缩了 21%)   正在添加: org/lxh/demo08/PackageDemo01.class(输入 = 510) (输出 = 332)(压缩了 34%   )   正在添加: org/lxh/demo08/c/(输入 = 0) (输出 = 0)(存储了 0%)   正在添加: org/lxh/demo08/c/Demo.class(输入 = 290) (输出 = 229)(压缩了 21%)   正在添加: org/lxh/demo08/a/(输入 = 0) (输出 = 0)(存储了 0%)   正在添加: org/lxh/demo08/a/Demo.class(输入 = 290) (输出 = 229)(压缩了 21%)   正在添加: org/lxh/demo08/d/(输入 = 0) (输出 = 0)(存储了 0%)   正在添加: org/lxh/demo08/d/ImportDemo02.class(输入 = 521) (输出 = 341)(压缩了 34   %)   一个jar包如果要想使用的话,则必须配置classpath路径。   set classpath=;F:网页李兴华20801_【第8章:包及访问控制权限】_包的定义及导入代码my.jar   例:package org.lxh.demo08 ;   import org.lxh.demo08.demo.Hello ;   public class ImportJarDemo{   public static void main(String args[]){   Hello hello = new Hello() ;   System.out.println(hello.getInfo()) ;   }   };   8-6、访问控制权限及命名规范   8-6-1、访问控制权限   Java中存在四种访问权限:   ·private访问权限   ·default(默认)访问权限   ·protected访问权限   ·public访问权限   范围   private   default   protected   public   同一类   同一包中的类   不同包的子类   其他包中的类   private:可以定义方法,属性,定义的方法和属性不能被类的外部所看到。   default:可以在本包中的任意地方访问。   protected:保护,不同包的非子类不可以访问。   public:公共的,都可以访问,不受任何的限制。package org.lxh.demo08.g ;   public class HelloDemo{   protected String name = "LXH" ; // 只能在本包及不同包的子类中访问   };   在其他包中访问此类中的属性。package org.lxh.demo08.h ;   import org.lxh.demo08.g.HelloDemo ;   class SubHelloDemo extends HelloDemo{   public void print(){   System.out.println("访问受保护属性:" + super.name) ;   }   };   public class ProtectedDemo01{   public static void main(String args[]){   SubHelloDemo sub = new SubHelloDemo() ;   sub.print() ;   }   };   如果现在没有使用子类,而是直接在不同类中访问,则会出现无法访问的错误。package org.lxh.demo08.h ;   import org.lxh.demo08.g.HelloDemo ;   public class ProtectedDemo02{   public static void main(String args[]){   HelloDemo sub = new HelloDemo() ;   System.out.println(sub.name) ; // 错误的,不同包的类无法访问   }   };   编译时出现下面的错误提示信息:ProtectedDemo02.java:6: 错误: name可以在HelloDemo中访问protected   System.out.println(sub.name) ; // 错误的,不同包的类无法访问   ^   1 个错误   当产生了一个类之后,为了保证类中的内容不被外部直接看到,则使用private关键字。   但是,如果现在两个有关系的类要进行属性互相访问的话就比较麻烦,之前只能使用getter/setter取得和设置,所以为了减少私有属性的访问的麻烦,使用了内部类,但是内部类本身会破坏程序的结构。   为了让一个类的内容可以继续方便的时候访问,使用了继承的概念,但是在继承中private属性也是无法被子类看到的,所以此时,为了方便子类的操作,可以将属性使用protected进行封装,这样一来外部也无法直接看到(不同包)。   既然有了继承的关系,就可以使用向上或向下的转型操作,以完成多态性,但是在开发中类与类之间的直接继承并不多见,而往往继承抽象类或实现接口,当若干个操作间需要耦合的时候就可以使用接口完成。   既然有内部类,则如果一个接口或抽象类的子类只使用了次,则可以将其定义成匿名内部类。   开发中没有包的类是绝对不存在的。   封装 继承 多态.   8-6-2、java的命名规范   在JAVA中,声明类、方法、属性等都是有一定的规范的,此规范如下所示:   ·类:所有单词的首字母大写,如:TestJava   ·方法:第一个单词的首字母小写,之后每个单词的首字母大写,如:getInfo();   ·属性:第一个单词的首字母小写,之后每个单词的首字母大写,如:studentName   ·包:所有单词的字母小写,如:org.lxh.demo   ·常量:所有单词的字母大写,如:FLAG

立足两联供深耕舒适家居领域,纽恩泰全力打造空气能舒适系统满足现状的人永远会被不满于现状的人超越。成立18年以来,纽恩泰始终秉承让空气能成为人类美好生活的必需品的发展理念,从空气能在国内的萌芽时期,到煤改电鼎盛时期,再到当下的后煤改电时期极致聆听,不渝徕声AuGlamour徕声全金属耳机评测理想三旬年轻人一辈子都要嫉恶如仇,不随波逐流,也绝不趋炎附势,绝不摧眉折腰,绝不放弃自己的原则,绝不失望于人性。AuGlamour徕声前言随着科技产品的野蛮生长,耳机在日常生活中正ofo成共享单车国民第一品牌易用好骑俘获千万用户ofo如何赢得最高用户忠诚度?骑行舒适度狂甩摩拜随着春日渐暖,选择以共享单车出行的普通民众也越来越多。无论是工作日通勤,还是周末出游,ofo小黄车都成为街头最亮丽的一道风景。凭借易纽恩泰西南峰会抢先看,干货满满,精彩纷呈近期,多地下发能耗双控的政策文件,各类高耗能高污染的行业纷纷停工停产。加上双碳目标及消费需求的驱动下,能源转型势在必行!而空气能作为低碳清洁能源,势必迎来重大发展契机。为更好服务于方便省心,随寓而安青松沃德L12密码指纹锁Part1前言对于,生活在城市的我们,生活的节奏很快压力也很大,有时候早上起床洗漱完就匆匆忙忙的跑出门上班,一旦急了就容易出错,比如忘带钥匙。有时候我们出门丢个垃圾收个快递,可能刚方便省心,随ampampquot寓ampampquot而安青松沃德L12智能指纹密码锁Part1前言对于,生活在城市的我们,生活的节奏很快压力也很大,有时候早上起床洗漱完就匆匆忙忙的跑出门上班,一旦急了就容易出错,比如忘带钥匙。有时候我们出门丢个垃圾收个快递,可能刚发布不到两个月,三星新机降至新低价,首批用户感叹买早了骁龙865处理器是2020年各大国产手机品牌旗舰机型采用的处理器,骁龙888则是今年各大手机品牌旗舰机型采用的处理器。首款搭载骁龙888处理器的机型是小米11。小米11发布的时间是华为P50Pro曝光,麒麟9000鸿蒙系统,想买再等等华为近期动作连连,接连发布了多款新机。先是在2月22日发布了第三代折叠屏手机mateX2(也是华为当前最贵的手机),接着在3月11日上线了mate40E手机。对于用户来讲,现在也是华为P50低配版外观图曝光,首发鸿蒙OS系统,预计5月份发布华为多款P系列机型都是在3月份举行全球首发会的,例如P30是在2019年3月26日进行全球首发的,P40是在2020年3月26日通过网络方式进行全球发布的。案例华为P50也应该是在家庭清洁利器睿米NEXVX,一机多用,解决家中各种清洁困扰现在人们的生活是越来越舒适了呀,哪怕是在千古难题的家庭清洁上面,大家也是能够找到好用的清洁利器,就像我家里使用的睿米无线擦地吸尘器NEXVX就是我解决家庭清洁的清洁利器,也是多亏了安卓虚拟大师VMOSPro专业版v1。4。1软件介绍话说大家在PC或Mac电脑上使用VMwareParallelsDesktop等虚拟机软件来运行另一款操作系统,或在电脑上使用安卓模拟器运行手机APP等都习以为常了不过你有没
阿里涉嫌侵犯男子跳槽去字节跳动?官方已无限期终止招聘流程9日午间网上有爆料称涉嫌侵犯女下属的阿里前员工王成文(花名曲一)曾到字节跳动公司去面试,并且已经通过了一面。王成文在阿里时的职级为P7,是淘鲜达华北区商家运营组长,因7月27日在出微信8。0。9更新后,除了提现免手续费以外,还更新了其他5个功能现在微信做得越来越好,功能也越来越多。自从微信8。0。9更新后,提现都可以免除手续费了,除此之外,微信还更新了其他的5个功能。这次微信的更新,终于迎来了大家想要的功能看,不信你往下安装Freebsd操作系统前言FreeBSD是一种类UNIX操作系统,是由经过BSD386BSD和4。4BSD发展而来的Unix的一个重要分支。FreeBSD为不同架构的计算机系统提供了不同程度的支持。并且华为Mate50好事将近,5G卡脖子的难题,有望被彻底解决7月29日登场的华为P50系列因为不支持5G,上市后一度引起消费者广泛热议。由此可以看出,5G功能在大多数消费者心中已经成为新机标配。即便是华为,如果长期无法解决5G问题,那么产品小米MIX4明日发布,价格预测4字开头,手里的MIX3瞬间不香了明天小米MIX4就要发布了,估计小伙伴们都迫不及待的在等着了吧?为啥MIX系列断更了三年呢,主要还是因为上一代的MIX3有点不尽人意吧。外观上并没有做到特别的未来感,尤其是堂堂第三关于7nm芯片工艺,中芯国际有了正式的回应了解更多科技资讯尽在圈聊科技。今天跟大家聊一聊关于7nm芯片工艺,中芯国际有了正式的回应!目前最为先进的工艺已经来到的了5nm,台积电以及三星都有能力实现量产,而国内目前最为先进的无限接近真人驾驶,这样的智己你期待吗?EV视界原创之前我们曾对达到L3级自动驾驶的难点做出过陈述,要想达到这一级别,对车辆硬件和软件的技术水平要求非常重要。如果说L0级L2级为低等级的驾驶系统,而L3级L5级则为高级自印度研发5G速度比华为快20倍?美企狂砸上百亿,背后隐藏什么秘密到了2047年,印度将赶超中美!日前,印度首富穆克什安巴尼作出了这样一个大胆预测。安巴尼究竟哪来的底气说出这样的话?中国5G有多强?许多人都知道,在5G技术领域,中国华为处于绝对领8月大降价的4款旗舰机,等等党又赢了进入八月份之后,手机圈新一轮的换机潮又开始了。许多内行人也纷纷选择最近换一款新手机,因为上半年发布的许多新旗舰最近都纷纷降价了,正是捡漏的好时候。而且最近降价的机型都是那些配置强优3000元左右,最值得购买的手机推荐榜今年上半年,我国智能手机市场出货量依旧呈现出快速增长的趋势,而最新的互联网消费调研数据显示,2021年我国市场中端价位的手机(20004000元)销量占比约有50,可见,中端手机越小米MIX4全球首发骁龙888Plus,升级一指连来自知名爆料博主,数码闲聊站消息小米MIX4将全球首发骁龙888Plus目前消息来看全新的小米MIX4将拥有众多黑科技,全新的UWB无线充电刷新记录,屏占比惊人,打孔屏下摄像头等,