热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【java进阶03:package和import】及访问控制权限

目录package、import访问控制权限package、importjava语言中的package和import机制:1、为什么要使用packageÿ

目录

package、import

访问控制权限




package、import


  1. java语言中的package和import机制:

    1、为什么要使用package?package是java中包机制。包机制的作用是为了方便程序的管理。不同功能的类分别放在不同的包下。(按照功能划分的,不同的包具有不同的功能)
    2、package怎么用?package是一个关键字,后面加包名。例如:package com.javase.day1206;注意:package语句只允许出现在java源代码的第一行3、包名有没有命名规范? 有一般采用公司域名倒序的方式(因为公司域名具有全球唯一性。)包名命名规范:公司域名倒序 + 项目名 + 模块名 + 功能名4、对于带有package的java程序怎么编译?怎么运行?采用之前的编译和运行 不行了类名不再是HelloWorld了类名:com.javase.day1206.HelloWorld用文本编辑器编写的带包文件的编译运行:在编写当前文件的地址栏cmd直接进入dos界面,然后编译,然后输入以下命令运行不能用之前那种切换目录的方式。使用这种方式直接生成包的目录,直接编译不生成目录且无法运行。运行时也要在编写java文件的文件夹cmd然后运行,不能切换到class文件所在位置运行。编译:javac -d . HelloWorld.javajavac 负责编译的命令-d 带包编译. 代表编译之后生成的东西放到当前目录下(.代表当前目录)HelloWorld.java 被编译的java文件运行:java 完整类名 —— java com.javase.day1206.HelloWorld注意:带包名描述的类名(完整类名) : java.util.Scanner不带包名描述的(简类名) : Scanner用idea时右键src新建包:com.javase.day1206生成包之后右键new class,然后取名,然后运行即可。5、关于import的使用: 两个类不在同一个包中的时候,其中一个类使用了另一个类,此时需要使用import(导包)import什么时候使用?A类中使用B类A类和B类都在同一个包下,不需要使用importA类和B类不在同一个包下,需要使用import注意:java.lang包下的类都不需要导包(但是这个包的子包需要导)。相当于:java.lang.*;在每个类中默认有。import怎么用?import语句只能出现在package语句之下,class声明语句之上import语句还可以采用*的方式.例:import com.javase.day1206.HelloWorld;可以使用:import com.javase.day1206.*;疑问: import com.javase.day1206.*; 这样是不是效率比较低?不是!编译器编译时会把*变为具体的类名。但是要注意:这里的*只代表某些类的名字。不要想着用 import Java *; 或import *; 把所有的类导入进来。这样是不现实的。

    package com.javase.day1206;public class HelloWorld {public static void main(String[] args) {System.out.println("HelloWorld");}
    }

  2. 同一个包中import可以省

    package com.javase.day1206;public class Text01 {public static void main(String[] args) {//创建HelloWorld对象com.javase.day1206.HelloWorld hw = new com.javase.day1206.HelloWorld();System.out.println(hw);//com.javase.day1206.HelloWorld@1b6d3586//包名可以省略吗?//思考:这里的包名之所以可以省略,是因为这两个类在同一个包中。HelloWorld hw2 = new HelloWorld();System.out.println(hw2);//com.javase.day1206.HelloWorld@4554617c}
    }

  3. 不同包的两个类,一个类中要使用另一个类中的东西,必须有import

    package com;//import com.javase.day1206.HelloWorld;
    //import还可以采用*的方式
    import com.javase.day1206.*;public class Text02 {public static void main(String[] args) {/*HelloWorld hw = new HelloWorld();System.out.println(hw);没有导包之前,编译报错:Error:(6, 9) java: 找不到符号符号: 类 HelloWorld位置: 类 com.Text02原因:Text02在com包下,HelloWorld在com.javase.day1206包下不在同一个paceage下,包名不可以省略。*//*想要编译通过,必须这样:com.javase.day1206.HelloWorld hw = new com.javase.day1206.HelloWorld();System.out.println(hw);com.javase.day1206.HelloWorld hw2 = new com.javase.day1206.HelloWorld();System.out.println(hw2);com.javase.day1206.HelloWorld hw3 = new com.javase.day1206.HelloWorld();System.out.println(hw3);com.javase.day1206.HelloWorld@1b6d3586com.javase.day1206.HelloWorld@4554617ccom.javase.day1206.HelloWorld@74a14482*///虽然上面那样可以运行,但是每次这样写太麻烦了,所以这里就需要用到import 将需要用到的类导入进来。//import com.javase.day1206.HelloWorld;//包名.类名 就是带包的类的新名字。HelloWorld hw1 = new HelloWorld();System.out.println(hw1);}
    }

  4. 解释之前接收键盘输入时使用的java.util.Scanner ,以及使用java.lang.下所有的类都不需要导

    package com.javase.day1206;//第二种方法:使用import导包//import java.util.Scanner;
    //也可以使用*的方式导包
    import java.util.*;public class Text03 {public static void main(String[] args) {//为什么要这样写?//因为Text03与Scanner这两个类不在同一个包中,在Text03中使用Scanner类中的东西//第一种方法:需要在前面加Scanner类的包名:java.util//java.util.Scanner s = new java.util.Scanner(System.in);//导包之后使用时,类名前就不用加包名了。Scanner s = new Scanner(System.in);String str = s.next();System.out.println("您输入的字符串为:"+str);//String类为什么不需要导包就可以使用?//因为String类在java.lang包下,这个包下的所有类都不需要导包就可以使用!java.lang.String name = "张三";System.out.println("名字是:"+name);java.lang.String userName = "李四";System.out.println("用户名是:"+userName);}
    }


访问控制权限

访问控制权限有几个,控制范围以及修饰什么?

1、访问控制权限有4个:public 公开的private 私有的protected 受保护的什么都不加 默认的2、访问控制权限各自的控制范围:public : 表示公开的,任何位置都可以访问private: 表示私有的,只能在本类中访问“默认” : 只能在本类、同包 访问protected : 本类、同包、子类中访问访问控制权限 本类 同包 子类 任意位置--------------------------------------------------------------------------public 可以 可以 可以 可以protected 可以 可以 可以 X默认 可以 可以 X Xprivate 可以 X X X默认范围从大到小排序:public > protected > 默认 > private3、访问控制权限符可以修饰什么?属性、方法 。 (四个都可以修饰)类、接口 。 (public 和 默认。其他的不能修饰)

本类的 访问控制权限符可以修饰什么东西

package com;public class User{//私有的private int id;//受保护的protected int age;//公开的public int weight;//什么都不加:默认的String name;//本类public static void main(String[] args) {User u = new User();System.out.println(u.id);System.out.println(u.age);System.out.println(u.weight);System.out.println(u.name);}//方法public void m1(){}private void m2(){}protected void m3(){}void m4(){}//静态的也可以,访问控制权限与是否静态无关public static void a(){}private static void b(){}protected static void c(){}static void d(){}
}//Error: 此处不允许使用修饰符private
//private class MyClass1{}//Error: 此处不允许使用修饰符protected
//protected class MyClass2{}

同包的

//同包
package com;public class Text1 {public static void main(String[] args) {User u = new User();//Error: id 在 User 中是 private 访问控制//System.out.println(u.id);System.out.println(u.age);System.out.println(u.weight);System.out.println(u.name);}
}

不同包中

//不同包中
package com.javase;import com.User;public class Text2 {public static void main(String[] args) {User u = new User();//Error: age 在 com.User 中是 protected 访问控制//System.out.println(u.age);//公开的,在哪里都可以使用System.out.println(u.weight);//Error: name在com.User中不是公共的; 无法从外部程序包中对其进行访问//System.out.println(u.name);}
}

子类中

//不同包,子类
package com.javase.day1206;import com.User;//User在com包下,Vip在com.javase.day1206包下,两个类不在同一个包下。
//但是Vip是User的子类。public class Vip extends User{public static void main(String[] args) {}//实例方法public void shopping(){//this表示当前对象//编译通过System.out.println(this.age);//Error: name在com.User中不是公共的; 无法从外部程序包中对其进行访问//System.out.println(this.name);}
}

推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 多维数组的使用
    本文介绍了多维数组的概念和使用方法,以及二维数组的特点和操作方式。同时还介绍了如何获取数组的长度。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
author-avatar
钧广摄影__
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有