最近在准备面试,把知识点复习一遍,整理出的笔记记录下,里面会穿插代码和面试例题。
内容不是原创,是总结和收集,并在理解的基础上进行一些完善,如果侵权了请联系作者,若有错误也请各位指正。因为收集的时候忘记把来源记录下来了,所以就不po出处了,请见谅(这是个坏习惯,一定改)。
面试复习之—Java基础(五):Java类和Java包
这是面试复习内容的第五篇——Java类和Java包,主要是Java基础的内容,所有内容将分为几篇来写。
Java类和Java包
Java类
类:类是一个模板,它描述一类对象的行为和状态。类是java应用程序的基本组成部分。
Java文件中类的访问权限
在java编程思想(第四版)一书中有这样3段话(6.4 类的访问权限):
1.每个编译单元(文件)都只能有一个public类,这表示,每个编译单元都有单一的公共接口,用public类来表现。该接口可以按要求包含众多的支持包访问权限的类。如果在某个编译单元内有一个以上的public类,编译器就会给出错误信息。
2.public类的名称必须完全与含有该编译单元的文件名相同,包含大小写。如果不匹配,同样将得到编译错误。
3.虽然不是很常用,但编译单元内完全不带public类也是可能的。在这种情况下,可以随意对文件命名。
例题
1、一个”.java”源文件中是否可以包括多个类(不是内部类)?有什么限制?
答:可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。
2、为什么一个文件中只能有一个public的类
答:编译器在编译时,针对一个java源代码文件(也称为“编译单元”)只会接受一个public类。否则报错。
3、在java文件中是否可以没有public类
答:public类不是必须的,java文件中可以没有public类。
4、为什么这个public的类的类名必须和文件名相同
答: 是为了方便虚拟机在相应的路径中找到相应的类所对应的字节码文件。
Main函数
main不是关键字,却是一个特殊的单词,能够被JVM识别。
一个java文件中可以包含很多个类,每个类中有且仅有一个主函数,但是每个java文件中可以包含多个主函数,在运行时,需要指定JVM入口是哪个。
主函数可以被重载,但是JVM只识别main(String[] args),其他都是作为一般函数。这里面的args数组变量可以更改(默认情况下传入了空数组),其他都不能更改。
- Public:代表该函数访问权限是最大的。
- Static:代表主函数在类加载时就已经存在了。
- Void:主函数没有具体的返回值。
- String[] args:主函数的参数,参数的类型是一个数组。默认传入的空数组。可以在运行时传递对应参数到程序中,用于传递或存储参数。
Java包
为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。包的作用是防止命名冲突;以目录的形式管理类,方便查找和使用;提供访问控制。
包的命名规则
在包的命名方面,为了防止重名有一个惯例,一般都以公司的域名倒过来作为包名。com.*开头的一般为盈利性公司,org.*一般为为盈利性机构发布的包。
- 以java.*开头的是Java的核心包。
- 以javax.*开头的是扩展包。x是extendsion
扩展的意思。虽然是对java.*的扩展和优化,但是由于扩展包使用的越来越广泛,很多程序都依赖于此,所以它也是核心的一部分了,也随JDK一起发布。 - 以org.*开头的是各个机构或组织发布的包,因为这些组织很有影响力,代码质量很高,或者使用频率较高,所以也随JDK一起发布。
Import的使用
为了能够使用类外部的java类,就必须使用import引入类所在的包。
- Import导入的是包下的类。
- 为了方便使用,一般使用通配符*导入某个包下的所有类。
- Java编译器默认为所有的java程序导入了java.lang包中所有的类,其中定义了一些常用的类,如system、String、Math、Object等。
访问权限
- Public:包内、包外所有类中可见(可访问调用)。
- Protected:包内所有的类可见;包外有继承关系的子类可见。
- Default:默认级别。本类、包内可见,其他包不可import引入。
- Private:仅在同一个类中可见。
总结:public>protected>default=package>private。
常用的jar包
- java.lang:包含语言支持类(例如分类,用于定义基本数据类型,数学运算)。该软件包会自动导入。
- java.io:包含分类以支持输入/输出操作。
- java.util:包含实现像链接列表,字典和支持等数据结构的实用类; 用于日期/时间操作。
- java.applet:包含用于创建Applets的类。
- java.awt:包含用于实现图形用户界面组件的类(如按钮,菜单等)。
- java.net:包含支持网络操作的类。