Java带参数的方法-4

简介: 在生活中,保存文档时会经常使用文件夹,把不同类型的文档归类,然后分放到不同的文件夹中,易于管理和查找,如图 14.7 所示。

14.3 包

14.3.1 为什么需要包

在生活中,保存文档时会经常使用文件夹,把不同类型的文档归类,然后分放到不同的文件夹中,易于管理和查找,如图 14.7 所示。



易于管理


不同内容的文档可以放在不同的袋子中,拥有相同的名字,避免冲突


文档分门别类,易于查找


在计算机中保存电子文档也不例外。图 14.8 是大家经常看到的 Windows 系统中的树形目录结构。


图 14.7 生活中的文件存储                        图 14.8 树形目录结构


在复杂的文件系统中,文件分门别类存储在不同的文件夹中解决了文件同名冲突的问题。事实上,在编写复杂程序的过程中,也会遇到同样的问题。 Java 以类组织程序,开发一个大型的工程可能需要编写成百上千个类。如果要求开发人员确保自己选用的类名不和其他程序员选择的类名冲突,这是很困难的。例如,在程序中,开发人员定义了一个 Sort 类,使用冒泡的方法排序,但另一个人也定义了一个 Sort 类,于是类名冲突,问题就这么产生了, Java 提供包来管理类。类似于文件存储在文件夹中, Java 的类文件可以存储在不同的包中。


包主要有以下三个方面的作用。


(1) 包允许将类组合成较小的单元(类似文件夹),易于找到和使用相应的类文件。


(2) 防止命名冲突: Java 中只有在不同包中的类才能重名。世界上有千千万万的程序员,命名同名的类几乎是难免的。有了包,类名就好管理多了。 A 定义了一个类 Sort, 封装在包 A 中,B 定义了一个类 Sort, 封装在包 B 中。在使用时,为了区别 A 和 B 分别定义的 Sort 类,便可以通过包名区分开,如 A.Sort 和 B.Sort 分别对应于 A 和 B 定义的 Sort 类。


(3) 包允许在更广的范围内保护类、数据和方法,可以在包内定义类。根据规则,包外的代码有可能不能访问该类。


14.3.2 如何声明包

要声明一个包 (package), 只要包含一个 package 命令作为一个 Java 源文件的第一条语句就可以,如示例 6 所示。


示例6


package cn.jbit.classandobject;


public class AccpSchool {
    public AccpSchool() {
    }
    public void showMessage() {
        System.out.println("这是上海Accp中心。");
    }
}


在示例 6 中, AccpSchool 类就属于包  cn.jbit.classandobject 。


下面是声明包的通用形式。


语法:


package 包名;


package 是关键字。包的声明必须是 Java 源文件中的第一条非注释性语句,而且一个源文件只能有一个包声明语句。在示例 6 中,使用 package 声明包,包名是 cn.jbit.classandobject 。


Java 中,包被设计与文件系统结构相对应。因此,在命名包时,要严格遵守以下编码规范。


Java 包的名字通常由小写字母组成,不能以圆点开头或结尾。例如, ".mypackage" 是错误的包名。

一个唯一包名的前缀通常是全部小写的 ASCII 字母,并且是一个顶级域名 com 、edu 、gov 、net 或 org, 通常使用组织的网络域名的逆序。例如,如果域名为 javagroup.net, 我们可以声明包为

package net.javagroup.mypackage;


包名的后续部分依不同机构各自内部的规范不同而不同。这类命名规范可能以特定目录名的组成来区分部门、项目、机器或注册名。例如:

package net.javagroup.research.powerproject;


14.3.3 使用 MyEclipse 创建包

问题:使用  Idea  创建  AccpSchool  类,并且使之位于包  cn.jbit.classandobject 中。


分析:在 Idea 中创建包有以下两种方式。


方法一:分别创建包和类。


方法二:在创建类的过程中创建类所属的包。


1. 使用方法一创建包

首先新建一个项目 "项目", 然后选择 "Java模块"点击“next” → "Create project from template" 点击“next”选项。在弹出的 "New Project" 对话框中,在"Preject name"文本框中填写项目名称。在"Preject Location" 文本框中填写项目的存放位置,在"Base package"文本框中填写包名 "cn.jbit.classandobject",如图 14.9 所示。




单击 "Finish" 按钮,在包资源管理器中就能看到图 14.10 所示的效果。



图 14.10 创建包成功的效果                          图 14.11 在包中创建类


选择 "cn.jbit.classandobject" 选项,然后新建类 AccpSchool, 在弹出的对话框中填写类名,单击 "Finish" 按钮。大家会在包资源管理器中看到类创建成功的效果,如图 14.11 所示。


14.3.4 包和目录的关系

我们通过创建包来组织程序,在 MyEclipse 中创建包后, Java 源文件是如何存储的呢?


在 Java 中,包被设计与文件系统相对应,事实上, Java 中的每个包都对应于文件系统中同名的子目录。包的嵌套反映了文件系统中的目录层次,如包 cn.jbit.classandobject 对应于文件系统中的cn\jbit\classandobject, 如图 14.14 所示,声明包事实上是在文件系统中创建了相对应的一层层文件夹,而类文件 AccpSchool.java 就存储在最内层文件夹 classandobject 中。


图 14.14 创建包生成的目录结构


下面就来解决一个实际问题。


问题:在 “ PackageTest ” 项目中,在  AccpSchool 类中添加方法 showMessage(), 然后创建 HelloAccp 类,要求该类位于包 “Demo” 中,在 HelloAccp 类中实现 main() 方法调用showMessage( )。


分析:要使用别的包中的类,首先要使用 import 导入这个类。注意:包的声明位于源文件的第一条语句。 import 语句要写在类定义之前,如示例 7 所示。


示例7


AccpSchool 类的实现:


package cn.jbit.classandobject;
public class AccpSchool {
    public AccpSchool() {
    }
    public void showMessage() {
        System.out.println("这是上海Accp中心。");
    }
}


HelloAccp 类的实现:


package Demo;
import cn.jbit.classandobject.AccpSchool;
public class HelloAccp {
    public HelloAccp() {
    }
    public static void main(String[] args) {
        AccpSchool center = new AccpSchool();
        center.showMessage();
    }
}

小结:声明包的含义:声明当前类所处的位置。


导入包的含义:声明在当前类中要使用到的其他类所处的位置。


14.3.6 技能训练


上机练习5


练习——模拟账户查询,实现存取款


需求说明


模拟银行账户业务。

♦创建包 bank. com , 编写 Account 类。


♦添加带参方法,实现存款和取款业务,存款初始为 0 元,取款时需要判断余额是否充足。


♦程序运行结果如图 14.15 所示。



参考代码:


Account类:

package bank.com;
/**
 * 模拟账户查询,实现存取款
 *
 */
public class Account {
   double money = 0;  //初始余额为0元
    /**
     * 查询帐户余额
     * @return money 当前余额
     */
    public double getMoney(){
        return money;
    }
    /**
     * 存款
     * @param s 存款数目
     */
    public void save(double s){
        money = money + s;
        System.out .println("存款成功");
        System.out .println("\n***当前余额为:"+getMoney()+"元***");
    }
    /**
     * 取款
     * @param a 取款数目
     */
    public void deposit(double a){
        if(money >= a){
           money = money - a;
          System.out .println("取款成功");
          System.out .println("\n***当前余额为:"+getMoney()+"元***");
        }else{
           System.out.println("余额不足!");
          System.out .println("\n***当前余额为:"+getMoney()+"元***");
        }
    }
}


测试Account类:


package bank.com;
/**
 *模拟账户查询,实现存取款
 */
import java.util.*;
public class TestAccount {
   public static void main(String[] args) {
      Account acc=new Account();
      Scanner input = new Scanner(System.in);
      boolean flag=true;//选择标识
      while(flag){
         System.out .print("\n1.存款  2.取款 0.退出\n请选择你需要办理的业务:");
         int choice=input.nextInt();
         if(choice==1){
            System.out .print("请输入存款金额:");
            double savemoney=input.nextDouble();
            acc.save(savemoney);
         }else if(choice==2){
            System.out .print("请输入取款金额:");
            double depositmoney=input.nextDouble();
            acc.deposit(depositmoney);
         }else if(choice==0){
            flag=false;
            System.out .print("谢谢使用!");
         }
         else{
            System.out .print("选择有误!");
         }    
      }
   }
}

本章总结


带参方法定义的一般形式如下。

<访问修饰符> 返回类型 <方法名〉(<参数列表>){
//方法的主体
}


调用带参方法与调用无参方法的语法是相同的,但是在调用带参方法时必须传入实际的参数的值。

形参是在定义方法时对参数的称呼,实参是在调用方法时传递给方法的实际的值。

Java中提供包来管理类。声明包使用关键字package,导入包使用关键字import。


相关文章
|
10天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
50 4
|
21天前
|
Java API
Java 对象释放与 finalize 方法
关于 Java 对象释放的疑惑解答,以及 finalize 方法的相关知识。
42 17
|
14天前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
28 2
|
22天前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
16 3
|
22天前
|
Java 开发者
在Java多线程编程中,选择合适的线程创建方法至关重要
【10月更文挑战第20天】在Java多线程编程中,选择合适的线程创建方法至关重要。本文通过案例分析,探讨了继承Thread类和实现Runnable接口两种方法的优缺点及适用场景,帮助开发者做出明智的选择。
15 2
|
22天前
|
安全 Java
Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧
【10月更文挑战第20天】Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧,包括避免在循环外调用wait()、优先使用notifyAll()、确保线程安全及处理InterruptedException等,帮助读者更好地掌握这些方法的应用。
15 1
|
22天前
|
Java 开发者
Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点
【10月更文挑战第20天】Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点,重点解析为何实现Runnable接口更具灵活性、资源共享及易于管理的优势。
28 1
|
22天前
|
Java
在Java多线程编程中,`wait()`和`notify()`方法的相遇如同一场奇妙的邂逅
在Java多线程编程中,`wait()`和`notify()`方法的相遇如同一场奇妙的邂逅。它们用于线程间通信,使线程能够协作完成任务。通过这些方法,生产者和消费者线程可以高效地管理共享资源,确保程序的有序运行。正确使用这些方法需要遵循同步规则,避免虚假唤醒等问题。示例代码展示了如何在生产者-消费者模型中使用`wait()`和`notify()`。
23 1
|
22天前
|
安全 Java 开发者
Java多线程中的`wait()`、`notify()`和`notifyAll()`方法,探讨了它们在实现线程间通信和同步中的关键作用
本文深入解析了Java多线程中的`wait()`、`notify()`和`notifyAll()`方法,探讨了它们在实现线程间通信和同步中的关键作用。通过示例代码展示了如何正确使用这些方法,并分享了最佳实践,帮助开发者避免常见陷阱,提高多线程程序的稳定性和效率。
33 1
|
16天前
|
Java Spring
JAVA获取重定向地址URL的两种方法
【10月更文挑战第17天】本文介绍了两种在Java中获取HTTP响应头中的Location字段的方法:一种是使用HttpURLConnection,另一种是使用Spring的RestTemplate。通过设置连接超时和禁用自动重定向,确保请求按预期执行。此外,还提供了一个自定义的`NoRedirectSimpleClientHttpRequestFactory`类,用于禁用RestTemplate的自动重定向功能。