开发随手记-Java高级

上强度了~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

基本数据类型与引用数据类型

区别:

  1. 基本是数据类型是Java内置好的数据类型,可以直接使用。比如赋值或进行运算。
  2. 除字符串以外的引用数据类型都不可以直接使用,必须new实例化之后才可以操作。
  3. 引用数据类型可以是null(空值)。

注意:

1、引用数据类型new 实例化后,变量的值是Java在内存中申请的地址,所以引用数据类型不可以直接使用。在进行值的比较时必须使用特殊的方法进行比较。例如:字符串类的equals()方法。

2、使用引用数据类型,首先应该判断引用数据类型是否为null,不为null在进行后续操作,否则可能会出现空指针异常

包装类

基本类型包装类

概念:由于基本数据类型是内置类型,与引用数据类型不同,不能调用方法来完成强大的功能。为了更方便使用基本数据类型,统一面向对象基本思想,Java设计了基本数据类型的包装类,即每一种基本数据类型都对应包装类。

基本类型

byte

short

int

long

char

boolean

float

double

包装类

Byte

Short

Integer

Long

Character

Boolean

FLoat

Double

自动拆箱装箱功能:

基本数据类型包装类这些引用数据类型与其他引用数据类型有些不

同,他们有更强大的功能,即自动装箱拆箱。即在需要的情况下,基本类型

与包装类型可以通用。有些时候我们必须使用引用数据类型时,可以传入基

本数据类型

比如:

基本类型可以使用运算符直接进行计算,但是引用类型不可以。而基本类型包装类作为引用类型的一种也可以计算,原因在于,Java”偷偷地”自动地进行了数据类型的转换。

相对应的,引用数据类型变量的值必须是new出来的对象,而我们可以将一个基本类型的值赋值给一个基本类型包装类的引用。原因同样在于Java又”偷偷地”自动地进行了数据类型的转换。

常用方法
  1. 字符串->基本类型

任何基本类型包装类都有一个parseXxx(String data);方法。如Integer.paserInt("10");

 

  1. 基本类型->字符串

只需要直接与空字符串相加即可。

优点:

  1. 变成引用数据类型,可以有特殊属性和方法。
  2. 引用数据类型的值可以是null

 

常用类

Object

Object是所有Java中类的超类(我们创建的所有类都会继承Object类),类中的toString()和equals()方法就是从Object中继承过来的。

toString()

Object类中的toString()方法返回的是对象的类的类型+@+内存地址

所以我们想要使用toString()方法就需要我们重写它的方法体。

equals()

由于引用数据类型的变量值是Java内存地址,所以我们不能直接用==来判断引用数据类型是否相同。

String类重写了equals()方法所以我们可以直接使用String的equals()来判断两个字符串是否相等,如果字符串没有重写equals()方法那么它比较的也是两个内存地址。

想要比较两个自定义引用数据类型,就需要我们重写它们的equals()方法,根据我们的规则来判断是否相等。例如:比较两个Student对象是否相等,如果我们以Student中的name属性作为判断的依据,那么重写Student的equals()方法即可。

 

字符串

在前面的学习中我们知道了字符串是一种特殊的引用数据类型,从下图我们一起了解一下它哪里特殊:

 

由上图我们可以看出当使用==判断两个字符串是否相等时是不严谨的,使用equals()才是最稳定的判断

String重写了Object的equals()方法[Java帮我们实现了],所以String的equals比较的永远是两个字符串真实的值

构造方法:

public String() //创建空字符串

public String(byte[] bytes) //将字节数组转为字符串

public String(char[] value) //将字符数组转为字符串

public String(String original)  //初始化一个新创建的String对象

普通方法(带√的方法为常用方法):

String toUpperCase(); //小写转大写

String toLowerCase(); //大写转小写

int length(); //获取长度

boolean contains(CharSequence s);//判断调用方法字符串是否包含参数字符串

注意:这里使用到了多态,CharSequence 是String的接口

String substring(int start); //截取从start索引开始到最后的子字符串

String trim(); //去除字符串两端空白

√String replace(char oldChar,char newChar); //替换字符

√String substring(int start,int end); //截取指定位置的子字符串

√char[] toCharArray(); //字符串与字符数组的转变

√char charAt(int index); //根据索引查找内容

√int indexOf(String ch); //根据内容查找索引

√boolean endsWith(String suffix);

√boolean startsWith(String prefix); //以指定内容开头或结尾

√String[] split(String regex); //根据给定的字符串拆分调用此方法的字符串

Stringbuffer

语法:StringBuffer buffer = new StringBuffer(str)/StringBuffer buffer = new StringBuffer();

常用方法:

StringBuffer append(String str); // 追加内容

String toString();// 输出StringBuffer中的内容

 

StringBuilder

语法:StringBuilder builder = new StringBuilder();/StringBuilder builder = new StringBuilder(str);

常用方法:

StringBuilder append(String str); // 追加内容

String toString();// 输出StringBuffer中的内容

 

 

String、Stringbuffer、Stringbuilder区别

String、Stringbuffer、StringBuilder是字符串的三兄弟。String是一个常量,值是不可变的,所以对于每一次赋值操作都会创建一个新的对象。在进行大量字符串拼接时会有性能开销大(频繁创建对象)的问题。StringBuffer和StringBuilder都是可变的,当进行字符串拼接时采用append()方法,在原来的基础上进行追加,所以性能比String要高。又因为StringBuffer是线程安全的而StringBuilder是非线程安全的,所以StringBuilder的效率高于StringBuffer。对于大数据量的字符串的拼接,采用StringBufferStringBuilder

日期

Java的Date、Calendar类型使用起来并不是很方便,而且Date类有着线程不安全等诸多弊端。同时若不进行封装,会在每次使用时特别麻烦。于是Java8推出了线程安全、简易、可靠的时间包(java.time)。

LocalDate(本地日期)

LocalDate只包含日期,不包含时间。

 

LocalTime(本地时间)

LocalTime只包含时间,不包含日期,同时不涉及时区(当前系统是什么时区就是什么时区)。

 

LocalDateTime(本地日期时间)

LocalDateTime = LocalDate + LocalTime;包含同时时间和日期。

 

日期格式化

通过DateTimeFormatter进行日期格式的转换。

格式规则

字符

含义

规则串

效果

y

yyyy-MM-dd

2017-06-05

M

yyyy-MM-dd hh:mm:ss

2017-06-05 07:03:05 //12小时制

d

yyyy-MM-dd HH:mm:ss

2017-06-05 07:03:05 //24小时制

H

yyyy-MM-dd HH:mm:ss:SSS

2017-06-05 07:03:05:005 //24小时制

m

yyyy-MM-dd

2017-06-05

s

yyyy-MM-dd hh:mm:ss

2017-06-05 07:03:05 //12小时制

S

毫秒

日期比较

 

时间计算  

Math

数学工具类,针对数学算法进行操作。

工具类:一般情况下其所有方法均为静态方法,并且一般不会创建对象。

常用方法

static int abs(int a); //绝对值

static double ceil(double a); //向上取整

static double floor(double a); //向下取整

static int max/min(int a,int b); //取最大最小值

static double pow(double a,double b); //a的b次幂

static double random();  //产生随机数

static int round(float a); //四舍五入

BigDecimal

由于计算机都是二进制的,浮点数没有办法是用二进制进行精确表示,这样我们在进行高精度计算时就会丢失精度

 

为解决精度丢失的问题,Java为我们提供了BigDecimal类用于处理浮点数的高精度需求。

计算方法
  1. public BigDecimal add(BigDecimal value); //加法
  2. public BigDecimal subtract(BigDecimal value); //减法
  3. public BigDecimal multiply(BigDecimal value); //乘法
  4. public BigDecimal divide(BigDecimal value); //除法
精度

使用setScale(scale, roundingMode);

Scale:保留小数位数

roundingMode:舍去位数处理方式

BigDecimal.ROUND_DOWN 直接删除多余的小数

BigDecimal.ROUND_UP 进位处理 2.35变为2.4

BigDecimal.ROUND_HALF_UP 四舍五入

BigDecimal.ROUND_HALF_DOWN 四舍五入 向下取整

案例

 

  • 20
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值