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?

时间: 2024-11-27 13:25:58

java学习笔记5--类的方法的相关文章

scanner-Java基础学习中Scanner类nextInt方法问题

问题描述 Java基础学习中Scanner类nextInt方法问题 import java.util.*; public class Practice { public static String prompt = "How are you? "; public static void main(String[] args) { Scanner console = new Scanner(System.in); System.out.print(prompt); //int year=

JavaScript学习笔记之ES6数组方法_javascript技巧

ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代号harmony(和谐之意,显然没有跟上我国的步伐,我们已经进入中国梦版本了).上一次标准的制订还是2009年出台的ES5.目前ES6的标准化工作正在进行中,预计会在14年12月份放出正式敲定的版本.但大部分标准已经就绪,且各浏览器对ES6的支持也正在实现中. ES6给数组添加了一些新特性,而这些新特性到目前为止完全可以运用到自己的业务层.在这一节中将总结有关于ES6给数组提供一些新特性的使用方法. ES6提供

JavaScript学习笔记之数组求和方法_javascript技巧

推荐阅读:JavaScript学习笔记之数组的增.删.改.查 通过最近学习,越来越感觉JavaScript的强大与魅力之处,仅数组一个知识点就让我这样的初学者折腾了很久.折腾是折腾,但还是很有效果的,这几天的学习到的一些基本知识,就在自己的业务就用到了.顿感自信心爆棚,我也有一天能学会JavaScript. 别的不多说了,咱们今天一起来玩数组的求和,看看有哪些方法可以实现数组的求和. 数组方法 JavaScript中数组有很多种方法,下图能更好的向你阐述JavaScript有多少种方法,作用是啥

java学习笔记6--类的继承、Object类

1.类的继承 一种由已有的类创建新类的机制,是面向对象程序设计的基石之一.通过继承,可以根据已有类来定义新类,新类拥有已有类的所有功能 Java只支持单继承,每个子类只能有一个直接父类,父类是所有子类的公共属性及方法的集合,子类则是父类的特殊化,继承机制可以提高程序的抽象程度,提高代码的可重用性 基类(base class),也称超类(superclass),是被直接或间接继承的类 派生类(derived-class),也称子类 (subclass),继承其他类而得到的类,继承所有祖先的状态和行

java学习笔记7--抽象类与抽象方法

1.终结类与终结方法 被final修饰符修饰的类和方法,终结类不能被继承,终结方法不能被当前类的子类重写 终结类的特点:不能有派生类 终结类存在的理由: 安全: 黑客用来搅乱系统的一个手法是建立一个类的派生类,然后用他们的类代替原来的类 设计: 你认为你的类是最好的或从概念上你的类不应该有任何派生类 终结方法的特点:不能被派生类覆盖 终结方法存在的理由: 对于一些比较重要且不希望子类进行更改的方法,可以声明为终结方法.可防止子类对父类关键方法的错误重写,增加了代码的安全性和正确性 提高运行效率.

Java编程思想学习笔记——复用类

前言 复用代码是Java众多引人注目的功能之一. 达到复用代码的方法有: 组合:新的类由现有类的对象所组成.(复用现有代码的功能,而非它的形式) 继承:按照现有类的类型组建新类.(不改变现有类的形式,复用现有类的形式并在其中添加新代码).面向对象程序设计的基石 正文 1.组合语法 将对象引用置于新类中即可(非基本类型:在新类中放置引用,基本类型:直接添加就可以了) /** * 引擎 */ class Engine{ /** * 功率 */ double power; /** * 品牌 */ St

Java学习笔记之对象与类(1/3)

一.类 类(class)是构造对象的蓝图或模板.由类构造(construct)对象的过程就是创建类的实例(instance)的过程. 封装(encapsulation)是与类有关的一个重要概念.形式上来说,封装是把数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式.对象的数据称为实例域(instance field),操作数据的过程称为方法(method). 继承(inheritance)使得Java中的一个类可以通过拓展另一个类而来.实际上,Java中所有的类都是继承了一个最原始的

Java学习笔记

笔记 本笔记是在看浙大翁恺老师的视频教学时所做,希望对Java初学者有帮助! 一.Java基础1.正确认识Java(1)Java是一种有生产力的OOP语言,C++能做的Java都能做(2)Java与网络关系不大,更不是用来做网页的(3)Java是UNIX世界的产物,具有UNIX的思想(4)Java在国外广泛的被用来做各种应用2.Java历史(1)Brithday:May 23,1995(2)1991:Set-Top box:Jame Gosling(3)1994:OAK and FirstPer

java 学习笔记

笔记 JAVA的多线程 一.线程基本概念 将1个程序转换成多个独立运行的子任务.每个子任务都叫做一个线程. "进程"是指一种"自包容"的运行程序.有自己的地址空间.一个进程可以容纳多个同时执行的线程. 事实上,多线程最主要的一个用途就构建1个"反应灵敏"的用户界面. 二.线程的使用 1. 创建一个线程 最简单的方法就是从Thread类继承这个类,包含了创建和运行线程所需的一切东西. Thread最重要的是run方法,继承类必须对之进行重载,使其按

Java学习笔记,适用于零基础的小伙伴

1. 成员变量与局部变量的区别     1.作用域:         成员变量的作用域是整个类中都可以访问:         局部变量是的作用域是定义它的{}内, {}中的语句执行完它就被回收:     2.初始值:         局部变量使用前必须手动赋值, 系统不会赋默认值:成员变量系统会赋默认初始值.     3.所在内存区域:         局部变量在方法运行的栈内存里,在栈里,会自动释放:         成员变量在对象里,对象在堆里,成员变量也在堆里,不使用的对象会被垃圾回收机制