关于package ——java笔记

如何解决类名冲突呢?

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.List
Format format - null; //>java.text.Format
String s = 'hi'; // ->java.lang.String
System.out.println(s); // -> java.lang.System

MessageFormat 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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值