Java程序设计 课件 冯鲲 项目8-16 异常处理- 开发企业管理系统_第1页
Java程序设计 课件 冯鲲 项目8-16 异常处理- 开发企业管理系统_第2页
Java程序设计 课件 冯鲲 项目8-16 异常处理- 开发企业管理系统_第3页
Java程序设计 课件 冯鲲 项目8-16 异常处理- 开发企业管理系统_第4页
Java程序设计 课件 冯鲲 项目8-16 异常处理- 开发企业管理系统_第5页
已阅读5页,还剩423页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java程序设计语言概述8.1异常处理与异常类8.1异常处理与异常类

在Java程序设计中,异常处理是一种用于处理程序运行时可能出现的错误和异常情况的机制。通过异常处理,可以捕获和处理错误,从而提高程序的健壮性和可靠性。01try

catch语句01try

catch语句

在Java中,异常处理是程序设计中非常重要的一部分。异常是指程序运行过程中出现的不正常情况,例如试图访问数组的非法索引、试图打开一个不存在的文件等。为了处理这些异常情况,Java提供了异常处理机制,其中最核心的就是try-catch语句。try-catch的语法结构如下:try{//可能会抛出异常的代码}catch(ExceptionType1e1){//处理ExceptionType1类型异常的代码}catch(ExceptionType2e2){//处理ExceptionType2类型异常的代码}finally{//不管是否发生异常,都会执行的代码}01try

catch语句主要用于包裹可能会抛出异常的代码。如果在try块中发生了异常,程序会中断try块的执行,并跳转到catch块进行处理。是可选的,无论是否发生异常,finally块中的代码都会被执行。通常用于释放资源,如关闭文件流、数据库连接等。主要用于捕获并处理异常。每个catch块都对应一个特定类型的异常,当try块中抛出的异常类型与catch块中的异常类型匹配时,就会执行该catch块中的代码。可以有多个catch块来处理不同类型的异常。try语句块catch语句块finally语句块01try

catch语句在下面这段代码中,通过try-catch语言块,处理数学计算错误的异常:publicclassTryCatchExample{publicstaticvoidmain(String[]args){try{intresult=10/0;//这里会抛出ArithmeticException异常}catch(ArithmeticExceptione){System.out.println("发生了算术异常:"+e.getMessage());}finally{System.out.println("finally块被执行");}}}运行之后的结果为:发生了算术异常:/byzerofinally块被执行

在上述代码中,try块中尝试进行除以零的操作,这会抛出ArithmeticException异常。catch块捕获到了该异常,并打印出了异常信息。最后,finally块被执行,打印出了一条消息。02常用异常类02常用异常类Java提供了许多内置的异常类,这些异常类都继承自Throwable类。根据异常的性质,异常类可以分为两大类:Error类和Exception类。02常用异常类Error类Error类是Throwable的子类,用于表示程序运行过程中出现的严重错误。这些错误通常是由于系统资源不足、JVM错误或其他不可恢复的问题引起的。

与Exception不同,Error通常不需要程序员显式捕获或处理,因为它们表明程序已经处于不可恢复的状态。这些错误通常是无法恢复的,程序也无法对其进行处理。以下是一些常见的Error类及其描述:02常用异常类

这是Error的一个子类,表示与虚拟机相关的错误。以下是一些常见的子类:(1)OutOfMemoryError:它表示JVM内存不足,无法分配更多内存。一般在程序中存在内存泄漏的时候,或者程序试图分配的内存超过了JVM的最大堆大小的时候会引该错误。例如:运行此代码时,JVM的堆内存会被逐渐填满,最终抛出OutOfMemoryError。publicclassOutOfMemoryErrorExample{publicstaticvoidmain(String[]args){List<Object>list=newArrayList<>();while(true){list.add(newObject());}}}1.VirtualMachineError02常用异常类(2)StackOverflowError:

该错误类型表示线程的堆栈溢出,通常是由于递归调用过深导致的。比如递归函数没有正确的退出条件;程序逻辑错误导致无限递归等情况都会触发该错误。例如:运行此代码时,会抛出StackOverflowError。publicclassStackOverflowErrorExample{publicstaticvoidmain(String[]args){recursiveFunction();}publicstaticvoidrecursiveFunction(){recursiveFunction();//无限递归}}1.VirtualMachineError02常用异常类(3)NoClassDefFoundError:

该类型的错误表示在运行时无法找到某个类的定义。一般常见于类路径中缺少某个类;类加载器加载了错误的类;类在编译时存在,但在运行时被删除或移动等情况时会产生。例如:如果MyClass类在运行时不存在,会抛出NoClassDefFoundError。publicclassNoClassDefFoundErrorExample{publicstaticvoidmain(String[]args){MyClassmyClass=newMyClass();//假设MyClass类不存在}}1.VirtualMachineError02常用异常类

这是Error的一个子类,表示与类加载和链接相关的错误。以下是一些常见的子类:(1)IncompatibleClassChangeError:表示某个类在运行时与编译时的结构不一致。一般在类的继承关系或接口实现关系发生了变化;类的字段或方法被删除或修改时产生。运行此代码时,可能会抛出IncompatibleClassChangeError。publicclassIncompatibleClassChangeErrorExample{publicstaticvoidmain(String[]args){MyInterfacemyObject=newMyClass();myObject.method();//假设MyClass中没有实现method方法}}interfaceMyInterface{voidmethod();}classMyClass{//MyClass没有实现MyInterface的method方法}2.LinkageError02常用异常类(2)NoSuchFieldError:

表示在运行时无法找到某个字段。一般在字段在运行时被删除或重命名;类加载器加载了错误的类时会产生此类错误。例如:运行此代码时,会抛出NoSuchFieldError。publicclassNoSuchFieldErrorExample{publicstaticvoidmain(String[]args){MyClassmyClass=newMyClass();myClass.field=10;//假设MyClass中没有field字段}}classMyClass{//MyClass中没有定义field字段}2.LinkageError02常用异常类(3)NoSuchMethodError:

表示在运行时无法找到某个方法。一般常见于方法在运行时被删除或重命名;类加载器加载了错误的类等场景下产生。例如:运行此代码时,会抛出NoSuchMethodError。publicclassNoSuchMethodErrorExample{publicstaticvoidmain(String[]args){MyClassmyClass=newMyClass();myClass.method();//假设MyClass中没有method方法}}classMyClass{//MyClass中没有定义method方法}2.LinkageError02常用异常类

此类错误表示线程被终止。一般常见于调用了Thread.stop()方法(已废弃);或者线程被强制终止的情况。例如:运行此代码时,线程会被终止,并抛出ThreadDeath。publicclassThreadDeathExample{publicstaticvoidmain(String[]args){Threadt=newThread(()->{while(true){System.out.println("线程正在运行");}});t.start();t.stop();//强制终止线程}}3.ThreadDeath02常用异常类

这类错误表示断言失败。一般在使用了assert语句,并且断言条件为false时候产生。运行此代码时,会抛出AssertionError。publicclassAssertionErrorExample{publicstaticvoidmain(String[]args){intx=10;assertx==20:"x不等于20";//断言失败}}4.AssertionError02常用异常类5.UnknownError此类型表示未知的错误。一般常见于JVM内部错误或系统资源不足的情况。6.InternalError此类型表示JVM内部错误。一般常见于JVM的实现存在缺陷或者系统资源不足的情况。7.SecurityError此类型表示安全相关的错误。一般常见于安全策略限制,比如安全管理器拒绝了某个操作就会产生此类错误。Error类表示程序运行过程中出现的严重错误,通常是由系统或JVM的问题引起的,而不是程序逻辑错误。虽然Error通常不需要显式捕获,但在某些情况下,了解这些错误的类型和原因可以帮助我们更好地调试和优化程序。02常用异常类Exception类Exception类表示程序运行过程中可以被处理的异常。根据是否需要显式捕获,Exception类又可以分为两类:RuntimeException类和非RuntimeException类。

RuntimeException类:这些异常通常是由程序逻辑错误引起的,例如空指针异常、数组越界异常等。这类异常不需要显式捕获,但可以通过良好的编程习惯避免它们的发生。常见的RuntimeException包括:

NullPointerException:表示试图访问一个空对象的成员。

ArrayIndexOutOfBoundsException:表示数组索引越界。

ArithmeticException:表示算术运算异常,如除以零。02常用异常类下面这段代码通过try-catch语句块捕获了算术异常。publicclassUncheckedExample{publicstaticvoidmain(String[]args){try{intresult=10/0;}catch(ArithmeticExceptione){System.out.println("算术异常:"+e.getMessage());}}}02常用异常类

非RuntimeException类:这些异常通常是由外部环境或资源引起的,例如文件找不到、网络连接失败等。这类异常需要显式捕获。常见的非RuntimeException包括:

IOException:表示输入输出异常,例如文件找不到、文件读写错误等。

SQLException:表示数据库操作异常。

ClassNotFoundException:表示找不到指定的类。下面这段代码通过try-catch语句块捕获了文件未找到的异常。publicclassCheckedExample{publicstaticvoidmain(String[]args){try{FileReaderfileReader=newFileReader("nonexistentfile.txt");}catch(FileNotFoundExceptione){System.out.println("文件未找到:"+e.getMessage());}}}03自定义异常类02常用异常类

如果Java内置的异常类无法完全满足需求,可以自定义异常类。自定义异常类需要继承自Exception类或其子类。自定义异常类的步骤有:1.首先,定义一个类,并使其继承自Exception类或其子类。2.接着,在类中可以添加构造方法、成员变量和方法等。通常会提供多个构造方法,以便在抛出自定义异常时可以传递不同的信息。例如:

Exception类是Java异常处理的基石,强制开发者对可恢复的错误进行显式管理。通过合理使用其子类(如自定义异常)和区分检查型与非检查型异常,可以构建健壮且清晰的错误处理机制。classInvalidAgeExceptionextendsException{publicInvalidAgeException(Stringmessage){super(message);}}publicclassCustomExceptionExample{publicstaticvoidmain(String[]args){try{intage=-5;if(age<0){thrownewInvalidAgeException("年龄不能为负数");}}catch(InvalidAgeExceptione){System.out.println("捕获到自定义异常:"+e.getMessage());}}}04项目演练04项目演练项目名称:食品安全智能溯源系统场景设计:某市市场监管局推出食品安全溯源系统,要求所有食品生产企业接入。系统要求:1.信息不可篡改:食品批次信息(生产日期、原料来源)一旦登记永久锁定2.全链路检测:从生产到销售各环节触发质量验证3.社会共治:企业自检、政府抽检、消费者监督三端协同04项目演练1.定义食品基类publicclassFood{privatefinalStringbatchNo;//生产批号(就像身份证号)privatefinalStringproduceDate;//生产日期(不可修改)publicFood(StringbatchNo,Stringdate){this.batchNo=batchNo;duceDate=date;}//质量检测(企业责任)publicvoidqualityCheck()throwsFoodException{if(isExpired()){//自动计算是否过期thrownewExpiredException(this);}}privatebooleanisExpired(){//假设生产日期超过30天算过期returndaysSinceProduce()>30;}}04项目演练2.自定义异常类//过期异常(红色警报)classExpiredExceptionextendsFoodException{ExpiredException(Foodfood){super(food.batchNo+"批次食品已过期!立即下架");}}//添加剂异常(黄色警告)classAdditiveExceptionextendsFoodException{AdditiveException(Stringname){super("检测到违规添加剂:"+name+"!禁止销售");}}04项目演练//牛奶类publicclassMilkextendsFood{publicMilk(StringbatchNo,Stringdate){super(batchNo,date);}@OverridepublicvoidqualityCheck()throwsFoodException{super.qualityCheck();//先检查是否过期

//额外检测三聚氰胺(假设5%不合格率)if(detectMelamine()){thrownewAdditiveException("三聚氰胺");}}privatebooleandetectMelamine(){returnMath.random()<0.05;}}//牛奶类publicclassMilkextendsFood{publicMilk(StringbatchNo,Stringdate){super(batchNo,date);}@OverridepublicvoidqualityCheck()throwsFoodException{super.qualityCheck();//先检查是否过期

//额外检测三聚氰胺(假设5%不合格率)if(detectMelamine()){thrownewAdditiveException("三聚氰胺");}}privatebooleandetectMelamine(){returnMath.random()<0.05;}}3.食品检测类04项目演练publicclassMarket{publicstaticvoidmain(String[]args){//超市进货牛奶Milkmilk=newMilk("A2023","2023-09-01");

try{milk.qualityCheck();System.out.println("✅

牛奶可上架销售");}catch(ExpiredExceptione){System.out.println("🚫

紧急下架:"+e.getMessage());}catch(AdditiveExceptione){System.out.println("⚠️

企业整改:"+e.getMessage());}//消费者扫码举报Vegetablecabbage=newVegetable("V0905","2023-09-05");try{cabbage.qualityCheck();}catch(FoodExceptione){System.out.println("👮

监管介入:"+e.getMessage());System.out.println("📱

您已获得举报奖励10元");}}}4.主程序TransportSystem.java05小结05小结

本章深入探讨了Java中的异常处理机制,介绍了异常类的体系结构,包括Error和Exception的分类,以及它们的子类,还介绍了Java中常用的异常类,并通过示例展示了如何自定义异常类以满足特定需求。通过这些内容的学习,读者可以掌握如何有效地处理程序中的异常情况,从而编写出更加健壮、稳定且易于维护的代码。感谢观看Java程序设计语言概述8.2String与StringBuffer类8.2String与StringBuffer类

在Java程序设计中,常用类是开发者日常工作中不可或缺的重要工具。它们是Java标准库的一部分,提供了丰富的功能,用于处理各种常见的编程任务,如字符串操作、数据格式化、数学计算、日期时间处理、随机数生成等。这些类的高效使用能够极大地简化代码编写过程,提高开发效率,并确保程序的稳定性和可读性。01String类01String类

在Java编程中,String类是使用最频繁的类之一。它用于表示和处理文本数据,提供了丰富的字符串操作功能,包括字符串的创建、拼接、查找、替换、格式化等。String类的设计非常灵活且功能强大,是每个Java开发者都必须熟练掌握的工具。01String类

String对象在内存中以字符数组的形式存储,具有较高的存储效率。

由于String对象不可变,因此它是线程安全的,可以在多线程环境中安全使用。

String对象一旦创建,其内容就无法修改。每次对字符串进行修改操作时,实际上都会创建一个新的String对象。不可变性线程安全存储效率1.String类的特点01String类2.创建String对象‌String类提供了多种方式来创建字符串对象:1.直接量创建:使用双引号直接创建字符串对象。例如:Stringstr1="Hello,World!";2.通过构造器函数创建:使用String类的构造器创建字符串对象。例如:Stringstr2=newString("Hello,World!");注意:虽然两种方式都可以创建字符串,但直接量方式会优先使用字符串常量池中的对象,而构造器方式总是会创建一个新的对象。=、<<=、>>=、>>>=、&=、|=、^=。01String类StringBuildersb=newStringBuilder();sb.append("Hello");sb.append("");sb.append("World");Stringresult=sb.toString();//"HelloWorld"Stringstr1="Hello";Stringstr2="World";Stringresult=str1+""+str2;//"HelloWorld"Stringstr1="Hello";Stringstr2="World";Stringresult=str1.concat("").concat(str2);//"HelloWorld"(2)使用String.concat()方法:(3)使用StringBuilder或StringBuffer(1)使用+运算符3.字符串的拼接:字符串拼接是常见的操作,String类提供了多种方式来实现。例如:01String类4.字符串的查找与比较:String类提供了多种方法用于查找和比较字符串:(2)检查子串是否存在booleancontains=str.contains("World");//返回true或false(1)查找字符或子串的位置:Stringstr="Hello,World!";intindex=str.indexOf("World");//返回子串的起始索引,如果未找到返回-1(3)比较字符串使用equals()方法比较字符串内容是否相等:Stringstr1="Hello";Stringstr2="hello";booleanisEqual=str1.equals(str2);//false使用equalsIgnoreCase()方法忽略大小写比较booleanisEqualIgnoreCase=str1.equalsIgnoreCase(str2);//true01String类String类提供了format()方法,用于格式化字符串,类似于printf功能:Stringformatted=String.format("Hello,%s!Youare%dyearsold.","John",30);System.out.println(formatted);//"Hello,John!Youare30yearsold."字符串的格式化

05String类提供了方法用于将字符串转换为大写或小写:Stringstr="Hello,World!";StringupperCase=str.toUpperCase();//"HELLO,WORLD!"StringlowerCase=str.toLowerCase();//"hello,world!"字符串的大小写转换06String类提供了split()方法,用于根据指定的分隔符分割字符串,例如:Stringstr="apple,banana,orange";String[]fruits=str.split(",");//["apple","banana","orange"] 字符串的分割0701String类String类提供了replace()方法,用于替换字符串中的字符或子串,例如:Stringstr="Hello,World!";Stringreplaced=str.replace("World","Java");//"Hello,Java!"字符串的替换08String类提供了trim()方法,用于去除字符串两端的空白字符,例如:Stringstr="Hello,World!";Stringtrimmed=str.trim();//"Hello,World!"字符串的替换09String类提供了substring()方法,用于提取字符串的子串,例如:Stringstr="Hello,World!";Stringsub=str.substring(7);//"World!"Stringsub2=str.substring(0,5);//"Hello"字符串的子串提取1001String类

String类是Java中非常重要的一个类,它提供了丰富的字符串操作功能,能够满足大多数文本处理的需求。通过掌握String类的各种方法,开发者可以高效地处理字符串,编写出更加简洁、高效的代码。02StringBuffer类02StringBuffer类

在Java编程中,StringBuffer类是一个非常重要的工具类,用于处理可变字符串。与String类不同,StringBuffer类是可变的,这意味着可以在创建对象后修改其内容。此外,StringBuffer类是线程安全的,适合在多线程环境中使用。02StringBuffer类StringBuffer类的特点

StringBuffer类的方法是同步的,即在多线程环境中可以安全地使用。线程安全

由于线程安全的特性,StringBuffer在单线程环境下的性能可能不如StringBuilder(StringBuilder是StringBuffer的非线程安全版本,性能更高)。性能

StringBuffer对象的内容可以被修改,这使得它在处理大量字符串拼接时比String类更高效。可变性02StringBuffer类1.无参构造器:2.带初始字符串的构造器:StringBuffer类提供了多种构造方法来创建对象创建一个空的StringBuffer对象。例如:StringBuffersb1=newStringBuffer();2.创建一个包含指定字符串的StringBuffer对象。StringBuffersb2=newStringBuffer("Hello,World!");02StringBuffer类StringBuffer类提供了丰富的字符串操作方法,以下是一些常用方法的介绍:01append():在StringBuffer对象的末尾追加指定的内容。StringBuffersb=newStringBuffer("Hello");sb.append(",World!");System.out.println(sb.toString());//输出:Hello,World!insert():在指定位置插入指定的内容。sb.insert(5,"Java");System.out.println(sb.toString());//输出:HelloJava,World!3.StringBuffer的常用方法02StringBuffer类3.StringBuffer的常用方法Stringstr=sb.toString();System.out.println(str);//输出:!aJ,,,,olleHtoString():将StringBuffer对象转换为字符串。sb.reverse();System.out.println(sb.toString());//输出:!aJ,,,,olleHreverse():反转StringBuffer对象中的内容。sb.replace(7,12,"Java");System.out.println(sb.toString());//输出:Hello,Java!replace():替换指定范围内的内容。sb.delete(5,10);System.out.println(sb.toString());//输出:Hello,World!delete():删除指定范围内的内容。0305020402StringBuffer类StringBuilder在单线程环境下的性能比StringBuffer更高,因为它没有线程安全的开销。根据需要可酌情增减文字,以便观者准确地理解您传达的思想StringBuffer是线程安全的,适合多线程环境;StringBuilder是非线程安全的,适合单线程环境。StringBuffer与String、StringBuilder的比较StringBuffer在处理大量字符串拼接时比String更高效,因为String每次拼接都会创建一个新的对象,而StringBuffer直接在原对象上修改。感谢观看Java程序设计语言概述8.3正则表达式8.3正则表达式

在Java中,正则表达式(RegularExpressions)是一种强大的文本模式匹配工具,广泛用于字符串的搜索、验证、替换等操作。在Java中,正则表达式通过java.util.regex包中的Pattern和Matcher类来实现。掌握正则表达式可以帮助开发者高效地处理复杂的文本数据。01正则表达式的基本概念01正则表达式的基本概念正则表达式是一种描述字符串模式的语法,用于匹配符合特定规则的字符串。以下是一些常见的正则表达式元字符和规则:.:匹配任意单个字符(除换行符外)。*:匹配前面的字符或子表达式零次或多次。+:匹配前面的字符或子表达式一次或多次。?:匹配前面的字符或子表达式零次或一次。^:匹配字符串的开始位置。$:匹配字符串的结束位置。[]:匹配括号内的任意一个字符。

[^...]:匹配不在括号内的任意一个字符。

():分组,用于捕获匹配的子字符串。

|:逻辑“或”操作,匹配多个表达式中的任意一个。

\d:匹配任意数字(等价于[0-9])。

\w:匹配任意字母或数字(等价于[a-zA-Z0-9_])。

\s:匹配任意空白字符(空格、制表符、换行符等)。01正则表达式的基本概念Java中的正则表达式实现Java通过java.util.regex包提供了对正则表达式的支持,主要包括以下两个类:

Pattern类:用于编译正则表达式,并生成一个Pattern对象。

Matcher类:用于对字符串进行匹配操作。01正则表达式的基本概念(1)字符串匹配使用Pattern.matches()方法检查字符串是否符合正则表达式。例如:importjava.util.regex.Pattern;publicclassRegexExample{publicstaticvoidmain(String[]args){Stringregex="^\\d{3}-\\d{2}-\\d{4}$";//匹配格式为123-45-6789的字符串Stringinput="123-45-6789";booleanisMatch=Pattern.matches(regex,input);System.out.println("是否匹配:"+isMatch);//输出:是否匹配:true}}3.正则表达式的常见操作01正则表达式的基本概念(2)查找子字符串使用Matcher.find()方法在字符串中查找符合正则表达式的子字符串。importjava.util.regex.Pattern;importjava.util.regex.Matcher;publicclassRegexExample{publicstaticvoidmain(String[]args){Stringregex="\\bJava\\b";//匹配单词边界中的"Java"Stringinput="IloveJavaandJavaScript.";Patternpattern=Ppile(regex);Matchermatcher=pattern.matcher(input);while(matcher.find()){System.out.println("找到匹配的子字符串:"+matcher.group());}//输出:找到匹配的子字符串:Java}}3.正则表达式的常见操作01正则表达式的基本概念(3)替换子字符串使用String.replaceAll()方法或Matcher.replaceFirst()、Matcher.replaceAll()方法替换字符串中的内容。importjava.util.regex.Pattern;importjava.util.regex.Matcher;publicclassRegexExample{publicstaticvoidmain(String[]args){Stringregex="\\bJava\\b";//匹配单词边界中的"Java"Stringinput="IloveJavaandJavaScript.";Stringreplaced=input.replaceAll(regex,"Python");System.out.println("替换后的字符串:"+replaced);//输出:替换后的字符串:IlovePythonandJavaScript.}}3.正则表达式的常见操作01正则表达式的基本概念(4)分割字符串使用String.split()方法根据正则表达式分割字符串。publicclassRegexExample{publicstaticvoidmain(String[]args){Stringregex="\\s+";//匹配一个或多个空白字符Stringinput="Javaisfun";String[]words=input.split(regex);for(Stringword:words){System.out.println(word);}//输出://Java//is//fun}}3.正则表达式的常见操作01正则表达式的基本概念(5)捕获分组使用Matcher.group()方法捕获正则表达式中的分组内容。3.正则表达式的常见操作importjava.util.regex.Pattern;importjava.util.regex.Matcher;publicclassRegexExample{publicstaticvoidmain(String[]args){Stringregex="(\\d{4})-(\\d{2})-(\\d{2})";//匹配日期格式并捕获年、月、日Stringinput="2023-05-18";Patternpattern=Ppile(regex);Matchermatcher=pattern.matcher(input);if(matcher.find()){System.out.println("年:"+matcher.group(1));//输出:年:2023System.out.println("月:"+matcher.group(2));//输出:月:05System.out.println("日:"+matcher.group(3));//输出:日:18}}}01正则表达式的基本概念

正则表达式是Java中处理字符串的强大工具,通过Pattern和Matcher类可以实现字符串的匹配、查找、替换和分割等操作。掌握正则表达式的语法和常用操作,可以帮助开发者高效地处理复杂的文本数据。感谢观看Java程序设计语言概述8.4时间日期类8.4时间日期类

在Java中,时间与日期的处理是一个常见的需求,用于记录事件的时间、计算时间间隔、格式化日期等。Java提供了多种时间与日期类,从早期的java.util.Date到Java8引入的java.time包,这些类提供了丰富的功能来处理日期和时间。01java.util.Date类01java.util.Date类java.util.Date类是Java早期用于表示日期和时间的类。它表示一个具体的瞬间,精确到毫秒。虽然Date类在早期Java开发中被广泛使用,但它存在一些设计上的问题,例如线程不安全和易用性不足。使用方式如下:importjava.util.Date;publicclassDateExample{publicstaticvoidmain(String[]args){Datenow=newDate();System.out.println("当前时间:"+now);//输出:当前时间:FriApr2614:30:00CST2025}}02java.time包02java.time包Java8引入了java.time包,这是一个全新的日期和时间API,解决了java.util.Date类的许多问题。java.time包中的类是不可变的、线程安全的,并且提供了更丰富的功能。主要类有:

LocalDate:表示没有时间的日期(如2025-04-26)。

LocalTime:表示没有日期的时间(如14:30:00)。

LocalDateTime:表示日期和时间(如2025-04-26T14:30:00)。

ZonedDateTime:表示带时区的日期和时间。

Duration:表示两个日期时间之间的持续时间。

Period:表示日期之间的周期。02java.time包importjava.time.LocalDate;importjava.time.LocalDateTime;importjava.time.LocalTime;importjava.time.format.DateTimeFormatter;importjava.time.temporal.ChronoUnit;publicclassDateTimeExample{publicstaticvoidmain(String[]args){//获取当前日期和时间LocalDatetoday=LocalDate.now();LocalTimenow=LocalTime.now();LocalDateTimecurrent=LocalDateTime.now();System.out.println("当前日期:"+today);//输出:当前日期:2025-04-26System.out.println("当前时间:"+now);//输出:当前时间:14:30:00.123456使用场景System.out.println("当前日期和时间:"+current);//输出:当前日期和时间:2025-04-26T14:30:00.123456//格式化日期时间DateTimeFormatterformatter=DateTimeFormatter.ofPattern("yyyy-MM-ddHH:mm:ss");Stringformatted=current.format(formatter);System.out.println("格式化后的日期时间:"+formatted);//输出:格式化后的日期时间:2025-04-2614:30:00//计算日期时间的差值LocalDatestartDate=LocalDate.of(2023,9,1);longdaysBetween=ChronoUnit.DAYS.between(startDate,today);System.out.println("天数差:"+daysBetween);//输出:天数差:542}}03日期的计算03日期的计算java.time包提供了丰富的日期时间计算功能,例如计算两个日期之间的天数、月数或年数。例如:importjava.time.LocalDate;importjava.time.temporal.ChronoUnit;publicclassDateCalculation{publicstaticvoidmain(String[]args){LocalDatestartDate=LocalDate.of(2023,9,1);LocalDateendDate=LocalDate.of(2025,4,26);longdays=ChronoUnit.DAYS.between(startDate,endDate);longmonths=ChronoUnit.MONTHS.between(startDate,endDate);longyears=ChronoUnit.YEARS.between(startDate,endDate);System.out.println("天数差:"+days);//输出:天数差:542System.out.println("月数差:"+months);//输出:月数差:19System.out.println("年数差:"+years);//输出:年数差:1}}04日期时间的格式化04日期时间的格式化java.time包提供了强大的日期时间格式化功能,通过DateTimeFormatter类可以自定义日期时间的格式。importjava.time.LocalDate;importjava.time.LocalDateTime;importjava.time.format.DateTimeFormatter;publicclassDateTimeFormat{publicstaticvoidmain(String[]args){LocalDateTimenow=LocalDateTime.now();

DateTimeFormatterformatter=DateTimeFormatter.ofPattern("yyyy-MM-ddHH:mm:ss");Stringformatted=now.format(formatter);System.out.println("格式化后的日期时间:"+formatted);//输出:格式化后的日期时间:2025-04-2614:30:00}}05时区的处理04日期时间的格式化java.time包还支持时区处理,通过ZonedDateTime类可以方便地处理带时区的日期和时间。importjava.time.ZonedDateTime;importjava.time.ZoneId;publicclassTimeZoneExample{publicstaticvoidmain(String[]args){ZonedDateTimeutcTime=ZonedDateTime.now(ZoneId.of("UTC"));ZonedDateTimecstTime=utcTime.withZoneSameInstant(ZoneId.of("Asia/Shanghai"));System.out.println("UTC时间:"+utcTime);//输出:UTC时间:2025-04-26T06:30:00.123456Z[UTC]System.out.println("CST时间:"+cstTime);//输出:CST时间:2025-04-26T14:30:00.123456+08:00[Asia/Shanghai]}}感谢观看Java程序设计语言概述8.5math和random类8.5math和random类

Math类是Java标准库中的一个工具类,提供了丰富的数学运算方法,用于执行基本和复杂的数学计算。这些方法包括三角函数、指数运算、对数运算、四舍五入等。Math类中的所有方法都是静态的,可以直接通过类名调用。

Random类是Java标准库中的一个工具类,用于生成随机数。它提供了生成随机整数、浮点数、布尔值等的方法。Random类在模拟、游戏开发、数据生成等场景中非常有用。01Random类01Math类的特点

Math类中的所有方法都是静态的,可以直接通过Math类名调用,而无需创建对象。Math类的方法是线程安全的,可以在多线程环境中安全使用。

Math类提供了两个常用的数学常量:Math.PI(圆周率π)和Math.E(自然对数的底数e)。静态方法常量线程安全02常用方法02常用方法

1.基本数学运算

绝对值:Math.abs(x),返回参数的绝对值。

最大值:Math.max(x,y),返回两个参数中的最大值。

最小值:Math.min(x,y),返回两个参数中的最小值。

四舍五入:Math.round(x),返回最接近参数的整数。

向上取整:Math.ceil(x),返回大于或等于参数的最小整数。

向下取整:Math.floor(x),返回小于或等于参数的最大整数。代码如下所示:intabsValue=Math.abs(-10);//10intmaxValue=Math.max(10,20);//20intminValue=Math.min(10,20);//10longroundedValue=Math.round(10.6);//11doubleceilValue=Math.ceil(10.1);//11.0doublefloorValue=Math.floor(10.9);//10.002常用方法

2.三角函数

正弦:Math.sin(x),返回参数的正弦值。

余弦:Math.cos(x),返回参数的余弦值。

正切:Math.tan(x),返回参数的正切值。

反正切:Math.atan(x),返回参数的反正切值。应用场景如下:doublesinValue=Math.sin(Math.PI/2);//1.0doublecosValue=Math.cos(0);//1.0doubletanValue=Math.tan(Math.PI/4);//1.0doubleatanValue=Math.atan(1);//0.7853981633974483(即π/4)02常用方法

3.指数和对数

指数:Math.exp(x),返回e的x次幂。

自然对数:Math.log(x),返回参数的自然对数。

以10为底的对数:Math.log10(x),返回参数的以10为底的对数。应用场景如下::doubleexpValue=Math.exp(1);//2.718281828459045doublelogValue=Math.log(Math.E);//1.0doublelog10Value=Math.log10(100);//2.002常用方法4.指数和对数幂运算:Math.pow(x,y),返回x的y次幂。平方根:Math.sqrt(x),返回参数的平方根。doublepowValue=Math.pow(2,3);//8.0doublesqrtValue=Math.sqrt(16);//4.05.随机数随机数:Math.random(),返回一个0到1之间的随机浮点数。doublerandomValue=Math.random();//例如:0.12345678903Random类的特点04常用方法04常用方法

1.生成随机整数

无界随机整数:nextInt(),生成一个随机整数,范围是Integer.MIN_VALUE到Integer.MAX_VALUE。

有界随机整数:nextInt(intbound),生成一个随机整数,范围是0到bound-1。使用方式如下所示:importjava.util.Random;publicclassRandomExample{publicstaticvoidmain(String[]args){Randomrandom=newRandom();intrandomInt=random.nextInt();//生成一个无界的随机整数System.out.println("无界随机整数:"+randomInt);intrandomIntBound=random.nextInt(100);//生成一个0到99之间的随机整数System.out.println("有界随机整数(0到99):"+randomIntBound);}}04常用方法

2.生成随机浮点数

随机浮点数:nextDouble(),生成一个0到1之间的随机浮点数。

随机浮点数(指定范围):通过简单的数学运算可以生成指定范围的随机浮点数。示例代码如下:importjava.util.Random;publicclassRandomExample{publicstaticvoidmain(String[]args){Randomrandom=newRandom();doublerandomDouble=random.nextDouble();//生成一个0到1之间的随机浮点数System.out.println("随机浮点数(0到1):"+randomDouble);doublerandomDoubleRange=50+random.nextDouble()*50;//生成一个50到100之间的随机浮点数System.out.println("随机浮点数(50到100):"+randomDoubleRange);}}04常用方法3.生成随机布尔值随机布尔值:nextBoolean(),生成一个随机布尔值。例如:importjava.util.Random;publicclassRandomExample{publicstaticvoidmain(String[]args){Randomrandom=newRandom();booleanrandomBoolean=random.nextBoolean();//生成一个随机布尔值System.out.println("随机布尔值:"+randomBoolean);}}04常用方法4.生成随机字节数组随机字节数组:实用nextBytes(byte[]bytes),生成一个随机字节数组:publicclassRandomExample{publicstaticvoidmain(String[]args){Randomrandom=newRandom();byte[]randomBytes=newbyte[10];random.nextBytes(randomBytes);//填充随机字节数组System.out.print("随机字节数组:");for(byteb:randomBytes){System.out.print(b+"");}}}05设置种子值05设置种子值

可以通过构造器Random(longseed)设置种子值,相同的种子值会生成相同的随机数序列。应用代码如下:importjava.util.Random;publicclassRandomExample{publicstaticvoidmain(String[]args){Randomrandom1=newRandom(12345L);Randomrandom2=newRandom(12345L);System.out.println("随机数1:"+random1.nextInt(100));//输出:随机数1:75System.out.println("随机数2:"+random2.nextInt(100));//输出:随机数2:75}}06项目演练04项目演练项目名称:智能健康助手场景设计:这是一个命令行应用程序,用于帮助用户管理健康数据,包括体重、身高、运动记录等。系统支持以下功能:1.用户注册:输入基本信息(姓名、年龄、身高、体重等)。2.BMI计算:根据用户的身高和体重计算

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论