BigDecimal
434 09_BigDecimal的基本使用
用于小数的精确运算
构造方法:
- BigDecimal(String val)
四则运算:
- add(BigDecimal b):加法
- subtract(BigDecimal b):减法
- mutiply(BigDecimal b):乘法
- divide(BigDecimal b):除法
package itheima01;
/*
基本使用
*/
import java.math.BigDecimal;
public class BigDecimalDemo01 {
public static void main(String[] args) {
System.out.println(0.1 + 0.2);//0.30000000000000004
System.out.println(0.1 - 0.2);//-0.1
System.out.println(0.1 * 0.2);//0.020000000000000004
System.out.println(0.1 / 0.2);//0.5
System.out.println("--------------");
BigDecimal bd1 = new BigDecimal("0.1");
BigDecimal bd2 = new BigDecimal("0.2");
System.out.println(bd1.add(bd2));//0.3
System.out.println(bd1.subtract(bd2));//-0.1
System.out.println(bd1.multiply(bd2));//0.02
System.out.println(bd1.divide(bd2));//0.5
}
}
435 10_BigDecimal中除法的注意事项
package itheima01;
/*
除法的注意事项:
public BigDecimal divide(另一个Decimal对象,精确几位,舍入模式)
RoudingMode.Up:进一法
RoudingMode.FLOOR:去尾法
RoundingMode.HALF_UP:四舍五入
*/
import java.math.BigDecimal;
import java.math.RoundingMode;
public class BigDecimalDemo02 {
public static void main(String[] args) {
BigDecimal bd1 = new BigDecimal("10.0");
BigDecimal bd2 = new BigDecimal("3.0");
// System.out.println(bd1.divide(bd2));//ArithmeticException
/*
参数1:表示参与运算的BigDecimal对象
参数2:表示小数点后面精确到多少位
参数3:舍入的模式
*/
// System.out.println(bd1.divide(bd2, 2, RoundingMode.UP));//3.34
System.out.println(bd1.divide(bd2, 2, RoundingMode.FLOOR));//3.33
System.out.println(bd1.divide(bd2, 2, RoundingMode.HALF_UP));//3.33
System.out.println(bd1.divide(bd2, 2, RoundingMode.HALF_DOWN));//3.33
System.out.println(bd1.divide(bd2, 2, RoundingMode.HALF_EVEN));//3.33
}
}
436 11_注解概述和JDK内置注解
-
@override:用来修饰方法,表示该方法是重写父类的方法,如果不是,就会报错
public class Fu{ public void show(){ System.out.println("fu show"); } } public class Zi extends Fu{ @Override public void show(){ System.out.println("Zi show"); } }
-
注解(Annotation):也叫元数据,一种代码级别的说明,它是JDK1.5及以后版本引入的一个特性
-
它可以声明在包、类、字段、方法、局部变量、方法参数等的面前,用来对这些元素进行说明
-
JDK1.5之后的新特性
-
说明程序的
注解和注释
- 注解:用来说明程序,给计算机看的
- 注释:用来对程序进行说明的文字,给程序员看的
@Override
- 用于指定方法重写父类的方法,只能修饰方法,不能修饰其他程序元素
- 单独来看,可能丝毫看不出程序中@Override有任何作用,因为它的作用是告诉编译器检查这个方法,保证父类要包含一个被该方法重写的方法
- 标识方法是重写父类的
@Target(ElementType.METHOD)//表示其只能放在方法上
@Retention(RetentionPolicy.SOURCE)//只在源码中,class文件中是不存在的
@Deprecated
- 用于表示某个程序元素(类、方法等)已过时,当其他程序使用已过时的类、方法时,编译器会给出警告
- Java9为@Deprecated增加了两个属性:
- since:该String类型的属性指定该API从那个版本被标记为过时
- forRemoval:该Boolean类型的属性指定该API在将来是否会被删除
- 表示该方法是过时方法
@Retention(RetentionPolicy.RUNTIME)//将来这个注解信息是在class文件中,并且在运行是Java虚拟机可以得到其信息
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, MODULE, PARAMETER, TYPE})//表示将来可以放的位置
@SuppressWarnings
- 指示被该注解修饰的程序元素(以及该程序元素中的所有子元素)取消显示指定的编译器警告
- 使用注解来关闭编译器警告时,移动要在括号里使用name=value的形式为该注解的成员变量设置值
- @SuppressWarnings(value=“all”)
- 用来取消编译器的检查
package itheima02;
import java.util.ArrayList;
import java.util.List;
@SuppressWarnings(value = "all")
public class Test {
public static void main(String[] args) {
Fu f=new Fu();
f.method();
List<String> list=new ArrayList();
}
}
@FunctionalInterface
- Java8新增的,只能用来修饰接口,表示该接口是一个函数式接口
- 函数式接口:接口中有且仅有一个抽象方法
- Lambda表达式的使用前提:接口中有且仅有一个抽象方法
- 表示该接口是一个函数式接口
package itheima02;
@FunctionalInterface
public interface inter {
void show();
// void show2();
}
437 12_元注解
- 对注解进行注解的注解。也就是写在注解上面的注解
两个常用元注解
-
@Retention
- 只能用于修饰注解定义,用于指定被修饰的注解可以保留多长时间
- 包含了一个RetentionPolicy类型的value成员变量,所以使用的@Retention时必须为该value成员变量指定
@Retention中可使用的值定义在RetentionPolicy中,常用值如下:
- RetentionPolicy.CLASS:编译器把注解记录在class文件中,当运行Java程序时,JVM不可获取注解信息,这是默认值
- RetentionPolicy.RUNTIME:编译器把注解记录在class文件中,当运行Java程序时,JVM也可获取注解信息,开发中常用
- RetentionPolicy.SOURCE:注解中保留在源代码中,编译器直接丢弃这种注解
-
@Target
- 只能用于修饰注解定义,用于指定被修饰的注解能用于修饰哪些程序单元,包含一个名为value的成员变量
@Target中可使用的值定义在ElementType中,常用值如下:
- @Target(Element.TYPE):可以用于接口、类、枚举、注解
- @Target(Element.FIELD):可以用于属性字段、枚举的常量
- @Target(Element.METHOD):可以用于方法
- @Target(Element.PARAMETER):可以用于方法参数
- @Target(Element.CONSTRUCTOR):可以用于构造函数
- @Target(Element.LOCAL_VARIABLE):可以用于局部变量
438 13_自定义注解
-
定义格式:
元注解
public @interface 注解名称{
属性列表;
}
注解的本质:
public interface MyAnnotation extends Annotation{}
- 是一个接口,该接口默认继承Annotation接口
- 既然是接口,那么内部定义的内容就是接口中可以定义的内容
注解的属性:
- 属性:接口中的抽象方法
- 格式:返回值类型 属性名称()[default 默认值]
注解属性类型可以有以下列出的类型:
- 基本数据类型
- String
- 枚举类型
- 注解类型
- Class类型
- 以上类型的以为数组类型
439 14_注解使用的注意事项
注解的使用和解析
使用注解:
- 如果注解有多个属性,则可以在注解括号中用“,”号隔开分别给对应的属性赋值
- 如果定义属性时,使用default关键字给属性默认初始化值,则使用注解时可以不进行属性的赋值
- 如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义值即可
- 数组赋值时,值使用{}包裹。如果数组中只有一个