java import、package与php的namespace和use、requie实质

这篇具有很好参考价值的文章主要介绍了java import、package与php的namespace和use、requie实质。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先,java的工作原理是,首先去java的环境变量classpath或者你当前编译目录下去找有没有你需要的类

import、package 后跟着的其实不是文件的真实路径,事实上,它们不需要按照名称组织文件夹,你把他们统统放在一个目录下也可以正常编译运行。将其按照文件路径组织仅仅是为了人们看起来方便。
它真实的目的是 为了避免类的冲突。

package名称就像是我们的姓,而class名称就像是我们的名字
所以,import 跟 c的#include 不同,是因为import 的功能到此為止,它不像#include 一样,会将其他文件的内容载入进来。import 只是让编译器编译这个java文件时把没有姓的类别加上姓,并不会把别的文件程序写进来。

那么 使用它有什么好处呢?

  • 避免类属性的冲突,世界上这么多java类,总会存在冲突,需要包名标识
  • 避免每次都写冗长的包名。java也可以不通过import 而直接写带包名的类全称直接调用类,比如可以直接写 java.lang.System.in 但是每次都这样写太麻烦,所以,你import java.lang.System后,代码中就可以只写System.in了

直接引入所有的类 import java.*可以么?
历史告诉我们,这样是不行的。因為那些类别是姓 http://java.io 而不是姓 java。就像姓『诸葛』的人应该不会喜欢你称他為『诸』 先生吧。这样写的话只会将java包下的类声明,而不不会声明子包的任何类。

使用按需导入*的模式,是否会降低效率?
结论:不会降低代码运行效率 但是会影响编译效率,因为本质上,是将你写的代码中的简写换成全称。所以会影响编译的速度

它会产生的问题如下

  1. 编译速度:在一个很大的项目中,它们会极大的影响编译速度,但在小型项目中使用在编译时间上可以忽略不计.
  2. 命名冲突:解决避免命名冲突问题的答案就是使用全名。而按需导入恰恰就是使用导入声明初衷的否定。
  3. 说明问题: 毕竟高级语言的代码是给人看的,按需导入看不出使用到的具体类型。
  4. 无名包问题,如果在编译单元的项部没有包声明,Ja编译器首选会从无名包中搜索一个类型,然后才是按需类型声明。如果有命名冲突就会产生问题。

而php需要require引入方能使用。和namespace、use的机制不一样

PS
程序员有时会导入当前包或java.lang包,这是不需要的,因为当前包的成员本身就在作用域内,而java.lang包是自动导入的。java编译器会忽略这些冗余导入声明(redundant import declarations)。即使像这样

import java.util.ArrayList;

import java.util.*;

多次导入,也可编译通过。编译器会将冗余导入声明忽略.文章来源地址https://www.toymoban.com/news/detail-515038.html

到了这里,关于java import、package与php的namespace和use、requie实质的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ImportError: Could not import docarray python package解决方案

      大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作

    2024年03月11日
    浏览(36)
  • Cannot use import statement outside a module 单测import引入模块失败

    运行npx jest时报错:Test suite failed to run 或者Cannot use import statement outside a module解决方法如下: 在package.json中设置 \\\"type\\\": \\\"module\\\" 如果没有package.json,终端使用 npm init -y 生成 使用babel转换es6语法 jest是运行在node环境的,所以不支持es6语法,我们需要通过配置babel将es6语法转换为

    2024年02月11日
    浏览(29)
  • ImportError: attempted relative import with no known parent package

    1.将source path 加入到sys目录里  2.将相对导入改成直接导入,去掉 “.\\\"

    2024年01月19日
    浏览(23)
  • SyntaxError: Cannot use import statement outside a module

    如运行node项目时出现如下错误,提示和网上的结果是再package.json 文件里加上 \\\"type\\\": \\\"module\\\" , 因为node 默认是 CommonJS 模块管理的, 然后后等你使用了 type: module 时,它又出现 node 默认的 require 导入格式被 type: module 冲突了 所以 ,同时使用 import 和 require 两种模块管理模式的正确

    2024年02月12日
    浏览(26)
  • Uncaught SyntaxError: Cannot use import statement outside a module

    报错原因: 浏览器报错的原因是我们用了算是在2022年比较现代的es6的语法, 但是浏览器将它作为以前版本的js解析,所以出现问题 正确用法: 为了让 JavaScript 更模块化、更整洁以及更易于维护,ES6 引入了在多个 JavaScript 文件之间共享代码的机制。 它可以导出文件的一部分

    2024年02月08日
    浏览(27)
  • Eslint配置 Must use import to load ES Module(已解决)

    最近在配置前端项目时,eslint经常会碰到各种报错(灰常头疼~) Syntax Error Error No ESLint configuration found. Syntax Error: Error: D:dmqdmq-ui.eslintrc.js: Environment key “es2021” is unknown at Array.forEach () error in ./src/main.js Syntax Error: Error: Cannot find module ‘@vue/cli-plugin-babel/preset’ from ‘D:dmqdmq

    2024年02月04日
    浏览(35)
  • ESlint报错Error: Must use import to load ES Module解决方法

    适用nvm工具将node版本从 12.16.3 切换到 16.15.1

    2024年02月12日
    浏览(31)
  • unity error CS0246: The type or namespace name ‘xxx‘ could not be found (are you missing a using

    unity 导入了Bitmap使用后报错: error CS0246: The type or namespace name ‘XXX’ could not be found (are you missing a using directive or an assembly reference?) 解决方案如下: .NET Standard 2.1与 .NET Foundation 发布的 .NET Standard 2.1 配置文件匹配。 Unity 建议新项目使用 .NET Standard 2.1。 它比 .NET 4.x 小,有利于尺

    2024年04月26日
    浏览(29)
  • 微信小程序报错: SyntaxError: Cannot use import statement outside a module

    微信小程序数据绑定,导包出现了: “SyntaxError: Cannot use import statement outside a module” 排查问题步骤记录,共勉 1.出现问题代码: 2.解决问题 2.1. 使用const {} = require(\\\" \\\")代替import {} from ’ ’ 注: const {} = require() 不能彻底解决问题,换种方法 2.2.点击详情(右上角),选择本地设

    2024年02月11日
    浏览(37)
  • Keil ARM Compiler(Use default compliler version 5)error: ‘#pragma import‘...解决办法

    Keil编译出现error: ‘#pragma import’ is an ARM Compiler 5 extension, and is not supported by ARM Compiler 6 [-Warmcc-pragma-import] 原因是Keil安装version 5版本的ARM Compiler(Use default compliler version 5),当我们使用新版本keil5创建寄存器模板,而选择了其他编译版本例如选择Use default compliler version 6)会报出来

    2024年01月19日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包