关于Java类和包的那些事

*.java

一个*.java源文件中是否可以包含多个类?有什么限制

  • 可以有多个类,但是只能有一个public的类,并且public的类名必须和文件名一致。
  • 一个文件中可以只有非public类,如果只有一个非public类,此类可以和文件名不同

在这里插入图片描述
在这里插入图片描述

为什么一个java源文件中只能有一个public类

  • 编译器在编译时,针对一个java源文件(编译单元)只会接受一个public类,否则报错

在java文件中是否可以没有public类

  • public类不是必须的,java文件中可以没有public类。

为什么这个public的类的类名必须与文件名相同

  • 是为了方便虚拟机在响应的路径中找到响应的类所对应的字节码文件

main

主函数: 一个特殊的函数,作为程序的入口,可以被JVM调用

主函数的定义

  • public:代表着该函数的访问权限是最大的
  • static:代表主函数随着类的加载就已经存在了
  • void:主函数没有具体的返回值
  • main:不是关键字,但是是一个特殊的单词,能够被JVM识别
  • (String[] args):
    • 函数的参数,参数类型是一个数组,该数组中的元素师字符串,字符串数组。main(String[] args) 字符串数组的 此时空数组的长度是0,但也可以在 运行的时候向其中传入参数。
 主函数是固定格式的,JVM识别
主函数可以被重载,但是JVM只识别main(String[] args),其他的都是作为一般函数

一个java文件中可以包含多个类,每个类中有且仅有一个主函数,但是每个java文件中可以包含多个主函数,在运行时,需要指定JVM入口是哪个。例如一个类的主函数可以调用另一个类的主函数。不一定会使用public类的主函数

外部类的访问权限

外部类只能被public和default修饰

为什么要对外部类或者类做修饰呢?

  • 存在包概念:public和default能够区分这个外部类能对不同包作一个划分(default修饰的类,其他包引入不了这个类,public修饰的类才能被import)
  • protected是包内可见并且子类可以见,但是当一个外部类想要继承一个protected修饰的非同包类时,压根找不到这个类,更别提几层了
  • private修饰的外部类,其他任何外部类都无法导入它。

Java包的命名规则

  • 以 java.* 开头的是Java的核心包,所有程序都会使用这些包中的类;‘
  • 以 javax. 开头的是扩展包,x 是 extension 的意思,也就是扩展。虽然 javax. 是对 java. 的优化和扩展,但是由于 javax. 使用的越来越多,很多程序都依赖于 javax.,所以 javax. 也是核心的一部分了,也随JDK一起发布。
  • 以 org.* 开头的是各个机构或组织发布的包,因为这些组织很有影响力,它们的代码质量很高,所以也将它们开发的部分常用的类随JDK一起发布。
  • 在包的命名方面,为了防止重名,有一个惯例:大家都以自己域名的倒写形式作为开头来为自己开发的包命名,例如百度发布的包会以 com.baidu. 开头,w3c组织发布的包会以 org.w3c. 开头,微学苑发布的包会以 net.weixueyuan.* 开头……
  • 组织机构的域名后缀一般为 org,公司的域名后缀一般为 com,可以认为 org. 开头的包为非盈利组织机构发布的包,它们一般是开源的,可以免费使用在自己的产品中,不用考虑侵权问题,而以 com. 开头的包往往由盈利性的公司发布,可能会有版权问题,使用时要注意。

import的使用

  • 如果你希望使用Java包中的类,就必须先使用import语句导入
  • import 只能导入包所包含的类,而不能导入包。
  • Java 编译器默认为所有的 Java 程序导入了 JDK 的 java.lang 包中所有的类(import java.lang.*😉,其中定义了一些常用类,如 System、String、Object、Math 等,因此我们可以直接使用这些类而不必显式导入。但是使用其他类必须先导入。

java类的搜索路径

  • java程序运行时要导入相应的类,也就是加载.class文件的过程。

安装JDK时,我们已经设置了环境变量 CLASSPATH 来指明类库的路径,它的值为 .;%JAVA_HOME%/lib,而 JAVA_HOME 又为 D:Program Filesjdk1.7.0_71,所以 CLASSPATH 等价于 .;D:Program Filesjdk1.7.0_71/lib。

如果在第一个路径下找到了所需的类文件,则停止搜索,否则继续搜索后面的路径,如果在所有的路径下都未能找到所需的类文件,则编译或运行出错。

你可以在CLASSPATH变量中增加搜索路径,例如 .;%JAVA_HOME%lib;C:javalib,那么你就可以将类文件放在 C:javalib 目录下,Java运行环境一样会找到。

用户自己写的类可以通过IDE指定编译后的class文件的输出目录,appclassloader会到指定目录进行类的加载

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值