java学习笔记5--类的方法

简介:

1、方法的控制流程

Java中的流程控制结构主要有三种:

顺序结构

选择结构

if语句(二路选择结构)、switch语句(多路选择结构)

循环结构

for语句、while语句、do-while语句

跑个程序:

输入一个年份,判断它是不是闰年。(闰年: 能被4整除但不能被100整除,或者能被400整除)
public class test 
{
     public static void main(String[ ] args) throws IOException { 
          int year;
          boolean IsLeapYear;
          System.out.println("Enter the year:");
          BufferedReader in =new BufferedReader(new InputStreamReader(System.in));
          year=(new Integer(in.readLine())).intValue();
          IsLeapYear=((year%4==0 && year%100 != 0)||(year%400 == 0)); 
          if (IsLeapYear) {    
               System.out.print(year); 
               System.out.println( "is a leap year"); 
          } else {    
               System.out.print(year); 
               System.out.println( "is not a leap year"); 
         }
    }
}

由于java相关循环控制与C语言类似,所以不加赘述

2、异常处理简介

异常的基本概念:

又称为例外,是特殊的运行错误对象;是面向对象规范的一部分,是异常类的对象;Java中声明了很多异常类,每个异常类都代表了一种运行错误,类中包含了该运行错误的信息

处理错误的方法:

每当Java程序运行过程中发生一个可识别的运行错误时,即该错误有一个异常类与之相对应时,系统都会产生一个相应的该异常类的对象,即产生一个异常

异常处理示意图:

Java异常处理机制的优点:
  • 将错误处理代码从常规代码中分离出来

  • 按错误类型和差别分组

  • 对无法预测的错误的捕获和处理

  • 克服了传统方法的错误信息有限的问题

  • 把错误传播给调用堆栈

程序运行过程中发生的异常事件,根据错误的严重程度不同,可分为两类

错误

致命性的,用户程序无法处理

Error类是所有错误类的父类

异常

非致命性的,可编制程序捕获和处理

Exception类是所有异常类的父类

异常和错误类的层次结构:

Java预定义的一些常见异常:

ArithmeticException:整数除法中除数为0

NullPointerException:访问的对象还没有实例化

NegativeArraySizeException:创建数组时元素个数是负数

ArrayIndexOutOfBoundsException:访问数组元素时,数组下标越界

ArrayStoreException:程序试图向数组中存取错误类型的数据

FileNotFoundException:试图存取一个并不存在的文件

IOException:通常的I/O错误

异常的处理:

对于检查型异常,Java强迫程序必须进行处理。处理方法有两种:声明抛出异常

不在当前方法内处理异常,而是把异常抛出到调用方法中捕获异常,使用try{} catch() {}块,捕获到所发生的异常,并进行相应的处理

声明抛出异常

如果程序员不想在当前方法内处理异常,可以使用throws子句声明将异常抛出到调用方法中

如果所有的方法都选择了抛出此异常,最后JVM将捕获它,输出相关的错误信息,并终止程序的运行。在异常被抛出的过程中, 任何方法都可以捕获它并进行相应的处理

举个例子:

public void openThisFile(String fileName) throws java.io.FileNotFoundException { 
     //code  for method 
}
public void getCustomerInfo() throws java.io.FileNotFoundException { 
    // do something
    this.openThisFile("customer.txt"); 
    // do something  
}

如果在openThisFile中抛出了FileNotfoundException异常,getCustomerInfo将停止执行,并将此异常传送给它的调用者

捕获异常

语法格式:
try {
    statement(s)
} catch (exceptiontype name) {
    statement(s)
} finally {
    statement(s)
}

说明

try 语句,其后跟随可能产生异常的代码块

catch语句,其后跟随异常处理语句,通常用到两个方法

getMessage(),返回一个字符串对发生的异常进行描述。

printStackTrace(),给出方法的调用序列,一直到异常的产生位置

finally语句,不论在try代码段是否产生异常,finally 后的程序代码段都会被执行。通常在这里释放内存以外的其他资源

注意事项

在类层次树中,一般的异常类型放在后面,特殊的放在前面

举个例子:

import java.io.*; 
public class ExceptionTester { 
     public static void main(String args[]) { 
         System.out.println("Enter the first number:"); 
         int number1 = Keyboard.getInteger(); 
         System.out.println("Enter the second number:"); 
         int number2 = Keyboard.getInteger(); 
         System.out.print(number1 + " / " + number2 + "=");         
         int result = number1 / number2; 
         System.out.println(result); 
     } 
}

其中,Keyboard类的声明如下:

import java.io.*; 
public class Keyboard{
    static BufferedReader inputStream = new BufferedReader(new InputStreamReader(System.in));     
    public static int getInteger() { 
        try { 
            return (Integer.valueOf(inputStream.readLine().trim()).intValue()); 
        } catch (Exception e) { 
           e.printStackTrace(); 
           return 0; 
        } 
    }
     public static String getString() { 
         try {
             return (inputStream.readLine()); 
         } catch (IOException e) {
             return "0";
         }  
     }
}
运行结果:

Enter the first number:

140

Enter the second number:

abc

java.lang.NumberFormatException: abc

        at java.lang.Integer.parseInt(Integer.java:426)

        at java.lang.Integer.valueOf(Integer.java:532)

        at Keyboard.getInteger(Keyboard.java:10)

        at ExceptionTester.main(ExceptionTester.java:7)

140 / 0=Exception in thread "main" java.lang.ArithmeticException: / by zero

        at ExceptionTester.main(ExceptionTester.java:10)

3、方法的重载(overloading)

一个类中名字相同的多个方法,这些方法的参数必须不同,Java可通过参数列表的不同来辨别重载的方法:或者参数个数不同、或者参数类型不同

返回值可以相同,也可以不同;重载的价值在于它允许通过使用一个方法名来访问多个方法

举个例子:

class MethodOverloading {
    public void receive(int i){
        System.out.println("Receive one int parameter. ");
        System.out.println("i="+i);
    }    
    public void receive(double d){
        System.out.println("Receive one double parameter. ");
        System.out.println("d="+d);
    }    
    public void receive(String s){
        System.out.println("Receive one String parameter. ");
        System.out.println("s="+s);
    }    
   public void receive(int i,int j){
        System.out.println("Receive two int parameters. ");
        System.out.println("i=" + i + "  j=" + j);
    }    
    public void receive(int i,double d){
        System.out.println("Receive one int parameter and one double parameter. ");
        System.out.println("i=" + i + "  d=" + d);
    }    
}
public class test {
    public static void main(String args[]){
        MethodOverloading m = new MethodOverloading();
        m.receive(2);
        m.receive(5.6);
        m.receive(3,4);
        m.receive(7,8.2);
        m.receive("Is it fun?");
    }
}
运行结果:

Receive one int parameter.

i=2

Receive one double parameter.

d=5.6

Receive two int parameters.

i=3  j=4

Receive one int parameter and one double parameter.

i=7  d=8.2

Receive one String parameter.

s=Is it fun?

目录
相关文章
|
7天前
|
Java 编译器
Java——类与对象(继承和多态)
本文介绍了面向对象编程中的继承概念,包括如何避免重复代码、构造方法的调用规则、成员变量的访问以及权限修饰符的使用。文中详细解释了继承与组合的区别,并探讨了多态的概念,包括向上转型、向下转型和方法的重写。此外,还讨论了静态绑定和动态绑定的区别,以及多态带来的优势和弊端。
20 9
Java——类与对象(继承和多态)
|
7天前
|
SQL Java 编译器
Java——类与对象(封装)
封装是面向对象编程中的概念,指将数据(属性)和相关操作(方法)组合成独立单元(类),使外部无法直接访问对象的内部状态,只能通过提供的方法进行交互,从而保护数据安全。例如,手机将各种组件封装起来,只暴露必要的接口供外部使用。实现封装时,使用`private`关键字修饰成员变量,并提供`get`和`set`方法进行访问和修改。此外,介绍了包的概念、导入包的方式及其注意事项,以及`static`关键字的使用,包括静态变量和方法的初始化与代码块的加载顺序。
18 10
Java——类与对象(封装)
|
7天前
|
Java C语言
Java——类与对象
这段内容介绍了Java中的类和对象、`this`关键字及构造方法的基本概念。类是对现实世界事物的抽象描述,包含属性和方法;对象是类的实例,通过`new`关键字创建。`this`关键字用于区分成员变量和局部变量,构造方法用于初始化对象。此外,还介绍了标准JavaBean的要求和生成方法。
18 9
Java——类与对象
|
8天前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(基础篇)
从Java环境的搭建到实际代码的编写,从基本用法的讲解到底层原理的剖析,深度解析Java基础知识。本文是《Java学习路线》专栏的起始文章,旨在提供一套完整的Java学习路线,覆盖Java基础知识、数据库、SSM/SpringBoot等框架、Redis/MQ等中间件、设计模式、架构设计、性能调优、源码解读、核心面试题等全面的知识点,并在未来不断更新和完善,帮助Java从业者在更短的时间内成长为高级开发。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(基础篇)
|
6天前
|
存储 安全 Java
Java——String类详解
String 是 Java 中的一个类,用于表示字符串,属于引用数据类型。字符串可以通过多种方式定义,如直接赋值、创建对象、传入 char 或 byte 类型数组。直接赋值会将字符串存储在串池中,复用相同的字符串以节省内存。String 类提供了丰富的方法,如比较(equals() 和 compareTo())、查找(charAt() 和 indexOf())、转换(valueOf() 和 format())、拆分(split())和截取(substring())。此外,还介绍了 StringBuilder 和 StringJoiner 类,前者用于高效拼接字符串,后者用于按指定格式拼接字符串
11 1
Java——String类详解
|
8天前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(进阶篇)
本文是Java基础的进阶篇,对异常、集合、泛型、Java8新特性、I/O流等知识进行深入浅出的介绍,并附有对应的代码示例,重要的地方带有对性能、底层原理、源码的剖析。适合Java初学者。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(进阶篇)
|
9天前
|
存储 Java
Java的对象和类的相同之处和不同之处
在 Java 中,对象和类是面向对象编程的核心。
|
3天前
|
安全 Java
Java StringBuffer 和 StringBuilder 类详解
在 Java 中,`StringBuffer` 和 `StringBuilder` 用于操作可变字符串,支持拼接、插入、删除等功能。两者的主要区别在于线程安全性和性能:`StringBuffer` 线程安全但较慢,适用于多线程环境;`StringBuilder` 非线程安全但更快,适合单线程环境。选择合适的类取决于具体的应用场景和性能需求。通常,在不需要线程安全的情况下,推荐使用 `StringBuilder` 以获得更好的性能。
|
3天前
|
Java 开发者
Java Character 类详解
Java中的`Character`类是`java.lang`包的一部分,用于将基本类型`char`封装为对象,并提供了丰富的静态方法来处理字符,如类型判断、大小写转换等。
|
3天前
|
Java 索引
Java String 类详解
Java 中的 `String` 类用于表示不可变的字符序列,是 Java 标准库 `java.lang` 包的一部分。字符串对象一旦创建,其内容不可更改,修改会生成新对象。