关于package ——java笔记

来源:互联网 发布:js 设置div style 编辑:程序博客网 时间:2024/05/20 05:44

如何解决类名冲突呢?

Java兴义了名字空间:包

报名 + 类名 = 完整类名

如下代码

package xiaoming;public class Person{}
package xiaohong;public class Person{}
  • 小明的Person类:xiaoming.Person
  • 小红的Person类:xiaohong.Person

这样就可以区分开来了

Jvm只看完整类名,因此,只要包名不同,类就不同:

  • xiaoming.Person
  • xiaohong.Person

包可以是多层结构

  • java.util.Arrays

包没有父子关系

  • java.util和java.util.zip是不同的包,两者没有任何关系

因为JVM在家class并执行代码时,总是使用class的完整类名

  • xiaoming.Person
  • java.lang.String
  • java.util.Arrays
  • Hello(没有定义package,不推荐)
    编译器编译后的class文件中全部是完整类名

这也就起到了用package来区分class的原理

包作用域

位于同一个包的类,可以访问包作用域的字段和方法:

  • 不用public,protected、private修饰的字段和方法就是包作用域
package hello;public class World{    static int findMac(int[] ns)}
package hello;public class Map{    int price;    void setPrice(int price){    }}

引用其他类

  • 使用完整类名
  • 先impport, 再使用类名
  • 可以使用*(但是不推荐)

静态导入

  • import static 可以导入一个类的静态字段和静态方法
  • import static很少使用
import static java.lang.System.*;public class Main{    public static void main(String[] args){    //Sysout    out.println("Hello, world");}}

查找class

编译器最终编译出的.class文件只使用完整类名,因此,在代码中,编译器遇到一个class名称时:

  • 如果是完整类名,就直接根据完整类名查找
  • 如果是简单类名:

    • 查找当前package的class
    • 查找import的class
    • 查找java.lang包的class
  • 如果无法确定类名:

    • 编译错误
import java.text.Format;java.util.List list;//->java.util.ListFormat format - null; //>java.text.FormatString s = 'hi'; // ->java.lang.StringSystem.out.println(s); // -> java.lang.SystemMessageFormat mf = null; // Compile error;//MessageFormat cannot be resolved to a tye

自动import

在编写代码的时候,编译器有几条规则

编写class时:

  • 默认自动import当前package的其他class
  • 默认自动import java.lang.*

我们在使用的时候有以下几点需要注意

  • 报名使用倒置的域名确保唯一:
    Org.apache
    org.apache.commons.log

  • 不要和java.lang包的类崇明:
    String.System,Runtime….

    • 不要和JDK常用类重名:
      java.util.List,java,text.Fromat,java.math.Biginteger

以上内容来自廖雪峰老师的飞扬学院。

原创粉丝点击