包装类-Java常用类

 根据b站韩顺平教育韩顺平教育java教学视频学习的学习笔记。个人学习理解,如有疏漏,敬请改正。

包装类(Wrapper类)

包装类的分类

1、针对八种基本数据类型相应的应用类型—包装类

2、有了类的特点就可以调用类中的方法

基本数据类型

包装类

boolean

Boolean

char

Character

byte

Byte

short

Short

int

Integer

long

Long

float

Float

double

Double

颜色标注为这个的包装类其父类都是Number

包装类和基本数据类型的转换(装箱和拆箱)基本数据类型——>包装类型(装箱),反之拆箱。自动装箱底层调用的是valueOf()方法

实例(以int和Integer演示)

//手动装箱
//int --> Integer
int n1 = 100;
Integer integer = new Integer(n1);//手动转换
Integer integer1 = Integer.valueOf(n1);//自动转换
//手动拆箱
// Integer--> int
int i = integer.intValue();
//jdk5以后能进行自动装箱和拆箱
//自动装箱
int n2 = 200;
Integer integer2 = n2;//底层使用的仍然是Interger.valueOf(n2)
// 自动拆箱
int n3 = integer2;//底层使用的仍然是integer.intValue()

其他包装类类似

应用包装类对应的就是对象,对象之间使用“==”运算符,则是判断是不是一个对象。只要有基本数据类型“==”比较的就是数值。

三元运算符是一个整体

 

String类

包装类与String类的相互转换

//Integer --> String
   Integer i = 1;
   //方式1
   String str = i.toString();
   //方式2
   String str1 = i + " ";
   //方式3
   String str3 = String.valueOf(i);
   //String --> Integer
   String str_ = "123";
   Integer integer = Integer.parseInt(str_);//使用到自动装箱
   Integer integer1 = new Integer(str_);//构造器
  1. String对象用于保存字符串,也就是一组字符序列。
  2. 字符串常量对象是用双引号括起的字符序列。
  3. 字符串的字符使用Unicode字符编码,一个字符(不区分字母还是汉字)占两个字节。
  4. String类常用构造器
    String str = new String();
    String str1 = new String(String original);
    String str2 = new String(char[] a);
    String str3 = new String(char[] a,int startindex,int count);
    String str4 = new Stringbyte[] b)

    5、String实现了Serializable接口,说明String可以串行化,即可以在网络上传输

    String也实现了Comparable接口,当一个类实现Comparable接口,说明这个类的对象可以互相比较

    6、String是一个final类,不可被继承

    7、String有属性private final char value[];用于存放字符串内容

    8、一定要注意:value是一个final类型,不可以修改(地址不可修改非值不可修改(数组))。

    创建String对象的两种方式

    方式一:直接赋值String s = “hsp”;

    方式二:调用构造器 String s1 = new String(“hsp”);

    区别:

    方式一:现从常量池查看是否有“hsp”数据空间,如果有直接指向;如果没有则重新创建。s最终指向的是常量池的空间地址。

    方式二:先从堆中创建空间,里面维护了value属性,指向常量池的数据空间。如果常量池没有则重新创建,如果有,直接通过value指向。S1最终指向的是堆中的空间地址。

    字符串特性

  5. String是一个final类,代表不可变的字符序列
  6. 字符串是不可变的,一个字符串对象一旦被分配,其内容是不可变的
  7. String类是保存字符串常量的。每次更新都需要重新开辟空间,效率较低,因此java设计者还提供了StringBuilder和StringBuffer来增强String的功能,并提高效率。

    String a = ab + cd;常量相加看的是池,String a = b + d;变量相加看的是堆。

    String类的常见方法

    equals//区分大小写,判断内容是否相等

    equalsIgnoreCase//忽略大小写的判断内容是否相等

    length//获取字符个数,字符串的长度

    indexOf//获取字符在字符串中第一次出现的索引,索引从0开始,如果找不到,返回-1

    lastIndexOf//获取字符在字符串中最后一次出现的索引,索引从0开始,如找不到,返回-1

    substring//截取制定范围的字串

    trim//去前后空格

    charAt:获取某索引处的字符,注意不能使用Str[index]这种方式

    String类是保存字符串常量的。每次更新都需要重新开辟空间,效率较低,因此java设计者还提供了StringBuilder和StringBuffer来增强String的功能,并提高效率。

 

StringBuffer和StringBuilder类

StringBuffer

Java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删。

很多方法与String相同,但StringBuffer是长度可变的。

StringBuffer是一个容器,同时也是一个final类

StringBuffer实现了Serializable接口,即StringBuffer的对象可以串行化

StringBuffer的直接父类是AbstractStringBuilder,这个父类中有属性char[] value,这个属性不是final,该value数组存放字符串内容,存放在堆中,即不再在常量池中读取数据空间,所以每次变化(增加、删除)都不用更换地址(创建新的对象),所以效率高于String

StringBuffer的构造器

StringBuffer():构造一个其中不带字符的字符串缓冲区,其初始容量为16个字符

StringBuffer(CharSequence seq):构造一个字符串缓冲区,它包含与制定的CharSequence相同的字符。

StringBuffer(int capacity):构造一个不带字符,但具有制定初始容量的字符串缓冲区,即对char[]大小进行制定

StringBuffer(String str):构造一个字符串缓冲区,并将其内容初始化为制定的字符串内容

String和StringBuffer的相互转换

//String --> StringBuffer
 //方式一:使用构造器
 String str = "hello";
 StringBuffer stringBuffer = new StringBuffer(str);
 //方式二:使用append()方法
 StringBuffer stringBuffer1 = new StringBuffer();
 stringBuffer1 = stringBuffer1.append(str);

 //StringBuffer --> String
 StringBuffer str1 = new StringBuffer("hello");
 //方式一:使用StringBuffer提供的toSting方法
 String str2 = str1.toString();
 //方式二:使用构造器
 String s = new String(str1);

StringBuffer常用方法

增:append

删:delete(start,end)

改:replace(start,end,string)将start---end之间的内容替换掉,不含end

查:indexOf

插:insert

获取长度:length

StringBuilder

  1. 一个可变的字符序列。此类提供了一个与StringBuffer兼容的API,但不保证同步(StringBuilder不是线程安全)。该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候。如果可以,建议优先使用该类,因为在大多数实现中,它比StringBuffer要快。

2、在StringBuilder上的主要操作是append和insert方法,可重载这些方法,已接收任意类型的数据。StringBuilder与StringBuffer的方法是一样的,所以使用和StringBuffer一样

3、继承AbstractStringBuilder类,实现Serializable接口,是final类,其对象字符序列仍然是存放在其父类 AbstractStringBuilder的char[] value。

4、StringBuilder的方法没有做互斥的处理,即没有synchronized关键字,因此适合用于单线程

如果我们要对字符串进行大量的修改,不要使用String

 

Math类

Math类中的方法都是静态的,具体方法和作用查看javaAPI文档

Date日期类、Calendar日历类以及新的日期

第一代日期类

  1. Date:精确到毫秒,代表特定的瞬间。获取当前系统的时间,默认输出的日期格式是国外的方式
  2. SimpleDateFormat:格式化和解析日期的类。它允许进行格式化(日期->文本)、解析(文本->日期)和规范化
    Date date = new Date();
    System.out.println("当前日期:"+ date);
    SimpleDateFormat sdf = new SimpleDateFormat();
    String format = sdf.format(date);
    System.out.println("当前日期:"+ format);
    SimpleDateFormat sdf1 = new SimpleDateFormat("YYYY年MM月dd日  hh:mm:ss E");
    String format1 = sdf1.format(date);
    System.out.println("当前日期:"+ format1);
    long l = System.currentTimeMillis();
    System.out.println("自1970-1-1-0-0至当前时间毫秒数:" + l);

     

    第二代日期类Calendar类(日历)

    Calendar类是一个抽象类。它为特定瞬间与一组诸如YEAR、MONTH、DAT_OF_MONTH、HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。

  •  Calendar是一个抽象类,并且构造器是private 

  •  可以通过getInstance()来获取实例 
  •  提供大量的方法和字段提供给程序员 
    Calendar can = Calendar.getInstance();//创建日历类对象,不用new 抽象类
    //获取日历对象的某个日历字段
    System.out.println("年:" + can.get(Calendar.YEAR));
    //月份默认从0开始计算,所以要加1
    System.out.println("月:" + (can.get(Calendar.MONTH) + 1));
    System.out.println("日:" + can.get(Calendar.DATE));
    System.out.println("小时:" + can.get(Calendar.HOUR));
    System.out.println("分钟:" + can.get(Calendar.MINUTE));
    System.out.println("秒:" + can.get(Calendar.SECOND));

    Calendar没有专门的格式化方法,所以需要程序员自己来组合显示

    第三代日期类

    前面两代日期类的不足

    JDK1.0中包含了一个java.util.Date类,但是它的大多数方法依据在JDK1.1引入Calendar类之后就被弃用了。而对于Calendar

  1. 可变性:像日期和时间这样的类应该是不可变的

  2. 偏移性:Date中的年份是从1900开始的,而月份都从0开始
  3. 格式化:格式化只对Date有用,Calendar则不行
  4. 此外,他们不是线程安全的;不能处理闰秒等(每隔两天,多出1秒)。

 鉴于以上,JDK8加入LocalDate(日期/年月日):只包含日期、LocalTime(时间/时分秒):只包含时间、LocalDateTime(日期时间/年月日时分秒):包含日期+时间

常用方法 

  1. now返回当前日期
    //now表示获取当前时间
    LocalDateTime ldt = LocalDateTime.now();//LocalDate.now()/ LocalTime.now()
    System.out.println("Now LocalDateTime :" + ldt);
    System.out.println("年:" + ldt.getYear());
    //月份默认从0开始计算,所以要加1
    System.out.println("月:" + ldt.getMonth());
    System.out.println("月:" + ldt.getMonthValue());
    System.out.println("日:" + ldt.getDayOfMonth());
    System.out.println("小时:" + ldt.getHour());
    System.out.println("分钟:" + ldt.getMinute());
    System.out.println("秒:" + ldt.getSecond());
    
    DateTimeFormatter  dtf = DateTimeFormatter.ofPattern("YYYY年MM月dd日  hh:mm:ss E");
    String day = dtf.format(ldt);
    System.out.println(day);
    时间的对象
  2. DateTimeFormatter格式日期类,类似于SimpleDateFormat
  3. Instant——>Date

    Date date = Date.from(instant);

    Date——>Instant

    Instant instant = date.toInstant();

  4. Instant时间戳,类似于Date,提供了一系列和 Date类转换的方式

 

System类

  1. exit:退出当前程序   System.exit(0):0表示正常的状态,正常退出
  2. arraycopy(src,srcPos,det,detPos,length):复制数组元素,比较适合底层调用,一般使用Arrays.copyOf完成复制数组,五个参数的意义看源码。
  3. currentTimeMillens:返回当前时间距离1970-1-1的毫秒数
  4. gc:运行垃圾回收机制System.gc();

 

Arrays类

Array里面包含了一系列静态方法,用于管理或操作数组(比如排序和搜索)

常用方法

  1. toString:返回数组的字符串形式
  2. sort:排序,自然排序和定制排序
  3. binarySearch:通过二分搜索法进行查找,要求必须排好序、
  4. CopyOf:数组元素的复制
  5. Fill:数组元素的填充
  6. equals:比较两个数组元素内容是否完全一致
  7. asList将一组值,转换成list

 

BigInteger类和BigDecimal类(大数处理方案)

  1. BigInteger适合保存比较大的整型、
  2. BigDecimal适合保存精度更高的浮点型(小数)

常见方法

  1. add加
  2. subtract减
  3. multiply乘
  4. divide除

在使用BigDecimal的divide方法时,对于无限循环的小数会抛出异常,此时在调用时制定精度即可。如果有无限循环小数,就会保留分子的精度

BigDecimal bigDecimal = new BigDecimal("298.1000987876576858");
BigDecimal bigDecimal1 = new BigDecimal("3");
BigDecimal divide = bigDecimal.divide(bigDecimal1,BigDecimal.ROUND_CEILING);
System.out.println(divide);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值