Java常用类(2)

9.Interger缓冲区

  • Java预先创建了256个常用的整数包装类型对象
  • 在实际应用当中对已创建的对象进行复用
 public static void main(String[] args) {
        //面试题
        Integer integer1 = new Integer(100);
        Integer integer2 = new Integer(100);
        System.out.println(integer1==integer2);//false   比较的是地址

        Integer integer3 = 100;//自动装箱
        Integer integer4 = Integer.valueOf(100);
        // Integer integer3 = Integer.valueOf(100);并非构造方法
        System.out.println(integer3==integer4);//true

        Integer integer5 = 200;//自动装箱
        Integer integer6 = 200;
        // Integer integer5 = Integer.valueOf(100);
        System.out.println(integer5==integer6);//false

        /*
        public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }
    low=-128
    h=127
    在堆的缓冲区内,有-128~127,如果-128<i<127 则直接把地址给i,所以integer3==integer4
    为什么呢?   以为平常使用多,就为我们创建了这个缓冲区
    如果超出了就直接   new一个   return new Integer(i);
    cache = new Integer[(high - low) + 1];  255+1=256

         */

    }

10.String概述

  • 字符串是常量,创建之后不可改变(这个改变并不是值不能改变)

  • 字符串字面值储存在字符串池中,可以共享(储存在字符串池的目的是共享)

public static void main(String[] args) {
        String name = "hello";//“hello”常量储存在字符串池/常量池
        name = "zhangsan";//"zhangsan"赋值给name  name指向zhangsan
        //给name赋值时,没有把hello改成zhangsan ,而是在字符池重新开辟了一块空间-->不可变性
        //hello 变成了垃圾
        String name2 = "zhangsan";
    }

  • String s = "hello";产生一个对象,字符串池中储存
  • String s = new String("hello"); 产生两个对象,堆、池中个储存一个
//字符串的另一种创建方式 new String()
        String str = new String("Java");//有两个对象,可能会浪费空间
        String str2 = new String("Java");
        System.out.println(str==str2);//false
        System.out.println(str.equals(str2));//true 比的不是地址是数据
		//这里一样是因为  String在运用中,擅自重写了equals用来比较指向的字符串对象所存储的字符串是否相等
		详细可见这位博主:https://blog.csdn.net/wzy_2017/article/details/79994665

11.String常用方法

语法(1):

public int length();   返回字符串的长度
public char charAt(int index);    根据下标获取字符
public boolean contains(String str);    判断当前字符串中是否包含str

使用:

        //字符串方法的使用
        //1.length();返回字符串的长度
        //2.charAt(int index);返回某个位置的字符
        //3.contains(String str);判断是否包含某个字符串

        String content = "Java是世界上最好的编程语言";
        System.out.println(content.length());//15,空格也算字符
        System.out.println(content.charAt(0));//J
        System.out.println(content.charAt(content.length() - 1));//言
        System.out.println(content.contains("Java"));//true
        System.out.println(content.contains("hi"));//false

语法(2):

public char[] toCharArray();  将字符串转成数组;
public int indexOf(String str);  查找str首次出现的下标,存在,则返回该下标;不存在则返回-1;
public int lastIndexOf(String str); 查找字符串在当前字符串中最后一次出现的下标索引;

使用:

        //4.toCharArray();返回字符串对应的数组
        //5.indexOf();返回字符串首次出现的位置
        //6. lastIndexOf();返回字符串最后一次出现的位置
        System.out.println(content.toCharArray());//Java是世界上最好的编程语言,Java真香
        System.out.println(Arrays.toString(content.toCharArray()));//将数组转换成String类型输出
        //[J, a, v, a, 是, 世, 界, 上, 最, 好, 的, 编, 程, 语, 言, ,, J, a, v, a, 真, 香]
        System.out.println(content.indexOf("Java"));//0
        System.out.println(content.indexOf("Java", 4));//16   //从第四个下标开始寻找,这个Java是最后的Java
        System.out.println(content.lastIndexOf("Java"));//16

语法(3):

public String trim();  去掉字符串前后的空格,不管中间
public String toUpperCase();   将小写转成大写
public boolean endWith(String str);  判断字符串是否以str结尾

使用:

        //7.trim();去掉字符串前后的空格;
        //8.toUpperCase(); 把小写转成大写 toLowerCase();把大写转成小写;
        //9.endWith(str);判断是否以str结尾,startWith(str);判断是否以str开头;
        String content2 = "  hello world  ";//可多次使用,说明了string的不可变性
        System.out.println(content2.trim());//hello world
        System.out.println(content2.toUpperCase());//  HELLO WORLD  
        System.out.println(content2.toLowerCase());//  hello world  
        String filename = "hello,Java";
        System.out.println(filename.endsWith(",Java"));//true
        System.out.println(filename.startsWith("hello"));//true

语法(4):

public String replace(char oldChar,char newChar);   将旧字符串替换成新字符串
public String[] split(String str);   根据str做拆分

使用:

for(String s : arr)这个格式是foreach的形式,表示取出数组arr[]中的每一个元素,就是循环一次就依次取出一个元素赋值给s,直到取完为止

12.可变字符串:StringBuffer和StringBuilder

在缓冲区内进行

  • StringBuffer:可变长字符串,JDK1.0提供,运行效率慢、线程安全
  • StringBuilder:可变长字符串,JDK5.0提供,运行效率快、线程不安全

13.BigDecimal的使用

思考以下程序结果:

public class TestBigDecimal{
    public static void main(String[] args){
        double d1=1.0;
        double d2=0.9;
        System.out.println(d1-d2);
    }
}
下面为结果

BIgDecimal:

  • 位置:Java.math包中
  • 作用:精确计算浮点数
  • 创建方法:BigDecimal bd = new BigDecimal("1.0");

结果

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

方法:

  • BigDecimal add(BigDecimal bd) 加
  • BigDecimal subtract(BigDecimal bd) 减
  • BigDecimal multiply(BigDecimal bd) 乘
  • BigDecimal divide(BigDecimal bd) 除

  • 除法:divide(BigDecimal bd,int scal,RoundingMode,mode)
  • 参数scal: 指定精确到小数点后几位
  • 参数mode:
    • 指定小数部分的取舍模式,通常采用四舍五入的模式
    • 取值为BigDecimal.ROUND_HALF_UP

14.Date类

  • Date表示特定的瞬间,精确到毫秒。Date类中的大部分方法都已经被Calendar类中的方法所取代
  • 时间单位:
    • 1秒=1000毫秒
    • 1毫秒=1000微秒
    • 1微秒=1000纳秒

15.Calendar

  • Calendar提供了获取或设置各种日历字段的方法
  • 构造方法
    • protected Calendar() :由于修饰符是protected,所以无法直接创建该对象
  • 其他方法:
方法名 说明
static Calendar getlnstance() 使用默认时区和区域获取日历
void set(int,year,int month,int date,int houofday,int minute,int second) 设置日历的年、月、日、时、分、秒。
int get(int field) 返回给定日历字段的值。字段比如年、月、日等
void setTime(Date date) 用给定的Date设置此日历的时间。Date-Calendar
Date getTime() 返回一个Date表示次日历的时间。Calendar-Date
void add(int field,int amount) 返回日历的规则,给指定字段添加或减少时间量
long getTimeInMillies() 毫秒为单位返回该日历的时间值
没有了ヽ(✿゚▽゚)ノ ( ̄_, ̄ ) ( ̄ε(# ̄)☆╰╮o( ̄皿 ̄///)还有两个类

16.SimpleDateForma类

  • SimpleDateFormat是一个以语言环境有关的方式来格式化和解析日期的具体类
  • 进行格式化(日期—>文本)、解析(文本 —>日期)
  • 常用的时间模式字母
字母 日期 示例
y 2019
M 年中月份 08
d 月中天数 10
H 1天中的小时数(0-23) 22
m 分钟 16
s 59
S 毫秒 367

17.System类

  • System系统类,主要用于获取系统的属性数据和其他操作,构造方法私有的
方法名 说明
static void arraycopy(); 复制数组
static long currentTimeMillis(); 获取当前系统时间,返回的是毫秒值
static void gc(); 建议JVM赶快启动垃圾回收器回收垃圾
static void exit(int status); 退出JVM,如果参数是0表示正常退出JVM,非0表示异常退出JVM

总结

  • Object类
    • 所有类的直接或间接的父类,可储存任何对象
  • 包装类
    • 基本数据类型所对应的应用数据类,可以是Object统一所有数据
  • String类
    • 字符串是常量,创建后不可改变,字面值保存在字符串池中,可以共享
  • BigDecimal
    • 可精确计算浮点数
  • Date
    • 特定时间
  • Calendar
    • 日历
  • SimpleDateFormat
    • 格式化时间
  • System
    • 系统类
posted @ 2021-03-07 16:47  弹琴的猫  阅读(63)  评论(0)    收藏  举报