Java学习day022 包(类的导入、静态导入、将类放入包中、包作用域)

立创·庐山派-K230-CanMV(嘉楠勘智)开发板通过ATK-ESP8266实现图像识别数据无线传输至原子云 本文详细介绍了如何使用立创·庐山派-K230-CanMV开发板,通过ATK-ESP8266 WIFI模块实现图像识别数据的无线传输至原子云平台。内容括硬件连接、软件环境搭建、AT指令控制、原子云连接及数据上传的全过程,并提供了实用的调试技巧和常见问题解决方案,为物联网应用开发提供了完整实践指南。 阅读详情

使用的教材是java核心技术卷1,我将跟着这本书的章节同时配合视频资源来进行学习基础java知识。

day022  包(类的导入、静态导入、将类放入包中、包作用域)

Java允许使用包(package)将类组织起来。借助于包可以方便地组织自己的代码,并将自己的代码与别人提供的代码库分开管理。

标准的Java类库分布在多个包中,包括java.lang、java.util和java.net等。标准的Java包具有一个层次结构。如同硬盘的目录嵌套一样,也可以使用嵌套层次组织包。所有标准的Java包都处于java和javax包层次中。

使用包的主要原因是确保类名的唯一性。假如两个程序员不约而同地建立了Employee类。只要将这些类放置在不同的包中,就不会产生冲突。事实上,为了保证包名的绝对唯一性,Sun公司建议将公司的因特网域名(这显然是独一无二的)以逆序的形式作为包名,并且对于不同的项目使用不同的子包。例如,horstmann.com的域名。逆序形式为com.horstmann。这个包还可以被进一步地划分成子包,如com.horstmann.corejava。

从编译器的角度来看,嵌套的包之间没有任何关系。例如,java.util包与java.util.jar包毫无关系。每一个都拥有独立的类集合。


1.类的导入

一个类可以使用所属包中的所有类,以及其他包中的公有类(public class)。我们可以采用两种方式访问另一个包中的公有类。第一种方式是在每个类名之前添加完整的包名。例如:

java.time.LocalDate today = java.time.LocalDate.now();

这显然很繁琐。更简单且更常用的方式是使用import语句。import语句是一种引用包含在包中的类的简明描述。一旦使用了import语句,在使用类时,就不必写出包的全名了。

可以使用import语句导人一个特定的类或者整个包。import语句应该位于源文件的顶部(但位于package语句的后面)。例如,可以使用下面这条语句导人java.util包中所有的类。

import java.util.*;

然后,就可以使用

LocalDate today = LocalDate.now();

而无须在前面加上包前缀。还可以导人一个包中的特定类:

import java.time.LocalDate;

java.time.*的语法比较简单,对代码的大小也没有任何负面影响。当然,如果能够明确地指出所导人的类,将会使代码的读者更加准确地知道加载了哪些类。

在Eclipse中,可以使用菜单选项Source—OrganizeImports。Package语句,如import java.util.*;将会自动地扩展指定的导入列表,如:

import java.util.ArrayList; 
import java.util.Date;

这是一个十分便捷的特性。

但是,需要注意的是,只能使用星号(*)导入一个包,而不能使用import java.*或import java.*.*导入以java为前缀的所有包。

在大多数情况下,只导入所需的包,并不必过多地理睬它们。但在发生命名冲突的时候,就不能不注意包的名字了。例如,java.util和java.sql包都有日期(Date)类。如果在程序中导入了这两个包:

import java.util.*;
import java.sql.*;

在程序使用Date类的时候,就会出现一个编译错误:

Date today;//Error java.util.Date or java.sql.Date?

此时编译器无法确定程序使用的是哪一个Date类。可以采用增加一个特定的import语句来解决这个问题:

import java.util.*;
import java.sql.*;
import java.util.Date;

如果这两个Date类都需要使用,又该怎么办呢?答案是,在每个类名的前面加上完整的包名。

java.util.Date deadline = new java.util.Date(); 
java.sql.Date today = new java.sql.Date(...);

在包中定位类是编译器(compiler)的工作。类文件中的字节码肯定使用完整的包名来引用其他类。


2.静态导入

import语句不仅可以导人类,还增加了导人静态方法和静态域的功能。

例如,如果在源文件的顶部,添加一条指令:

import static java.lang.System.*;

就可以使用System类的静态方法和静态域,而不必加类名前缀:

out.println("Goodbye, World!"); //i.e., System.out 
exit(0);//i.e., System.exit

另外,还可以导入特定的方法或域:

import static java.lang.System.out;

实际上,是否有更多的程序员采用System.out或System.exit的简写形式,似乎是一件值得怀疑的事情。这种编写形式不利于代码的清晰度。不过,

sqrt(pow(x,2)+pow(y,2));

看起来比

Math.sqrt(Math.pow(x, 2)+Math.pow(y, 2));

清晰得多。


3.将类放入包中

要想将一个类放人包中,就必须将包的名字放在源文件的开头,包中定义类的代码之前。

package com.horstiann.corejava; 
public class Employee 
{
    ...
}

如果没有在源文件中放置package语句,这个源文件中的类就被放置在一个默认包(defaulfpackage)中。默认包是一个没有名字的包。在此之前,我们定义的所有类都在默认包中。

将包中的文件放到与完整的包名匹配的子目录中。例如,com.horstmann.corejava包中的所有源文件应该被放置在子目录com/horstmann/corejava(Windows中com\horstmann\corejava)中。编译器将类文件也放在相同的目录结构中。

之前的两个程序分放在两个包中:PackageTest类放置在默认包中;Employee类放置在com.horstmann.corejava包中。因此,Employee.java文件必须包含在子目录com/horstmann/corejava中。换句话说,目录结构如下所示: 

                                            

要想编译这个程序,只需改变基目录,并运行命令

javac PackageTest.java

编译器就会自动地查找文件com/horstmann/corejava/Employee.java并进行编译。

下面看一个更加实际的例子。在这里不使用默认包,而是将类分别放在不同的包中(com.horstmann.corejava和com.mycompany)。

                                                 

在这种情况下,仍然要从基目录编译和运行类,即包含com目录:

javaccom/myconipany/PayrollApp.java

javacom.mycompany.PayrollApp

需要注意,编译器对文件(带有文件分隔符和扩展名.java的文件)进行操作。而Java解释器加载类(带有.分隔符)。


4.包作用域

前面已经接触过访问修饰符public和private。标记为public的部分可以被任意的类使用;标记为private的部分只能被定义它们的类使用。如果没有指定public或private,这个部分(类、方法或变量)可以被同一个包中的所有方法访问。

在之前的程序中,没有将Employee类定义为公有类,因此只有在同一个包(在此是默认包)中的其他类可以访问,例如EmployeeTest。对于类来说,这种默认是合乎情理的。但是,对于变量来说就有些不适宜了,因此变量必须显式地标记为private,不然的话将默认为包可见。显然,这样做会破坏封装性。问题主要出于人们经常忘记键人关键字private。在java.awt包中的Window类就是一个典型的示例。java.awt包是JDK提供的部分源代码:

public class Window extends Container 
{
     String warningString;
    ...
}

请注意,这里的wamingString变量不是private!这意味着java.awt包中的所有类的方法都可以访问该变量,并将它设置为任意值(例如,“Trustme!”)。实际上,只有Window类的方法访问它,因此应该将它设置为私有变量。


 

第8.1节 满足构网要求的功率器件与散热设计 摘要: 构网型变流器的功率器件选型与散热设计面临严苛要求,需综合考虑过载能力、暂态应力与可靠性。IGBT模块选型需重点评估电压/电流等级、损耗特性及结温波动,而SiC MOSFET虽具有高频低损耗优势,但面临栅极可靠性等挑战。散热设计需采用液冷等先进技术控制结温波动,并通过电热应力仿真和寿命预测实现可靠性优化。系统化选型流程需结合规范要求、工况谱分析和实测验证,为构网型变流器提供坚实的物理基础。 阅读详情

相关推荐

Java API 导入

如果导入的多个中存在同名的,编译器将无法确定使用哪个,从而导致编译错误。因此,建议在使用通配符导入时,只导入确实需要使用的,避免导入不必要的。但是在实际开发中,建议仅导入需要使用的,避免导入过多无用的,以减少命名冲突和代码的混乱程度。在Java中,导入有两种常见的方式:使用完整的名或使用通配符导入。当我们只需要使用一个或少数几个特定的时,可以使用完整的导入。除了导入整个,我们还可以使用静态导入导入静态成员。当我们需要使用同一个下的多个时,可以使用通配符导入

ScriptCharm的博客 287

Java 导入

1、Java导入需要使用import关键字: 我们导入以后我们就不用使用完整的名了,就可以直接找到该下的该。 导如的语句要放到class的最上面。 如果导入一个包中的很多名,我们可以通过*来进行导入import java.util.*;该下的所有。 2、使用import关键字导入静态成员: 例如我们平时使用的System.out.println();输出语句: public class Demo{ public static void main(String[] args){

单枪匹码 1万+

java实现导入文件

java实现导入文 件

java怎么把一个导入一个

项目方案:将一个导入一个中 在Java中,我们可以通过导入的方式使得一个可以在另一个中使用。下面介绍一种通过import语句将一个导入一个的方法,并给出相应代码示例。 项目背景 假设我们有一个项目,其中有两个分别为ClassA和ClassB,我们希望在ClassB中使用ClassA中的方法或属性。为了实...

weixin_40336898的博客 667

Java导入

1、定义及名注意事项 在Java中,使用package来解决class命名冲突。 Java定义了一种命名空间,称之为(package)一个总是属于某个名只是一个简写,真正的完整名是".名"。 在定义class的时候,需要在第一行声明这个class属于哪个,如: package OOP; // 申明报名为OOP public class Person { ... ... } (1)在Java虚拟机执行的时......

晓康的博客 4157

java默认里的引用

获取反射的方法有: 第一种:Class c = SubjectService.class 第二种:Class c = Class.forName(SubjectService) 获取到 Class 之后,便可以获取有参方法 c.getDeclaredMethod(String name, Class<?>… parameterTypes) 获取本中的所有方法 (只拿本中的) c.getDeclaredMethods(); 继续解析代码中的 SubjectService.class.get

hai__zi的博客 431

022.day22 Character Collections工具 Properties

目录 补充内容 一、Character 二、Collections工具 三、Properties 补充内容 一、Character 针对字符有某些扩展用法 是否小写字母:isLowerCase 是否大写字母:isUpperCas...

weixin_30645617的博客 110

智能体侧开Day50 Java

Java基础语法和数据型操作

weixin_53860197的博客 23

day40-tomcat

部署、安装、配置tomcat(systemctl)Tomcat主配置文件部署静态页部署zrlog🍟🍟🍟🍟🍟接入负载均衡挂载到NFS。

a2354716112的博客 958

Day 55 多线程(1)

多线程(1) [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-blA15lh9-1631615737858)(C:\Users\Lenovo\Pictures\Saved Pictures\屏幕截图 2021-09-13 194652.png)] 本章核心概念 线程就是独立的执行路径; 在程序运行时,即使没有自己创建线程,后台也会有多个线程,如主线程,gc线程; main()称之为主线程,为系统的入口,用于执行整个程序; 在一个进程中,如果开辟了多个线程,线程的运行由调度器安

Shasfpp的博客 140

java string 分析_java中的string分析

Object 顶级toString()方法一般都要重写返回对象文本描述被很多API调用==比较变量的值,引用变量的值是地址值,引用变量==比较的是地址值不能用于比较逻辑上对象是否相等equals 方法一般要重写(重写时也要重写 hashCode方法)Object的equals 方法用于对象的相等 逻辑instanceof java的运算符测试一个对象是否是一个的实例A instanceof...

weixin_39738774的博客 146

Day15-Linux系统特殊权限知识精讲

创建共享目录/home/admins,要求属组为adminuser,adminuser组成员对admins目录有写入、读取和执行的权限,其他所有用户没有任何权限(root除外),在/home/admins目录中创建的文件会自动继成adminuser组。对于二进制命令或者程序来说,sgid的功能和suid基本相同,唯一的区别是suid是获得命令所属用户的身份和权限,而sgid是获得命令的所属用户组的身份和权限,因此,有关sgid对于二进制命令或者程序方面的知识就不详细叙述了。授权 suid 破坏性。

苦难带不走梦想 1002

day15-Linux系统特殊权限知识精讲

2:sgid;1:sticky。

我的梦想有多远,我就能走多远! 1169

jy-12-SPRINGMYBATIS02——旅游管理

day01 已上传分享 点主页寻找 已上传分享 点主页寻找 已上传分享 点主页寻找 已上传分享 点主页寻找 已上传分享 点主页寻找 已上传分享 点主页寻找 已上传分享 点主页寻找 day02 2.1.Java对象序列化 关于Java序列化的文章早已是汗牛充栋了,本文是对我个人过往学习,理解及应用Java序列化的一个总结。此文内容涉及Java序列化的基本原理,以及多种方法对序列化形式进行定制。在撰写本文时,既参考了Thinking in Java, E...

从码农到码到成功 161

Scala基础知识01

Scala是一门以Java的虚拟机(JVM)为运行环境,并将面向对象和函数编程的结合在一起的静态的语言,(为啥静态呢,因为是先编译成.class文件,然后再JVM上再运行的),Scala也是一门多范式的编程语言,这是因为Scala支持面向对象也支持函数式的编程。 在cmd输入scala的黑窗口,我们称之为REPL,这个是四个单词的缩写Read->Evaluation->Print-&...

ylm2999的博客 304

java中的

java中的

冯同学的博客 1294

java导入_java怎么导入

你好,世界!源代码组织方式Java程序由package+class组成,package对应目录的相对路径,class对应文件,如E:\Workspaces\MyEclipse10\JavaStudy\src\com\happyframework\javastudy\hello\Hello.java关于class有如下几点规则:文件的名字必须和class的名字一致(public级别的class名字)...

weixin_33958871的博客 4650

JAVA_import导入

  如果我们要使用其他,需要使用import导入,从而可以在本中直接通过名来调用,否则就需要书写的完整名和名。import后,便于编写代码,提高可维护性。 注意要点:   1. Java会默认导入java.lang下所有的,因此这些我们可以直接使用。   2. 如果导入两个同名的,只能用名+名来显示调用相关:  java.util.Date date = ...

赵广陆 2299

java 导入其他

按我之前的知识就是productionproduction=newproduction();主要归功于importlabourServices.production;labourServices下放一个production运作。那么我们要怎么在text中创建production的对象呢?就相当于去对应下引入了这个运行结果如下。import..名;made下放一个测试。主要看离引用的敌法隔了多少个。将测试的代码改成如下。...

weixin_45966674的博客 2823

静态导入

import语句可以导入一个或者一个包中的所有 import语句导入一个中的某个静态方法或者所有静态方法   import java.lang.Math.*; public class ImportTest { public static void main(String[] args) { System.out.println(Math.abs(3)); } ...

疏影横斜水清浅,暗香浮动月黄昏 141

计算机图形学期末考试试题及答案完整版 .pdf

计算机图形学期末考试试题及答案完整版

上一篇: Java学习day021 对象构造(重载、默认域初始化、无参数的构造器、显示域初始化、参数名、调用另一个构造器、初始化块)
下一篇: Java学习day023 类路径
Z zehao
博客等级 码龄7年 318粉丝 115原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值