java基础-第7章-常用类(二)

简介: 注意:如果字符串参数的内容无法正确转换为对应的基本类型,则会抛出java.lang.NumberFormatException异常。

五、BigDecimal

为什么使用BigDecimal?

很多实际应用中需要精确计算,而double是近似值存储,不再符合要求,需要借助BigDecimal。

double d1 = 1.0;
double d2 = 0.9;
System.out.println(d1-d2);

BigDeicmal基本用法

位置:java.math包中。

作用:精确计算浮点数。

创建方式:BigDecimal bd=new BigDecimal(“1.0”)。

常用方法:


方法名 描述

BigDecimal add(BigDecimal bd) 加

BigDecimal subtract(BigDecimal bd) 减

BigDecimal multiply(BigDecimal bd) 乘

BigDecimal divide(BigDecimal bd) 除

除法:divide(BigDecimal bd,int scal,RoundingMode mode)。

参数scale :指定精确到小数点后几位。

参数mode :

指定小数部分的取舍模式,通常采用四舍五入的模式。

取值为BigDecimal.ROUND_HALF_UP。

public class Demo {
  public static void main(String[] args) {
  double d1=1.0;
  double d2=0.9;
  System.out.println(d1-d2);
  //面试题
  double result=(1.4-0.5)/0.9;
  System.out.println(result);
  //BigDecimal,大的浮点数精确计算
  BigDecimal bd1=new BigDecimal("1.0");
  BigDecimal bd2=new BigDecimal("0.9");
  //减法
  BigDecimal r1=bd1.subtract(bd2);
  System.out.println(r1);
  //加法
  BigDecimal r2=bd1.add(bd2);
  System.out.println(r2);
  //乘法
  BigDecimal r3=bd1.multiply(bd2);
  System.out.println(r3);
  //除法
  BigDecimal r4=new BigDecimal("1.4")
    .subtract(new BigDecimal("0.5"))
    .divide(new BigDecimal("0.9"));
  System.out.println(r4);
  BigDecimal r5=new BigDecimal("20").divide(new BigDecimal("3"),2,BigDecimal.ROUND_HALF_UP);
  System.out.println(r5);
  }

六、System

System系统类,主要用于获取系统的属性数据和其他操作。

常用方法:


方法名 说明

static void arraycopy(…) 复制数组

static long currentTimeMillis() 获取当前系统时间,返回的是毫秒值

static void gc(); 建议JVM赶快启动垃圾回收器回收垃圾

static void exit(int status) 退出jvm,如果参数是0表示正常退出jvm,非0表示异常退出jvm。

示例:

public class TestSystem {
  public static void main(String[] args) {
  //1 arraycopy:数组的复制
  //src:源数组
  //srcPos:从那个位置开始复制 0
  //dest:目标数组
  //destPos:目标数组的位置
  //length:复制的长度
  int[] arr= {20,18,15,8,35,26,45,90};
  int[] dest=new int[8];
  System.arraycopy(arr, 4, dest, 4, 4);
  for(int i=0;i<dest.length;i++) {
    System.out.println(dest[i]);
  }
  //Arrays.copyOf(original, newLength)
  System.out.println(System.currentTimeMillis());
  long start=System.currentTimeMillis();
  for(int i=-9999999;i<99999999;i++) {
    for(int j=-999999;j<9999999;j++) {
    int result=i+j;
    }
  }
  //2 获取毫秒数
  long end=System.currentTimeMillis();
  System.out.println("用时:"+(end-start));
  new Student("aaa", 19);
  new Student("bbb", 19);
  new Student("ccc", 19);
  //3回收垃圾
  System.gc();//告诉垃圾回收期回收
  //4推出jvm
  System.exit(0);
  System.out.println("程序结束了....");
  }
}

七、对象内存分析

按值传递

按址传递

class Person{
    int age;
    String name;
    public Person(String name,int age){
        this.name = name;
        this.age = age;
    }
    public void eat(){
        System.out.println("吃东西。。");
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "Person{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }
}
public class Demo {
    public static void test(int i){
        System.out.println(i);
        i = 100;
        System.out.println(i);
    }
    public static void test2(Person person){
        person.setName("wowo");
    }
    public static void main(String[] args) {
        Person p1 = new Person("王二狗",5);
        Person p2 = new Person("李晓华",12);
        Person p3 = p1;
        System.out.println(p1);
        System.out.println(p2);
        System.out.println(p3);
        test2(p3);
        System.out.println(p3);
        System.out.println(p1);
        int a = 5;
        test(a);
        System.out.println(a);
    }
}


相关文章
|
2月前
|
算法 Java 数据处理
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。HashSet基于哈希表实现,提供高效的元素操作;TreeSet则通过红黑树实现元素的自然排序,适合需要有序访问的场景。本文通过示例代码详细介绍了两者的特性和应用场景。
42 6
|
10天前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
|
28天前
|
存储 安全 Java
java.util的Collections类
Collections 类位于 java.util 包下,提供了许多有用的对象和方法,来简化java中集合的创建、处理和多线程管理。掌握此类将非常有助于提升开发效率和维护代码的简洁性,同时对于程序的稳定性和安全性有大有帮助。
48 17
|
19天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
23天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
76 4
|
24天前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
45 2
|
28天前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
|
1月前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。
|
1月前
|
Java API Maven
如何使用 Java 字节码工具检查类文件的完整性
本文介绍如何利用Java字节码工具来检测类文件的完整性和有效性,确保类文件未被篡改或损坏,适用于开发和维护阶段的代码质量控制。
|
1月前
|
存储 Java 编译器
java wrapper是什么类
【10月更文挑战第16天】
35 3