package com.yaoyao:其实就是声明当前这个类在哪个目录下(路径下),说白了,就是一个人,不可能同时在两个地方!(就是用高级语言告诉计算机,它在哪,不然计算机都不知道!)。

import java.util.Scanner;:告诉计算机,接下来用到的Scanner类,是java.util包里面的。在编译的时候,会给下面的类的名称根据import来补全!(在编译的时候还是让类带上了全名,但是这就是计算机来做的了,我们程序员只要一句import就行,帮我们省力~)

:import两种声明格式

import 包名.类名

即:指定使用这个包中的这个类

import java.util.Scanner

1

import 包名.*

即:告诉计算机:下面代码中的类,是在此包中的类

import java.util.*

1

【细节】:建议使用到哪个类,就import 包名.类名。因为这样更具有可读性!虽然import 包名.*并不影响运行速度(因为不像C中的include会在把文件直接导进来),import声明只是方便编译器在编译时自动给下面类名补全,不需要我们程序员费力!

补充一些不用import 包名.*的理由:

1.编译速度:在一个很大的项目中,它们会极大的影响编译速度.但在小型项目中使用在编译时间上可以忽略不计。

2.命名冲突:解决避免命名冲突问题的答案就是使用全名。而按需导入恰恰就是使用导入声明初衷的否定。

3.说明问题:毕竟高级语言的代码是给人看的,按需导入看不出使用到的具体类型。

4.无名包问题:如果在编译单元的顶部没有包声明,Java编译器首选会从无名包中搜索一个类型,然后才是按需类型声明。如果有命名冲突就会产生问题。

【注意】:

当两个类在同一个包下不需要import(因为可以直接访问)

package声明要放在类的最上面,且一个类中只能有一条packge 语句(一个人不可能在两个地方)

import语句放在:package声明之后,类定义之前,可以有多条,没有顺序要求。