java冷知识:在方法中声明的类称为局部类(也属于内部类),局部类不仅能够访问包含它们的外部类,还可以访问局部变量。不过,可以被访问的局部变量必须被声明为final。

1.API:

1.object类:

作用:

  • 一个类要么继承Object类,要么间接继承了Object类,Object类是java中的祖宗类
  • Object类的方法是一切子类都可以直接使用的,所以我们要学习Object类的方法

在object类中,我们最常用到的两个api是equal和toString方法

官方给出的equal方法逻辑

  • 先判断传进来的对象是不是自己
  • 在判断这个对象是不是空以及是不是本类的类型(第一个getClass()省略this.也就是本类的意思)
  • 然后就是判断每个属性的值是否相等。

细心的同学可能注意到了,这里的name判断的时候调用的是Objects.equals方法,而不是直接调用equals。

因为如果这里的name是一个null而没有做处理直接进行判断的话,则会抛出异常。而Objects.equals方法则进行了判断,避免了这种情况。

    @Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;return id == student.id && age == student.age && Objects.equals(name, student.name);}

如果不重写toString,那么直接输出就会输出包名位置,以及地址等信息。

我们可以重写toString方法,来输出我们想要的信息

    @Overridepublic String toString() {return "Student{" +"id=" + id +", name='" + name + '\'' +", age=" + age +'}';}

2.StringBuilder:

作用:提高字符串的操作效率,比如拼接。修改等。

append()方法,参数几乎可以是各种类型

而且,StringBuilder支持链式编程。

  public static void main(String[] args) {StringBuilder sb = new StringBuilder();sb.append("a").append(false).append(12);System.out.println(sb);}

StringBuilder只是帮我们来处理字符串,通过toString方法即可获得处理后的字符串。

StringBuilder的另一个常用方法reverse,反转字符串。

public class Builder {public static void main(String[] args) {StringBuilder sb = new StringBuilder();sb.append("1").append(2).append(3);sb.reverse().append("las");System.out.println(sb);}
}

3.Math类

常用的方法:

1.获取参数绝对值

2.向上取整

3.向下取整

4.四舍五入

5.获取两个int值中的较大值

6.返回a的b次幂的值

7.返回值为double的随机值,范围[0.0,1.0]

4.BigDecimal类:

double类型在进行运算时,往往会出现精度问题。

比如下列代码:

public class Builder {public static void main(String[] args) {Double a = 0.1+0.2;System.out.println(a);}
}

结果并不是0.3,那我们如何来解决这个问题呢?java给我提供了BigDecimal类去处理精度损失问题。

建议使用以下两种方式进行创建对象

一种是作为字符串类型传参,第二种是通过valueOf方法进行传参(java强制禁止使用BigDecimal(Double)构造器进行创建对象,可能存在损失精度的风险)

public class Builder {public static void main(String[] args) {BigDecimal decimal = new BigDecimal("0.1");BigDecimal decimal1 = BigDecimal.valueOf(0.2);System.out.println(decimal.add(decimal1));}
}

加减乘除方法:

public class Builder {public static void main(String[] args) {BigDecimal decimal = new BigDecimal("0.1");BigDecimal decimal1 = BigDecimal.valueOf(0.2);System.out.println("相加:"+decimal.add(decimal1));System.out.println("相减:"+decimal1.subtract(decimal));System.out.println("相乘:"+decimal.multiply(decimal1));System.out.println("相除:"+decimal1.divide(decimal));}
}

doubleValue()方法可以将BigDecimal类转化成double方法。

注:因为BigDecimal是做精度运算的,所以当我们算数除不尽的时候,则会抛出异常,这时我们需要做一步处理。

下列代码表示保留两位小数,第三位小数四舍五入。

decimal1.divide(decimal,2, RoundingMode.HALF_UP)

你真的了解java吗?java总结六相关推荐

  1. Java多线程闲聊(六):synchronized关键字

    Java多线程闲聊(六):synchronized关键字 前言 这篇文章我会在博客置顶,为什么呢?因为,三篇引用的文章写得太好了,我害怕后面找不到,看不到,然后忘了! 让我想想,感觉昨天的前言把最近肚 ...

  2. 20155303 2016-2017-2 《Java程序设计》第六周学习总结

    20155303 2016-2017-2 <Java程序设计>第六周学习总结 课堂笔记 高效学习法推荐 看视频学习(2h)→ 以代码为中心看课本,思考运行结果并验证(3h)→ 课后作业验证 ...

  3. 20172325 2018-2019-2 《Java程序设计》第六周学习总结

    20172325 2018-2019-2 <Java程序设计>第六周学习总结 教材学习内容总结 本周学习第十章--树 1.什么是树 (1)树是一种数据结构,与之前学过的栈.队列和列表这些线 ...

  4. # 20155337 2016-2017-2 《Java程序设计》第六周学习总结

    20155337 2016-2017-2 <Java程序设计>第六周学习总结 教材学习内容总结 •串流(Stream): 数据有来源及目的地,衔接两者的是串流对象.如果要将数据从来源取出, ...

  5. 20145202马超 《Java程序设计》第六周学习总结

    进程:是一个正在执行中的程序,每一个进程都有一个执行程序,该顺序是一个执行路径,或者说是一个控制单元. 线程:就是进程中的一个独立的控制单元,线程在控制着进程的执行. 一个进程至少有一线程. Java ...

  6. java二级考试历年真题6_2018年3月计算机二级考试JAVA试题及答案(六)

    2018年计算机等级考试开考在即,小编在这里为考生们整理了2018年3月计算机二级考试JAVA试题及答案,希望能帮到大家,想了解更多资讯,请关注出国留学网的及时更新哦. 2018年3月计算机二级考试J ...

  7. Java开发者必备的六款工具

     Java开发者必备的六款工具 摘要:对于初入行的Java开发人员来说,寻找合适的工具是困难的,并且是浪费时间的.而今天我们将列出六款Java程序员必备的工具,其中包括Notepad++.XML ...

  8. 【Java文件操作(六)】借助内存复制图片:ByteArrayOutputStream\ByteArrayInputStream\FileOutputStream\FileInputStream辨析

    我的博客--Java文件操作系列 [Java文件操作(一)]递归打印文件目录 [Java文件操作(二)]删除文件夹,但保留其内部文件 [Java文件操作(三)]递归复制文件夹内所有文件 [Java文件 ...

  9. 你真的以为你了解Java的序列化了吗

    转载自 你真的以为你了解Java的序列化了吗 上一篇文章<Java对象的序列化与反序列化>中,简单介绍了Java中对象的序列化和反序列化的一些基础知识.看文那篇文章后,有小伙伴留言说:我终 ...

  10. 【Java】Java 对象头 真的是 32位 吗?

    1.概述 HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域: 对象头(Header) 实例数据(Instance Data) 对齐填充(Padding). 是真的吗?假的! 假的!!! ...

最新文章

  1. boost::mpi模块实现一个简单的点类,我们可以构建、添加、比较和 连载
  2. Teamtalk源码分析
  3. 定点化_mif文件生成
  4. STL中的关联式容器——set(集合)
  5. scala 高级十六 scala 集合和集合的高级特性 map flatten fllatmap zip reduce zip 等操作...
  6. python2.7安装教程win7_win7下python2.7安装 pip,setuptools的正确方法
  7. Word VBA-图片操作汇总
  8. 【知乎问答】有哪些特殊的搜索引擎?
  9. 为什么要创建SRT?
  10. 开发一个类似美团的外卖小程序多少钱
  11. win10系统重装(无需u盘)(无需下载第三方软件)(绝对纯净版)(全网最简)
  12. 最热门的国人开发开源软件 TOP 50
  13. criterial查询
  14. 加拿大政府正式为IT项目管理的成本估计作出规定
  15. UNIAPP 怎么引入字体
  16. HDOJ 1282 回文数猜想
  17. 端智能在大众点评搜索重排序的应用实践
  18. labelImg 免命令安装(Windows)
  19. 作为一名网络工程师,分享下IT从业经验!
  20. python爬上去飞卢_我的文起点没签,飞卢签了,为什么?

热门文章

  1. 终于发现免费的比较文件工具了~~~
  2. 金融危机下的国内IDC该往何处走?
  3. 企业生产计划管理标准
  4. C# 删除DataGridView选中行
  5. 解决ie7,8不能使用css3的border-radius的方法
  6. oracle里nextval,oracle中的CURRVAL和NEXTVAL用法
  7. 使用Thumbnails对图片进行压缩处理
  8. [gazebo仿真1]Kinova机械臂gazebo控制
  9. 直流电源供电 LED升压 恒流驱动IC 方案AP9193
  10. java8 GroupingBy 用法大全