java中package,jar,import和非public类的困惑

 galsu99 发布于 2022-11-01 04:56

初学java,对这些概念不是很清楚。大概了解了一点,但是有困惑如下:
1,import其实和c里面的include还是有区别的是吧?import只是帮我们多打了点字,不用import也是可以的,就是自己要多打点字对吗?
2,package的作用只是为了包含多个java文件,方便被其他java文件来import它里面的java文件是吧?那如果package内的java文件想使用本package内的其他java文件,需要code“包名.java文件名”吗?还是直接code java文件名就可以?
3,jar包是一个java文件编译后产生多个class文件的集合对吗?
4,一个java文件里面的非public类,我看很多资料都说非public类不可以被包外使用,但可以被包内引用,这里的“包”指的是什么?指的是java文件还是package,还是jar?
万分感谢!!

2 个回答
  • 1,Java的import和C的include在语义上没有区别,意思都是指源文件需要依赖其它文件才能编译成功。但是在编译的(链接)link阶段时候有区别,C会将源文件包含进来一起编译,而Java会在classpath下找到对应的源文件,引用它。

    2,package的作用能将各个类用命名空间分隔开,方便管理。你说的方便被其他java文件来import它里面的java文件也是对的,比如说你的程序里有两个Father类,那么必须通过包名来区分这两个类,在import时候指定特定的包名.Father。例如java.sql.Datejava.util.Date,这也体现出包名的作用。

    3,jar包并不只是一个Java文件编译后产生多个class文件,当然,可以在一个Java文件里写多个类,编译出来自然会有多个class。一个jar包可以包含多个package编译后的class文件。另外,jar包也并非只能包含class文件,实际上还包含了一些关于jar包的元信息。甚至,jar包还能包含Java源文件。只是Java虚拟机在加载jar包的时候只关注class文件和元信息。
    jar包虽然已.jar命名作为后缀,但实际上是zip格式的,zip解压工具都能解压,建议解压出来看看里面都有什么东西。

    4,你看过的很多资料都说非public类不可以被包外使用,但可以被包内引用,这是错的,要么你看的资料是错的,要么是你理解错了。
    Java的访问权限总共分四种public, protected, default, private,除了public,其实protected也可以被包外访问(用在继承的时候),这里的包指的是package。default和private只能被包内使用。

    建议过一过Java基础。

    2022-11-12 01:50 回答
    1. C/C++里面的include是把源文件包含进来一起编译,java里面的import只是告诉java编译器编译该源文件需要使用到这些类,Java编译器会到class path中加载这些类

    2. java里的package作用和c++里的namespace类似,不同的是java强制package和文件夹对应以方便加载。

    3. yes,一开始jar包的作用是方便部署,现在jar包里面可以包含一些meta信息,这样jar有点类似组件化的思想了,可以动态加载和卸载,比如OSGi里面的jar就是一个组件。

    4. 包指的是该类所属的package,就是每个java文件最顶上申明的那一行。非public分为private和package作用域的,如果什么都不声明那就是package作用域,package作用域表示只有同一package下的class才能访问。

    2022-11-12 01:50 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有