版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单元5面向对象常用类Java程序设计基础教程(AI助学)(慕课版)人民邮电出版社在当今数字化时代,编程不仅是一种技能,更是一把解锁无限可能的“钥匙”。在校园生活中可能会遇到日常课程表安排混乱、食堂排队等待时间过长、社团活动信息传递不畅等问题,这些琐碎的问题都可以通过编程来解决。例如,可以利用Java编写一款校园活动管理应用,实现活动信息的及时发布和参与者的有效管理,从而提高校园生活的便利性。本单元将介绍Java的发展和特点,讲解Java开发环境的搭建。通过系统学习和实践,读者将逐步掌握Java编程的基本技能,并能进行简单的应用开发。本章导读Thechapter’sintroduction目录导航5.1字符串类5.2包装类5.3
Random类5.4
Math类5.5日期和时间类5.6
【商业实例】“银行提款机”项目——转账手续费计算5.7
【综合实训】计算给定日期前/后指定天数的日期5.1.1String类String类是Java中的一个核心类,用于表示字符串。它是一个被final关键字修饰的类,因此无法被继承,而且具有不可变性,一旦创建,其值就不能再修改。String类的创建有两种方式,这两种方式初始化的逻辑有所不同,具体如表5.1所示。创建方式创建示例创建逻辑字符串字面量(固定值)Stringstr="Hello,World!";首先检查字符串池中是否存在内容相同的字符串,如果存在,则直接返回对该字符串的引用;如果不存在,则创建一个新的字符串,并将其放入字符串池中new关键字Stringstr1=newString("Hello,World!");JVM会在堆内存中创建一个新的字符串对象,不论字符串池中是否存在相同的字符串表5.1字符串的创建方式字符串字面量创建方式(Stringstr="Hello,World!";)会检查字符串池,若存在相同字符串,则复用其引用,否则创建新字符串并将其放入字符串池中。5.1.1String类使用new关键字创建String对象时,即使它们的内容相同,使用“==”比较也会返回false,因为“==”比较的是内存地址,而new关键字每次都会在堆内存中创建新的对象,但地址不同。而当比较两个直接赋值创建的相同内容的String对象时,会返回true,因为它们引用的是字符串池中的同一对象。字符串的创建方式如图5.1所示。图5.1字符串的创建方式5.1.1String类1.String类简介String类具有不可变性,一旦创建便不可更改,这确保了线程安全。字符串比较应使用equals()方法而非“==”运算符,因为“==”比较的是引用而非内容。String类支持格式化操作,可插入变量值。(1)不可变性Strings="Hello";s=s+"World";/*这里并不是改变了s,而是创建了一个新的String对象,并将它的引用给s*/字符串一旦被创建,其值就不能再修改。任何对字符串的操作都会返回一个新的字符串对象,原始字符串对象保持不变。5.1.1String类(2)字符串池Strings1="Hello";Strings2="Hello";System.out.println(s1==s2);/*输出true,因为s1和s2指向的是字符串池中的同一个对象*/为了提高性能和减少内存使用,Java会将编译期间已知的字符串存储在一个称为字符串池的特殊区域中。当创建一个字符串常量(使用双引号创建)时,Java会先在字符串池中查找是否已经存在相同内容的字符串。如果存在,则会直接返回这个字符串的引用;如果不存在,则会在字符串池中创建一个新的字符串。5.1.1String类(3)字符串比较Strings1=newString("Hello");Strings2=newString("Hello");System.out.println(s1==s2);//输出false,因为s1和s2指向的是两个不同的对象System.out.println(s1.equals(s2));//输出true,因为s1和s2的内容是相同的字符串的比较应该使用equals()方法而不是使用“==”运算符。equals()方法比较的是字符串的内容,而“==”运算符比较的是对象的引用。5.1.1String类(4)支持字符串格式化Stringname="Alice";intage=30;StringformattedString=String.format("Name:%s,Age:%d",name,age);//输出"Name:Alice,Age:30"String类支持使用“%”符号进行字符串格式化,可以插入变量值到字符串中。(5)性能优化StringBuildersb=newStringBuilder();sb.append("Hello");sb.append("World");Stringresult=sb.toString();//"HelloWorld"由于String类具有不可变性,频繁的字符串拼接操作会生成大量中间字符串,造成性能问题。为了避免这个问题,可以使用StringBuilder类,它是一个可变的字符串类,提供了高效的字符串操作方法。5.1.1String类2.String类的常用方法方法功能length()返回字符串的长度charAt(intindex)返回字符串中指定位置的字符substring(intbeginIndex,intendIndex)返回字符串的一个子串contains(CharSequencesequence)检查字符串是否包含指定的字符序列indexOf(Stringstr)返回指定子串在字符串中首次出现的索引lastIndexOf(Stringstr)返回指定子串在字符串中最后出现的索引startsWith(Stringprefix)检查字符串是否以指定的前缀开始endsWith(Stringsuffix)检查字符串是否以指定的后缀结束equals(ObjectanObject)比较字符串和指定对象是否相等equalsIgnoreCase(StringanotherString)比较字符串和指定字符串是否相等,忽略字母大小写replace(charoldChar,charnewChar)返回新字符串,由新字符替换旧字符得到split(Stringregex)根据指定的正则表达式分割字符串toUpperCase()返回由字符串转换为大写字母后得到的新字符串toLowerCase()返回由字符串转换为小写字母后得到的新字符串trim()返回去除了前后空格的字符串concat(Stringstr)将指定字符串连接到此字符串的末尾isEmpty()检查字符串长度是否为0matches(Stringregex)告知此字符串是否匹配给定的正则表达式valueOf(Objectobj)返回Object参数的字符串表示形式format(Stringformat,Object...args)返回一个格式化字符串,使用指定的格式字符串和参数5.1.2StringBuilder类StringBuilder类是Java中用于处理可变字符串的类,它属于java.lang包。其主要特性如下。StringBuilder类是可变的。这意味着可以修改StringBuilder对象的内容,而无须创建新的对象。这在进行大量的字符串操作时非常有用,因为可以减少内存占用和提高性能。可变性01每次对String对象进行修改(如拼接、插入、删除等)时,Java都会创建一个新的String对象。性能更好02StringBuilder类的许多方法(如append()、insert()方法等)都返回StringBuilder对象本身,这意味着可以将这些方法的调用链接在一起,形成一条链。链式调用03虽然StringBuilder类的性能优于String类,但它是线程不安全的,这意味着在多线程环境中,如果没有正确同步,则可能会导致问题。线程不安全045.1.2StringBuilder类为了更清楚地表达StringBuilder类的操作方式及优缺点,下面使用长度为11的格子来存放字符串。StringBuildersb=newStringBuilder();sb.append("Hello");sb.append("Java");sb.replace(5,9,"World");sb.insert(5,"");5.1.3StringBuffer类在Java中,StringBuffer类与StringBuilder类非常相似,它们都是用于对字符串进行操作的可变类。实际上,这两个类共享了许多方法,如append()、insert()、reverse()、delete()方法等。它们最主要的区别在于StringBuffer类是线程安全的,而StringBuilder类不是。这意味着在多线程环境中,如果多个线程同时修改StringBuffer对象,则其仍然会保持完整性。这是因为StringBuffer类的大部分方法是同步的,也就是说,任何时候只有一个线程可以执行这些方法。5.1.3StringBuffer类publicclassMain{publicstaticvoidmain(String[]args){StringBuffersb=newStringBuffer("Hello");//使用append()方法
sb.append("World");//sb现在是"HelloWorld"//使用insert()方法
sb.insert(6,"Java");//sb现在是"HelloJavaWorld"//使用delete()方法
sb.delete(6,11);//sb现在是"HelloWorld"//使用reverse()方法
sb.reverse();//sb现在是"dlroWolleH"//使用length()方法
intlen=sb.length();//len现在是"11"//使用toString()方法
Strings=sb.toString();//s现在是"dlroWolleH"System.out.println(s);}}以下是StringBuffer类中相关方法的使用示例。5.1.3StringBuffer类StringBuilder类与StringBuffer类的比较如表5.3所示。类线程安全问题性能StringBuilderStringBuilder类是非线程安全的,它的方法没有同步修饰符,因此在多线程环境下使用时需要手动处理同步问题StringBuilder类的性能比StringBuffer类更好,因为它不进行同步操作StringBufferStringBuffer类是线程安全的,所有的方法都是同步的(synchronized)由于是线程安全的,StringBuffer类的性能相对较差表5.3StringBuilder类与StringBuffer类的比较如果应用程序是多线程的,需要在多线程环境下安全地进行字符串操作,那么需要使用StringBuffer类。如果应用程序是单线程的,或者能确保在多线程环境下自行处理同步问题,那么需要使用StringBuilder类,它具有更好的性能。目录导航5.1字符串类5.2包装类5.3
Random类5.4
Math类5.5日期和时间类5.6
【商业实例】“银行提款机”项目——转账手续费计算5.7
【综合实训】计算给定日期前/后指定天数的日期5.2包装类包装类是Java中的一组类,用于将基本数据类型转换为对象。在Java中,基本数据类型(如int、float、char等)不是对象,它们是直接存储值的。但是,有时候需要在对象上执行特定的操作(如将基本数据类型放入集合中,并将其传递给方法),这时就需要使用包装类。基本数据类型包装类包装类占用字节长度intInteger16字节longLong24字节doubleDouble24字节floatFloat16字节charCharacter16字节booleanBoolean16字节byteByte16字节shortShort16字节表5.4常用包装类基本数据类型的应用范围有限,特定场景下只能使用引用数据类型,如在一个List中存放值的时候,其中只能存放引用数据类型,只能使用包装类的数据类型,不能使用基本数据类型01基本数据类型通常有默认值,当初始化一个基本数据类型的变量时,系统会自动赋予其对应的默认值025.2包装类包装类的作用如下。5.2.1基本数据类型与包装类的转换1.自动装箱和自动拆箱自动装箱和自动拆箱是Java5及以后的版本引入的特性,允许基本数据类型和包装类之间进行自动转换。自动装箱:将基本数据类型自动转换为对应的包装类。示例代码如下intintValue=42;IntegerintegerValue=intValue;//自动装箱自动拆箱:将包装类自动转换为对应的基本数据类型。示例代码如下IntegerintegerValue=42;intintValue=integerValue;//自动拆箱5.2.1基本数据类型与包装类的转换2.手动装箱和手动拆箱手动装箱和手动拆箱是使用包装类的构造方法(构造器)和对应的取值方法手动进行转换。手动装箱示例代码如下。intintValue=42;IntegerintegerValue=Integer.valueOf(intValue);//手动装箱手动拆箱示例代码如下。IntegerintegerValue=Integer.valueOf(42);intintValue=integerVValue();//手动拆箱5.2.2基本数据类型、字符串、包装类之间的转换1.基本数据类型转换为字符串基本数据类型转换为字符串可以通过使用String类的valueOf()方法实现。intintValue=42;StringstringValue=String.valueOf(intValue);也可以通过使用String类的concatenation(字符串拼接)实现。intintValue=42;StringstringValue=intValue+"";//将int类型的值与空字符串相加即可转换为字符串5.2.2基本数据类型、字符串、包装类之间的转换2.字符串转换为基本数据类型字符串转换为基本数据类型可以通过使用包装类的parseXxx()方法实现。StringstringValue="42";intintValue=Integer.parseInt(stringValue);注意:当字符串无法被解析为有效的基本数据类型(如字符串是"abc"而不是一个有效的数字)时,使用parseInt()等方法会抛出NumberFormatException。因此,在进行字符串到基本数据类型的转换时,需要确保字符串是可以被正确解析的。5.2.2基本数据类型、字符串、包装类之间的转换3.String、Integer、int3种类型的相互转换(1)String到Integer和int的转换Stringstr="123";IntegerintegerNum=Integer.valueOf(str);//String到Integer的转换intintNum=Integer.parseInt(str);//Integer到int的转换Integer.valueOf()和Integer.parseInt()方法都可以将字符串转换为整数。(2)Integer和int到String的转换IntegerintegerNum=123;intintNum=123;StringstrFromInteger=Integer.toString(integerNum);/*Integer到String的转换*/StringstrFromInt=Integer.toString(intNum);//int到String的转换Integer.toString()方法可以将Integer对象或int类型的对象转换为字符串。5.2.2基本数据类型、字符串、包装类之间的转换(3)int到Integer的转换和Integer到int的转换intintNum=123;IntegerintegerNum=intNum;//int到Integer的转换(自动装箱)IntegerintegerNum1=Integer.parseInt(intNum);//int到Integer的转换(自动装箱)intintNum2=integerNum;//Integer到int的转换(自动拆箱)String可以通过Integer.valueOf()方法或Integer.valueOf().intValue()静态方法转换为Integer或int;Integer可以通过String.valueOf()方法转换为String,或自动拆箱为int。int作为基本数据类型,不能直接转换为String或Integer,但可以通过Integer.valueOf()方法包装为Integer对象,或通过String.valueOf()方法转换为String。目录导航5.1字符串类5.2包装类5.3
Random类5.4
Math类5.5日期和时间类5.6
【商业实例】“银行提款机”项目——转账手续费计算5.7
【综合实训】计算给定日期前/后指定天数的日期5.3Random类当涉及在程序中生成随机数时,java.util.Random类是一个非常有用的工具。它提供了一种生成伪随机数的方法,能够满足大多数情况下的需求。下面使用Random类来生成一个0~99内的随机数。publicstaticvoidmain(String[]args){//创建Random对象
Randomrandom=newRandom();//生成一个0~99内的随机数
intx=random.nextInt(100);System.out.println("生成的随机数为:"+x);}运行以上代码两次,输出结果分别如图5.3和图5.4所示。图5.3第一次运行的输出结果图5.4第二次运行的输出结果5.3Random类1.创建Random对象要想使用Random类,首先需要创建一个Random对象。示例代码如下。Randomrandom=newRandom();2.生成整数Random类可以生成不同范围内的整数。示例代码如下。//nextInt():生成一个伪随机的整数intrandomNumber=random.nextInt();//nextInt(intbound):生成一个0(包含)到bound(不包含)之间的整数intrandomNumberInRange=random.nextInt(100);//生成0~99中的整数5.3Random类3.生成浮点数和双精度浮点数生成浮点数和双精度浮点数的方法如下。//nextFloat():生成伪随机的浮点数[取值为0.0(包含)到1.0(不包含)]floatrandomFloat=random.nextFloat();//nextDouble():生成伪随机的双精度浮点数[取值为0.0(包含)到1.0(不包含)]doublerandomDouble=random.nextDouble();4.生成布尔值nextBoolean():随机生成一个伪随机的布尔值。示例代码如下。booleanrandomBoolean=random.nextBoolean();5.3Random类5.设置初始值使用相同的初始值,可以生成相同的随机数序列。这在某些情况下可能非常有用,如在调试期间需要使用可重现的随机数序列。random.setSeed(1234);//设置初始值intrandomNumber=random.nextInt();//生成基于初始值的随机整数Random类的灵活性和易用性使得它成为在Java应用程序中生成随机数的首选。在编写涉及随机性的程序时,使用Random类能够为程序引入足够的随机性,同时使得程序具备可控制性。目录导航5.1字符串类5.2包装类5.3
Random类5.4
Math类5.5日期和时间类5.6
【商业实例】“银行提款机”项目——转账手续费计算5.7
【综合实训】计算给定日期前/后指定天数的日期5.4.1基本运算方法在日常运算中,基本运算方法经常被用到。以下是Java中常用的几个基本运算方法。intsum=Math.addExact(10,20);//结果是30intdiff=Math.subtractExact(10,20);//结果是-10intproduct=Math.multiplyExact(10,20);//结果是200示例代码如下。返回x和y的和,并在数值溢出时抛出异常addExact(intx,inty)返回x和y的差,并在数值溢出时抛出异常subtractExact(intx,inty)返回x和y的乘积,并在数值溢出时抛出异常multiplyExact(intx,inty)5.4.2幂运算和对数运算在数学运算中,经常会用到幂运算和对数运算方法,具体介绍如下。doublepower=Math.pow(2,3);//结果是8.0doublesqRoot=Math.sqrt(9);//结果是3.0doublecbRoot=Math.cbrt(8);//结果是2.0doublelogE=Math.log(Math.E);//结果是1.0doublelog10=Math.log10(100);//结果是2.0示例代码如下。返回a的b次方的值pow(doublea,doubleb)01返回a的平方根sqrt(doublea)02返回a的立方根cbrt(doublea)03返回a的自然对数(底数为e)log(doublea)04返回a的以10为底的对数log10(doublea)055.4.3三角函数和反三角函数的运算三角函数和反三角函数运算的应用场景相对较少,具体介绍如下。doublesinValue=Math.sin(Math.PI/2);//结果是1.0doublecosValue=Math.cos(Math.PI/2);//结果是接近0的小数doubletanValue=Math.tan(Math.PI/4);//结果是1.0doubleasinValue=Math.asin(1);//结果是1.5707963267948966,即π/2doubleacosValue=Math.acos(1);//结果是0.0doubleatanValue=Math.atan(1);//结果是0.7853981633974483,即π/4示例代码如下。返回角a(以弧度计)的正弦值sin(doublea)返回角a(以弧度计)的余弦值cos(doublea)返回角a(以弧度计)的正切值tan(doublea)返回值a的反正弦值,取值为-π/2到π/2asin(doublea)返回值a的反余弦值,取值为0.0到πacos(doublea)返回值a的反正切值,取值为-π/2到π/2atan(doublea)目录导航5.1字符串类5.2包装类5.3
Random类5.4
Math类5.5日期和时间类5.6
【商业实例】“银行提款机”项目——转账手续费计算5.7
【综合实训】计算给定日期前/后指定天数的日期5.5.1Date类1.获取当前的日期和时间Date类的无参构造方法可以创建一个表示当前日期和时间的Date对象。示例代码如下。DatecurrentDate=newDate();2.日期和时间的表示Date对象存储了自1970年1月1日00:00:00(UTC)以来的毫秒数。获取当前时间毫秒数的代码如下。longtime=currentDate.getTime();5.5.1Date类3.日期和时间的格式化与解析Date对象通常需要以特定格式显示,可以使用SimpleDateFormat类进行格式化与解析。示例代码如下。SimpleDateFormatdateFormat=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");StringformattedDate=dateFormat.format(currentDate);4.比较、计算日期和时间在Java中,可以比较两个Date对象的先后顺序,也可以对日期和时间进行加减操作。示例代码如下。DatefutureDate=...;//某个未来的日期booleanisAfter=futureDate.after(currentDate);//检查某个日期是否在当前日期之后longtimeDifference=futureDate.getTime()-currentDate.getTime();/*计算两个日期之间的毫秒数*/5.日期和时间操作的局限性Date类在处理日期和时间时存在一些问题。它不是线程安全的,且它的设计存在一些缺陷,因此在Java8及以后的版本中已经被弃用。5.5.2Instant类1.获取当前时间戳调用Instant.now()方法,可以获取当前的时间戳。示例代码如下。Instantnow=Instant.now();2.通过Epoch时间(秒或者毫秒)(1970-01-01T00:00:00ZUTC)创建Instant对象可以使用Instant.ofEpochSecond(longepochSecond)或者Instant.ofEpochMilli(longepochMilli)方法,直接通过Epoch时间(秒或者毫秒)来创建Instant对象。示例代码如下。//从1970-01-01T00:00:00Z开始的1000秒InstantfromEpochSecond=Instant.ofEpochSecond(1000);//从1970-01-01T00:00:00Z开始的1000毫秒InstantfromEpochMilli=Instant.ofEpochMilli(1000);3.获取Epoch时间(秒和纳秒)可以使用Instant.getEpochSecond()和Instant.getNano()方法从Instant对象中获取Epoch时间(秒和纳秒)。示例代码如下。longepochSecond=now.getEpochSecond();intnano=now.getNano();5.5.2Instant类4.比较两个Instant对象可以使用Instant.isBefore(InstantotherInstant)、Instant.isAfter(InstantotherInstant)和Instant.equals(Objectobj)方法比较两个Instant对象。示例代码如下。Instantearlier=Instant.now();Instantlater=Instant.now();booleanisBefore=earlier.isBefore(later);booleanisAfter=earlier.isAfter(later);booleanequals=earlier.equals(later);5.调整Instant对象可以使用Instant.plusSeconds(longsecondsToAdd)、Instant.minusSeconds(longsecondsToSubtract)等方法对Instant对象进行调整。示例代码如下。Instantlater=now.plusSeconds(60);//60秒后Instantearlier=now.minusSeconds(60);//60秒前5.5.3Calendar类1.创建Calendar对象可以使用Calendar.getInstance()方法获取一个默认时区和语言环境的Calendar对象。示例代码如下。Calendarcalendar=Calendar.getInstance();2.获取日期和时间的各个部分Calendar类允许获取年、月、日、小时、分钟等各个日期和时间部分的值。示例代码如下。intyear=calendar.get(Calendar.YEAR);intmonth=calendar.get(Calendar.MONTH);/*注意:月份从0开始,0表示一月,1表示二月,以此类推*/intday=calendar.get(Calendar.DAY_OF_MONTH);inthour=calendar.get(Calendar.HOUR_OF_DAY);intminute=calendar.get(Calendar.MINUTE);5.5.3Calendar类3.设置日期和时间的各个部分可以使用set()方法来设置Calendar对象的各个日期和时间部分的值。示例代码如下。calendar.set(Calendar.YEAR,2023);calendar.set(Calendar.MONTH,Calendar.OCTOBER);/*月份使用Calendar常量表示,Calendar.OCTOBER表示十月*/calendar.set(Calendar.DAY_OF_MONTH,29);calendar.set(Calendar.HOUR_OF_DAY,15);calendar.set(Calendar.MINUTE,30);4.日期和时间的加减操作Calendar类允许进行日期和时间的加减操作。示例代码如下。calendar.add(Calendar.DAY_OF_MONTH,7);//在当前日期上加7天calendar.add(Calendar.HOUR_OF_DAY,-3);//在当前时间上减3小时5.5.3Calendar类5.日期比较Calendar类允许比较两个日期的先后顺序。示例代码如下。CalendarfutureDate=...;//某个未来的日期booleanisAfter=calendar.after(futureDate);/*检查当前日期是否在未来的某个日期之后*/6.格式化输出虽然Calendar类本身不提供格式化功能,但可以使用SimpleDateFormat类将Calendar对象格式化为字符串。示例代码如下。SimpleDateFormatdateFormat=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");StringformattedDate=dateFormat.format(calendar.getTime());5.5.4LocalDate与LocalTime类1.LocalDate类示例代码如下。LocalDatecurrentDate=LocalDate.now();//获取当前日期LocalDatespecificDate=LocalDate.of(2023,10,29);//创建一个特定的日期(1)创建LocalDate对象示例代码如下。intyear=currentDate.getYear();Monthmonth=currentDate.getMonth();intday=currentDate.getDayOfMonth();DayOfWeekdayOfWeek=currentDate.getDayOfWeek();(2)获取日期的各个部分5.5.4LocalDate与LocalTime类示例代码如下。LocalDatenextWeek=currentDate.plusWeeks(1);//当前日期加1周LocalDatelastMonth=currentDate.minusMonths(1);//当前日期减1个月(3)日期的加减操作示例代码如下。LocalTimecurrentTime=LocalTime.now();//获取当前时间LocalTimespecificTime=LocalTime.of(15,30,45);//创建一个特定的时间(时、分、秒)(1)创建LocalTime对象2.LocalTime类5.5.4LocalDate与LocalTime类示例代码如下。inthour=currentTime.getHour();intminute=currentTime.getMinute();intsecond=currentTime.getSecond();intnano=currentTime.getNano();(2)获取时间的各个部分示例代码如下。LocalTimenextHour=currentTime.plusHours(1);//当前时间加1小时LocalTimelastMinute=currentTime.minusMinutes(1);//当前时间减1分钟(3)时间的加减操作目录导航5.1字符串类5.2包装类5.3
Random类5.4
Math类5.5日期和时间类5.6
【商业实例】“银行提款机”项目——转账手续费计算5.7
【综合实训】计算给定日期前/后指定天数的日期【商业实例】“银行提款机”项目——转账手续费计算“银行提款机”项目的转账功能涉及转账手续费的计算,使用Double包装类来定义账户余额和手续费率,使用LocalTime类来记录转账时间。首先,定义Account类,该类包含一个balance属性,用来存储账户余额,并为其提供getter和setter方法以便获取和修改余额。其次,定义一个final修饰的Double类型常量rate,用于表示转账手续费率(此处为千分之一)。再次,在Bank类中定义一个transfer()方法,该方法接收两个账户和一个转账金额作为参数,完成转账逻辑,并能根据手续费率扣除手续费(但在对应任务描述中未明确指出)。最后,在main()函数中创建两个账户并初始化余额,执行转账操作,并输出两个账户转账后的余额。整个过程模拟了银行系统中账户间转账的基本功能。【商业实例】“银行提款机”项目——转账手续费计算任务1:定义Account类publicclassAccount{//账户余额
privateDoublebalance;/***balance的getter方法*@return返回余额*/publicDoublegetBalance(){returnbalance;}/***balance的setter方法*@parambalance余额*/publicvoidsetBalance(Doublebalance){this.balance=balance;}}定义一个Account类,该类中定义属性balance(余额),并写入getter、setter方法。【商业实例】“银行提款机”项目——转账手续费计算任务2:定义常量ratepublicclassBank{/***转账的手续费率,为千分之一*/staticfinalDoublerate=0.001;}定义一个名称为rate的以final修饰的Double类型的常量,值为0.001(千分之一)。【商业实例】“银行提款机”项目——转账手续费计算任务3:定义转账方法transfer()publicbooleantransfer(AccountorgAccount,AccounttargetAccount,Doublemoney){if(orgAccount.getBalance()<=0){System.out.println("转账账户无金额");returnfalse;}if(orgAccount.getBalance()<
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 钻孔机司机安全综合考核试卷含答案
- 陶瓷工艺师工作效率测试考核试卷含答案
- 电工合金冷变形工岗前制度考核试卷含答案
- 船舶修理工冲突管理强化考核试卷含答案
- 电线电缆挤橡工岗中竞争分析考核试卷含答案
- 活性炭活化工安全知识水平考核试卷含答案
- 畜牧技术员岗中责任考核试卷含答案
- 化工企业起重机械检查表范本
- 企业会计的实习报告
- 高层建筑剪力墙施工方案
- 分层审核检查表(一)
- 建筑材料与检测说课
- 中耕植保机械课件
- 病理科建设与管理指南
- 500静压混凝土预制桩钢桩施工记录
- 七年级数学 去括号
- GB/T 9780-2013建筑涂料涂层耐沾污性试验方法
- GB/T 12613.3-2011滑动轴承卷制轴套第3部分:润滑油孔、油槽和油穴
- 湖南道地药材-课件
- 汉密尔顿焦虑量表课件
- 山东黄金矿业股份有限公司成本费用管理制度
评论
0/150
提交评论