蓝旭第二周预习作业

Java的异常类,常用类,容器,泛型

目录

前言

一 异常与异常类

什么是异常

异常类型

常见的异常情况

Java的异常类层次结构

异常的具体操作办法:

throw的操作:

 二:常用实用类:

1string类

2scanner类

next() 与 nextLine() 区别

3stringbuffer类

4date类和calendar类

5日期格式化

使用 SimpleDateFormat 格式化日期

日期和时间的格式化编码

使用printf格式化日期

6math类

Number & Math 类方法

Math 的 floor,round 和 ceil 方法实例比较

三:容器

容器详解https://blog.csdn.net/qq_39273039/article/details/108197401

四泛型

 推荐两个课程



前言

本次的预习作业,主要涉及Java的一些实用操作。对Java运行出现异常的操作,保证程序的运行。以及一些写程序中经常使用的类,可以大大增加程序的可读性和便捷性。java容器是前人为我们提供的一套用于存储数据和对象的工具。如果你学过C++的STL,可以与之类比。java容器又可以称为Java Collection Framework(JCF)。里面除了存储对象的容器之外,还提供了一套用于处理和操作容器里面的对象的一套工具类。Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。


一 异常与异常类


什么是异常

所谓异常就是程序运行时可能出现的一些错误,比如试图打开一个根本不存在文件等,异常处理将会改变程序的控制流程,让程序有机会对错误做出处理。

异常类型

  • 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
  • 运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
  • 错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。

常见的异常情况

1、数组开得太小了,导致访问到了不该访问的内存区域
2、发生除零错误
3、大数组定义在函数内,导致程序栈区耗尽
4、指针用错了,导致访问到不该访问的内存区域
5、还有可能是程序抛出了未接收的异常

NullPointerException - 空指针引用异常
ClassCastException - 类型强制转换异常。
IllegalArgumentException - 传递非法参数异常。
ArithmeticException - 算术运算异常
ArrayStoreException - 向数组中存放与声明类型不兼容对象异常
IndexOutOfBoundsException - 下标越界异常
NegativeArraySizeException - 创建一个大小为负数的数组错误异常
NumberFormatException - 数字格式异常
SecurityException - 安全异常
UnsupportedOperationException - 不支持的操作异常

Java的异常类层次结构


异常的具体操作办法:

java异常处理的方式:
方式一: try-catch-finally
方式二: throws + 异常类型

try
{
   // 程序代码
}catch(ExceptionName e1)
{
   //Catch 块
}
try{
   // 程序代码
}catch(异常类型1 异常的变量名1){
  // 程序代码
}catch(异常类型2 异常的变量名2){
  // 程序代码
}catch(异常类型3 异常的变量名3){
  // 程序代码
}

try{
  // 程序代码
}catch(异常类型1 异常的变量名1){
  // 程序代码
}catch(异常类型2 异常的变量名2){
  // 程序代码
}finally{
  // 程序代码
}

可以在 try 语句后面添加任意数量的 catch 块。

如果保护代码中发生异常,异常被抛给第一个 catch 块。

如果抛出异常的数据类型与 ExceptionType1 匹配,它在这里就会被捕获。

如果不匹配,它会被传递给第二个 catch 块。

如此,直到异常被捕获或者通过所有的 catch 块。

finally 关键字用来创建在 try 代码块后面执行的代码块。

无论是否发生异常,finally 代码块中的代码总会被执行。

在 finally 代码块中,可以运行清理类型等收尾善后性质的语句

实际操作

public class ExcepTest{
  public static void main(String args[]){
    int a[] = new int[2];
    try{
       System.out.println("Access element three :" + a[3]);
    }catch(ArrayIndexOutOfBoundsException e){
       System.out.println("Exception thrown  :" + e);
//数组访问越界了。
    }
//这几个关键字之间一定不能有其他的语句
//finally一定会被执行
    finally{
       a[0] = 6;
       System.out.println("First element value: " +a[0]);
       System.out.println("The finally statement is executed");
    }
  }
}

throw的操作:

throws +异常类型,写在方法的声明处,此时此方法执行时, 可能会抛出的类型。
如果一个方法(中的语句执行时)可能生成某种异常, 但是并不能确定如何处理这种异常, 则此方法应显示地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理。

public class className
{
   public void withdraw(double amount) throws RemoteException,
                              InsufficientFundsException
   {
       // Method implementation
   }
   //Remainder of class definition
}

异常操作具体方法https://blog.csdn.net/xiangjunyes/article/details/104431473

 大佬对异常的详解https://blog.csdn.net/m0_46316970/article/details/119898445

 二:常用实用类:

1string类

方法名作用
String toLowerCase()字符串转小写
String toUpperCase()字符串转大写
String trim()去除字符串两边空格
boolean startsWith(String prefix)判断字符串是否以prefix开始
int length()字符串长度
boolean isEmpty()字符串是否为空
int indexOf(String str)返回str在字符串第一次出现的位置
boolean equalsIgnoreCase(String anotherString)忽略大小写判断两个串是否相等
byte[] getBytes()将字符串串变成字节数组返回
boolean endsWith(String suffix)判断字符串是否以suffix结尾
boolean contains(CharSequence s)判断字符串是否包含s
int compareTo(String anotherString)比较两个字符串。相等返回0;前大后小返回1;前小后大返回-1
char charAt(int index)返回指定位置的字符
构造方法
String(String original)
String s = “xxx”
String(char数组,起始下标,长度)
String(byte数组,起始下标,长度)
String(StringBuffer buffer)
String(StringBuffer buffer)
string1.concat(string2);连接两个字符串
String substring(int beginIndex, int endIndex)截取beginIndex到endIndex - 1的字符串
String substring(int beginIndex)从beginIndex开始截取字串

String类详解https://blog.csdn.net/qq_44715943/article/details/116308837

2scanner类

import java.util.Scanner; 
 
public class ScannerDemo {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        // 从键盘接收数据
 
        // next方式接收字符串
        System.out.println("next方式接收:");
        // 判断是否还有输入
        if (scan.hasNext()) {
            String str1 = scan.next();
            System.out.println("输入的数据为:" + str1);
        }
        scan.close();
    }
}

import java.util.Scanner;
 
public class ScannerDemo {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        // 从键盘接收数据
 
        // nextLine方式接收字符串
        System.out.println("nextLine方式接收:");
        // 判断是否还有输入
        if (scan.hasNextLine()) {
            String str2 = scan.nextLine();
            System.out.println("输入的数据为:" + str2);
        }
        scan.close();
    }
}

next() 与 nextLine() 区别

next():

  • 1、一定要读取到有效字符后才可以结束输入。
  • 2、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
  • 3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
  • next() 不能得到带有空格的字符串。

nextLine():

  • 1、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
  • 2、可以获得空白。

3stringbuffer类

当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。

和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。

以下列表列出了 StringBuffer 类的其他常用方法:

序号方法描述
1int capacity()
返回当前容量。
2char charAt(int index)
返回此序列中指定索引处的 char 值。
3void ensureCapacity(int minimumCapacity)
确保容量至少等于指定的最小值。
4void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
将字符从此序列复制到目标字符数组 dst
5int indexOf(String str)
返回第一次出现的指定子字符串在该字符串中的索引。
6int indexOf(String str, int fromIndex)
从指定的索引处开始,返回第一次出现的指定子字符串在该字符串中的索引。
7int lastIndexOf(String str)
返回最右边出现的指定子字符串在此字符串中的索引。
8int lastIndexOf(String str, int fromIndex)
返回 String 对象中子字符串最后出现的位置。
9int length()
 返回长度(字符数)。
10void setCharAt(int index, char ch)
将给定索引处的字符设置为 ch
11void setLength(int newLength)
设置字符序列的长度。
12CharSequence subSequence(int start, int end)
返回一个新的字符序列,该字符序列是此序列的子序列。
13String substring(int start)
返回一个新的 String,它包含此字符序列当前所包含的字符子序列。
14String substring(int start, int end)
返回一个新的 String,它包含此序列当前所包含的字符子序列。
15String toString()
返回此序列中数据的字符串表示形式。

4date类和calendar类

Date 对象创建以后,可以调用下面的方法。

序号方法和描述
1boolean after(Date date)
若当调用此方法的Date对象在指定日期之后返回true,否则返回false。
2boolean before(Date date)
若当调用此方法的Date对象在指定日期之前返回true,否则返回false。
3Object clone( )
返回此对象的副本。
4int compareTo(Date date)
比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。
5int compareTo(Object obj)
若obj是Date类型则操作等同于compareTo(Date) 。否则它抛出ClassCastException。
6boolean equals(Object date)
当调用此方法的Date对象和指定日期相等时候返回true,否则返回false。
7long getTime( )
返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
8int hashCode( )
 返回此对象的哈希码值。
9void setTime(long time)
 
用自1970年1月1日00:00:00 GMT以后time毫秒数设置时间和日期。
10String toString( )
把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。

5日期格式化

使用 SimpleDateFormat 格式化日期

SimpleDateFormat 是一个以语言环境敏感的方式来格式化和分析日期的类。SimpleDateFormat 允许你选择任何用户自定义日期时间格式来运行。例如:

import  java.util.*;
import java.text.*;
 
public class DateDemo {
   public static void main(String[] args) {
 
      Date dNow = new Date( );
      SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");
 
      System.out.println("当前时间为: " + ft.format(dNow));
   }
}

日期和时间的格式化编码

时间模式字符串用来指定时间格式。在此模式中,所有的 ASCII 字母被保留为模式字母,定义如下:

字母描述示例
G纪元标记AD
y四位年份2001
M月份July or 07
d一个月的日期10
h A.M./P.M. (1~12)格式小时12
H一天中的小时 (0~23)22
m分钟数30
s秒数55
S毫秒数234
E星期几Tuesday
D一年中的日子360
F一个月中第几周的周几2 (second Wed. in July)
w一年中第几周40
W一个月中第几周1
aA.M./P.M. 标记PM
k一天中的小时(1~24)24
K A.M./P.M. (0~11)格式小时10
z时区Eastern Standard Time
'文字定界符Delimiter
"单引号`

使用printf格式化日期

printf 方法可以很轻松地格式化时间和日期。使用两个字母格式,它以 %t 开头并且以下面表格中的一个字母结尾。

  • %tY:输出四位数的年份,例如:2023
  • %ty:输出两位数的年份,例如:23
  • %tm:输出两位数的月份,例如:02
  • %tB:输出月份的全名,例如:February
  • %tb:输出月份的缩写,例如:Feb
  • %tA:输出星期的全名,例如:Wednesday
  • %ta:输出星期的缩写,例如:Wed
  • %td:输出两位数的日期,例如:24
  • %te:输出一位或两位数的日期,例如:24 或 02
  • %tH:输出24小时制的小时数,例如:23
  • %tI:输出12小时制的小时数,例如:11
  • %tM:输出分钟数,例如:45
  • %tS:输出秒数,例如:30
  • %tp:输出上午还是下午,例如:AM 或 PM
  • %tZ:输出时区,例如:GMT+08:00
  • 转换符

    说明

    示例

    %tc

    包括全部日期和时间信息

    星期六 十月 27 14:21:20 CST 2007

    %tF

    "年-月-日"格式

    2007-10-27

    %tD

    "月/日/年"格式

    10/27/07

    %tr

    "HH:MM:SS PM"格式(12时制)

    02:25:51 下午

    %tT

    "HH:MM:SS"格式(24时制)

    14:28:16

    %tR

    "HH:MM"格式(24时制)

    14:28

6math类

Number & Math 类方法

下面的表中列出的是 Number & Math 类常用的一些方法:

序号方法与描述
1xxxValue()
将 Number 对象转换为xxx数据类型的值并返回。
2compareTo()
将number对象与参数比较。
3equals()
判断number对象是否与参数相等。
4valueOf()
返回一个 Number 对象指定的内置数据类型
5toString()
以字符串形式返回值。
6parseInt()
将字符串解析为int类型。
7abs()
返回参数的绝对值。
8ceil()
返回大于等于( >= )给定参数的的最小整数,类型为双精度浮点型。
9floor()
返回小于等于(<=)给定参数的最大整数 。
10rint()
返回与参数最接近的整数。返回类型为double。
11round()
它表示四舍五入,算法为 Math.floor(x+0.5),即将原来的数字加上 0.5 后再向下取整,所以,Math.round(11.5) 的结果为12,Math.round(-11.5) 的结果为-11。
12min()
返回两个参数中的最小值。
13max()
返回两个参数中的最大值。
14exp()
返回自然数底数e的参数次方。
15log()
返回参数的自然数底数的对数值。
16pow()
返回第一个参数的第二个参数次方。
17sqrt()
求参数的算术平方根。
18sin()
求指定double类型参数的正弦值。
19cos()
求指定double类型参数的余弦值。
20tan()
求指定double类型参数的正切值。
21asin()
求指定double类型参数的反正弦值。
22acos()
求指定double类型参数的反余弦值。
23atan()
求指定double类型参数的反正切值。
24atan2()
将笛卡尔坐标转换为极坐标,并返回极坐标的角度值。
25toDegrees()
将参数转化为角度。
26toRadians()
将角度转换为弧度。
27random()
返回一个随机数。

Math 的 floor,round 和 ceil 方法实例比较

参数Math.floorMath.roundMath.ceil
1.4112
1.5122
1.6122
-1.4-2-1-1
-1.5-2-1-1
-1.6-2-2-1

三:容器

Java容器类是java提供的工具包,包含了常用的数据结构:集合、链表、队列、栈、数组、映射等。

Java容器主要可以划分为4个部分:List列表Set集合Map映射工具类Iterator迭代器、Enumeration枚举类、Arrays和Collections)

List:特定顺序保存一组数据。

Set:集合;不允许有重复的数据。

Queue:队列:在一端插入数据,一端弹出数据。

Map:关联数据,字典。存储一组(Key-Value)值。

区别:

List:可以存储重复数组,基于数组或者链表实现。

Set:不可以存储重复元素,基于Map实现。

Map:键值对方式存储,存储的键的不能重复,基于哈希表或者红黑色实现

容器详解https://blog.csdn.net/qq_43969123/article/details/105804956容器详解https://zhuanlan.zhihu.com/p/122388665

容器详解https://blog.csdn.net/qq_39273039/article/details/108197401


四泛型

泛型是在jdk 1.5中推出的,其主要目的是可以建立具有类型安全的集合框架,如链表,散列映射等数据结构。

泛型类声明:可以使用class 名称<泛型列表>声明一个类,为了和普通的类有所区别,这样声明的类称作泛型类。

class Cone<E>{
   double height;
   E bottom;
public Cone  (E b){
     bottpm=b;
       }
}

`Java泛型的主要目的是可以建立具有类型安全的数据结构,如链表,散列表等数据结构,最重要的一个优点就是:在使用这些泛型类建立的数据结构时,不必进行强制类型转换,即不要求进行运行时的类型检查。jdk1.5是支持泛型的编译器。它将运行时的类型检查提前到了编译时执行,使得代码更安全。Java推出泛型的主要目的是为了建立具有类型安全的数据结构。

java 中泛型标记符:

  • E - Element (在集合中使用,因为集合中存放的是元素)
  • T - Type(Java 类)
  • K - Key(键)
  • V - Value(值)
  • N - Number(数值类型)
  •  - 表示不确定的 java 类型

泛型讲解https://www.runoob.com/java/java-generics.html

泛型超级详解https://blog.csdn.net/qq_41701956/article/details/123473592

 推荐两个课程

  【Java300集】全新的Java300集来啦!java零基础小白自学Java必备优质教程

【Java入门】Java零基础入门必看!Java常用类视频教程_JavaSE_Java基础教程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值