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 开发者
Java一分钟之-文件与目录操作:Path与Files类
【5月更文挑战第13天】Java 7 引入`java.nio.file`包,`Path`和`Files`类提供文件和目录操作。`Path`表示路径,不可变。`Files`包含静态方法,支持创建、删除、读写文件和目录。常见问题包括:忽略异常处理、路径解析错误和权限问题。在使用时,注意异常处理、正确格式化路径和考虑权限,以保证代码稳定和安全。结合具体需求,这些方法将使文件操作更高效。
11 2
|
2天前
|
安全 Java 开发者
Java一分钟之-Optional类:优雅处理null值
【5月更文挑战第13天】Java 8的`Optional`类旨在减少`NullPointerException`,提供优雅的空值处理。本文介绍`Optional`的基本用法、创建、常见操作,以及如何避免错误,如直接调用`get()`、误用`if (optional != null)`检查和过度使用`Optional`。正确使用`Optional`能提高代码可读性和健壮性,建议结合实际场景灵活应用。
21 3
|
2天前
|
安全 Java 数据安全/隐私保护
Java一分钟之-Java反射机制:动态操作类与对象
【5月更文挑战第12天】本文介绍了Java反射机制的基本用法,包括获取Class对象、创建对象、访问字段和调用方法。同时,讨论了常见的问题和易错点,如忽略访问权限检查、未捕获异常以及性能损耗,并提供了相应的避免策略。理解反射的工作原理和合理使用有助于提升代码灵活性,但需注意其带来的安全风险和性能影响。
23 4
|
2天前
|
安全 Java 调度
Java一分钟:多线程编程初步:Thread类与Runnable接口
【5月更文挑战第11天】本文介绍了Java中创建线程的两种方式:继承Thread类和实现Runnable接口,并讨论了多线程编程中的常见问题,如资源浪费、线程安全、死锁和优先级问题,提出了解决策略。示例展示了线程通信的生产者-消费者模型,强调理解和掌握线程操作对编写高效并发程序的重要性。
45 3
|
2天前
|
Java
【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态
【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态
|
2天前
|
存储 安全 Java
Java容器类List、ArrayList、Vector及map、HashTable、HashMap
Java容器类List、ArrayList、Vector及map、HashTable、HashMap
|
2天前
|
Java 编译器 开发者
Java一分钟之-继承:复用与扩展类的特性
【5月更文挑战第9天】本文探讨了Java中的继承机制,通过实例展示了如何使用`extends`创建子类继承父类的属性和方法。文章列举了常见问题和易错点,如构造器调用、方法覆盖、访问权限和类型转换,并提供了解决方案。建议深入理解继承原理,谨慎设计类结构,利用抽象类和接口以提高代码复用和扩展性。正确应用继承能构建更清晰、灵活的代码结构,提升面向对象设计能力。
16 0
|
2天前
|
Java
【Java多线程】面试常考 —— JUC(java.util.concurrent) 的常见类
【Java多线程】面试常考 —— JUC(java.util.concurrent) 的常见类
23 0
|
2天前
|
Java API 调度
【Java多线程】Thread类的基本用法
【Java多线程】Thread类的基本用法
10 0
|
2天前
|
SQL Java 数据库连接
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
11 0