zoukankan      html  css  js  c++  java
  • JAVA中的访问修饰符和包

    一、JAVA访问修饰符

    访问修饰符,用来控制类中成员的可见性

    有四个访问修饰符,分别是:default,private,public,protected

    1、default(默认):默认权限,不用写的。在同一包内访问。

    2、private(私有):只能在同一类中访问。

    3、public(公有):在任何地方都可以访问

    4、protected(受保护的):子父类(即使子父类不在同一包)和本包中可访问。

     public > protected > default > private

          public   protected   default   private

    同一类       ok        ok      ok        ok
    同一包     ok        ok      ok
    子类      ok        ok
    不同包     ok

    二、包package

    在大型项目中,往往会有几十甚至几百个类,如果不对类进行分类管理,后期进行维护时会有很大的不便。

    所以,需要对类(或其它类型)进行分类组织管理,这种机制就称为“包”。

    “包”是类的容器,用于分隔类名空间。如果没有指定包名,所有的示例都属于一个默认的无名包。

    包的作用:

    1、区分相同名字的类。同一包中的类,不能同名。但是不同包的类,可以同名。

    2、当类很多时,方便管理。

    3、控制访问范围。 

     包名命令规范

     包名关键字package,包名一律都小写

    JAVAC编译方式:

    当定义包时,JAVAC编译命令:javac+源文件目录+java源文件名

    如果是在源文件当前目录生成包和文件: javac -d  . +java源文件名   (.点代表当前目录)

    如下文件

    package pack;
    
    class PackageDemo
    {
        public static void main(String[] args)
        {
            System.out.println("Hello Package");
        }
    }

    保存在 D:java0217day10

    javac编译命令:

    javac -d d:java0217day10 PackageDemo.java

    javac -d . PackageDemo.java

    访问用java 包名.类名

    如果要将class文件生成在指定的目录,JAVAC编译命令:javac+-d+指定生成目录+java源文件名

    D:myclass目录中生成类文件,javac -d d:myclass PackageDemo.java

    再设置类目录  set classpath=d:myclass,即可访问

    包之间的访问:

    访问不同包中的class,需要导入包import

    如下,定义一个新的Job类,并且将Job类放在study包内

    package study;    //定义study包
    
    public class Job {        //包中定义Job类
        public String jobName;
        public void show(){
            System.out.println(jobName);
        }
    }

    然后在包中访问这个job类时,需要import导入study包中的job类:

    import study.Job;    //导入study中的Job类
    
    public class MyTest {
        public static void main(String[] args) 
        {
            Job myJob=new Job();    //实例化Job类
            myJob.jobName="工程师";    //调用类的成员属性
            myJob.show();                     //调用类的成员方法      
        }
    }

    输出结果:

    工程师

    进一步说明:按以上导入包类的方法,如果study包中定义了N侈个类,则每次实例化不同类的对象时,都需要写import study.xxxx,如有100个类就要写100次import,较麻烦

    我们可以用星号*代替包中的所有类名,一次性导入包中的所有类——import study.* 

    import study.*;        //一次性导入study包中的所有类
    
    public class MyTest {
        public static void main(String[] args) 
        {
            Job myJob=new Job();
            myJob.jobName="工程师";
            myJob.show();
        }
    }    

    注:

    同一包中的类,不但表示其在同一包容器中,同时,还处于同一物理路径中。

    定义class时,建议都要设置package,尽量不要放在默认包中。

  • 相关阅读:
    C语言I博客作业04
    解决@ResponseBody注解返回的json中文乱码问题
    自定义 Helper Method
    webapi 学习1
    分布式事务TransactionOptions及设置msdtc
    了解websocket是什么
    用postman 来实现post方式返回json数据
    异步 Controller
    asp.net mvc Filter
    asp.net mvc Controller Factory
  • 原文地址:https://www.cnblogs.com/ibelieve618/p/6362481.html
Copyright © 2011-2022 走看看