JavaCommonClass

常用内部类

概念:在一个类的内部再定义一个完整的类:

  • 特点:编译之后可生成独立的字节码文件

  • 内部类:可直接访问外部类的私有成员,而不破坏封装

  • 可为外部提供必要的内部功能组件

  1. 成员内部类

  2. 静态内部类

  3. 局部内部类

  4. 匿名内部类

成员内部类

![](file:///C:/Users/86130/Desktop/java学习/java学习图片/成员内部类.png)

  • 在类的内部定义,与实例变量,实例方法同级别的类

  • 通过成员内部类调用外部类不破化封装

  • 外部类的一个实例部分,创建内部类对象,必须依赖外部类对象。

注意点:

当外部类,内部类存在重名属性是,会优先访问内部类属性。

![](file://C:\Users\86130\Desktop\java学习\java学习图片\当外部类与内部类发生冲突时优先调用内部类.png)

在属性冲突情况下需要调用外部类属性时,外部类名.this.属性名

System.out.println(Outer.this.name);//当内部类与外部类存在属性冲突时调用外部类方法

成员内部类不能定义静态成员(但是可以包含静态常量)final

静态内部类

  • 不依赖外部类对象,可直接创建或通过类名访问,可申明静态成员。

  • 只能直接访问外部类的静态成员(实例成员需要实例化外部类对象)

outher.Inner.inner = new outer.Inner();
outer.Inner.show(); 

![](file://C:\Users\86130\Desktop\java学习\java学习图片\静态内部类.png)

局部内部类

  • 定义在外部类方法,作用范围和创建对象范围仅限当前对象方法。

  • 局部内部类访问外部类当前方法中的局部变量时,因无法保障变量的生命周期与自身相同,变量必须修饰final

  • 限制类的使用范围(仅在当前方法)

![](file://C:\Users\86130\Desktop\java学习\java学习图片\局部内部类.png)

匿名内部类

  • 没有类名的局部类(一切特征与局部内部类相同)。

  • 编译后加载

  • 必须继承一个父类或者实现一个接口

  • 定义类,实现类创建对象的语法合并,只能创建一个该类的对象

  • 优点:减少代码量

  • 缺点:可读性差

![](file:///C:/Users/86130/Desktop/java学习/java学习图片/匿名内部类.png)

object类

  • 超类、基类,所有类的直接或间接父类,位于继承树的最顶层。

  • 任何类,如果没有书写extends显示继承某个类,都默认直接Object类,否则为间接继承。

  • object类中所定义的方法,是所有对象都具备的方法。

  • object类型可以存储任何对象

作为参数可以接受任何对象。

作为返回值,可以返回任何对象。

getClass()方法

  • public final class<?> getclass(){}

  • 返回引用中存储的实际对象类型

  • 应用:通常用于判断两个引用中实际存储对象类型是否一致

public class Student {
    //定义了两个变量
    private String name = "霍章元";
    private int age = 29;

    //创建了构造器
    public Student() {
    }

    public Student(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
        //1getClass方法
        Student s1 = new Student("aaa",22);
        Student s2 = new Student("bbb",25);
        //判断s1和s2是不是同一个类型
        Class class1 = s1.getClass();
        Class class2 = s2.getClass();
        if (class1==class2){
            System.out.println("s1和s2属于同一个类型");
        }else
            System.out.println("s1和s2不属于同一个类型");
D:\java_Learning\java\jdk1.8\bin\java.exe "-javaagent:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\lib\idea_rt.jar=58669:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\bin" -Dfile.encoding=UTF-8 -classpath D:\java_Learning\java\jdk1.8\jre\lib\charsets.jar;D:\java_Learning\java\jdk1.8\jre\lib\deploy.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\access-bridge-64.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\cldrdata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\dnsns.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jaccess.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jfxrt.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\localedata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\nashorn.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunec.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunjce_provider.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunmscapi.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunpkcs11.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\zipfs.jar;D:\java_Learning\java\jdk1.8\jre\lib\javaws.jar;D:\java_Learning\java\jdk1.8\jre\lib\jce.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfr.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfxswt.jar;D:\java_Learning\java\jdk1.8\jre\lib\jsse.jar;D:\java_Learning\java\jdk1.8\jre\lib\management-agent.jar;D:\java_Learning\java\jdk1.8\jre\lib\plugin.jar;D:\java_Learning\java\jdk1.8\jre\lib\resources.jar;D:\java_Learning\java\jdk1.8\jre\lib\rt.jar;C:\Users\86130\Desktop\Javase\out\production\Basicgrammar com.qf.Demo05.TestStudent
s1和s2属于同一个类型

hashCode()方法

  • public int hash code(){}

  • 返回该对象哈希码值。

  • 哈希值根据对象的地址或者字符串或数字使用hash算法计算出来的int类型的数值

  • 一般情况下相同对象返回相同哈希码

        //2hashCode方法
        System.out.println(s1.hashCode());
        System.out.println(s2.hashCode());
        Student s3 =s1;
        System.out.println(s3.hashCode());

补充

什么是哈希码(HashCode)

在Java中,哈希码代表对象的特征。

例如对象 String str1 = “aa”, str1.hashCode= 3104

String str2 = “bb”, str2.hashCode= 3106

String str3 = “aa”, str3.hashCode= 3104

根据HashCode由此可得出str1!=str2,str1==str3

哈希码产生的依据:哈希码并不是完全唯一的,它是一种算法,让同一个类的对象按照自己不同的特征尽量的有不同的哈希码,但不表示不同的对象哈希码完全不同。也有相同的情况,看程序员如何写哈希码的算法。

下面给出几个常用的哈希码的算法。

1:Object类的hashCode.返回对象的内存地址经过处理后的结构,由于每个对象的内存地址都不一样,所以哈希码也不一样。

2:String类的hashCode.根据String类包含的字符串的内容,根据一种特殊算法返回哈希码,只要字符串内容相同,返回的哈希码也相

同。

3:Integer类,返回的哈希码就是Integer对象里所包含的那个整数的数值,例如Integer i1=new Integer(100),i1.hashCode的值就是100 。由此可见,2个一样大小的Integer对象,返回的哈希码也一样。

tostring()方法

  • public String tostring(){}

  • 返回该对象的字符串表示(表示形式)

  • 可以根据程序需求覆盖该方法,如:展示对象各个属性值。

        //3toString方法
        System.out.println(s1.toString());
        System.out.println(s2.toString());

equals()方法

  • public boolean equals (object obj){}

  • 默认实现为(this==obj),比较两个对象地址是否相同。

  • 可进行覆盖,比较两个对象的内容是否相同

        //4equals方法:判断两个对象是否相等
        System.out.println(s1.equals(s2));
        Student s4 = new Student("小明",17);
        Student s5 = new Student("小明",17);
        System.out.println(s4.equals(s5));

equals()方法覆盖步骤

  1. 比较两个引用是否指向同一个对象

  2. 判断obj是否null

  3. 判断两个引用指向的实际对象类型是否一致

  4. 强制类型转换

  5. 依次比较各个属性是否相同

    public boolean equals(Object obj) {
        //1判断两个对象是否是同一个对象
        if (this == obj) {
            return true;
        }
        //2判断obj是否为null
        if (obj == null) {
            return false;
        }
        //判断两个引用指向的实际对象类型是否一致
        //if(this.getClass()==obj.getClass()){
        //}
        //instanceof它可以判断对象是否是某种类型
        if (obj instanceof Student) {
        }
        //4强制类型转换
        Student s =(Student)obj;
        //5比较属性
        if (this.name.equals(s.getName()) && this.age == s.getAge()){
            return true;
        }
        return false;
    }

finalize()方法

  • 当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象,进入回收队列。

  • 垃圾对象:没有有效引用指向此对象时为垃圾对象

  • 垃圾回收:由GC销毁垃圾对象,释放数据存储空间

  • 自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象

  • 手动回收机制:使用system.gc();通知JVM执行垃圾回收

包装类

  • 基本数据类型所对应的引用数据类型。

  • 基本数据类型是存放在栈里的

  • 引用数据类型数据是存放在堆里的

  • 基本数据类型没有任何属性和方法

  • Object可以统一所有的数据,包装类的默认值是null。

  • 包装类对应

![](file://C:\Users\86130\Desktop\java学习\java学习图片\java基本类型对应的包装类.png)

类型转换与装箱、拆箱

  • 把栈里的基本类型放到堆里,改为引用类型,称为装箱;

  • 把堆里的引用类型放到栈里,改为基本类型,称为拆箱;

  • 8种包装类提供不同类型间的转换方式;

    • Number父类提供6个共性方法。将引用类型转换为基本类型(抽象类Number是表示数字值可转换为基本数据类型平台类的超类bytedoublefloatintlongshort)

包装代码演示

package com.qf.Demo06;

public class Demo06 {
    public static void main(String[] args) {
        //创建一个变量,基本变量存放到栈中
        int i =100;
        //进行包装,将i存放到堆中使用Integer
        Integer integer1 = new Integer(i);
        System.out.println(integer1);
    }
}
D:\java_Learning\java\jdk1.8\bin\java.exe "-javaagent:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\lib\idea_rt.jar=62276:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\bin" -Dfile.encoding=UTF-8 -classpath D:\java_Learning\java\jdk1.8\jre\lib\charsets.jar;D:\java_Learning\java\jdk1.8\jre\lib\deploy.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\access-bridge-64.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\cldrdata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\dnsns.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jaccess.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jfxrt.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\localedata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\nashorn.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunec.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunjce_provider.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunmscapi.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunpkcs11.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\zipfs.jar;D:\java_Learning\java\jdk1.8\jre\lib\javaws.jar;D:\java_Learning\java\jdk1.8\jre\lib\jce.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfr.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfxswt.jar;D:\java_Learning\java\jdk1.8\jre\lib\jsse.jar;D:\java_Learning\java\jdk1.8\jre\lib\management-agent.jar;D:\java_Learning\java\jdk1.8\jre\lib\plugin.jar;D:\java_Learning\java\jdk1.8\jre\lib\resources.jar;D:\java_Learning\java\jdk1.8\jre\lib\rt.jar;C:\Users\86130\Desktop\Javase\out\production\Basicgrammar com.qf.Demo06.Demo06
100

Process finished with exit code 0

拆包代码演示

        //类型转换拆箱,引用类型转换为基本类型,将integer1转换为a
        Integer integer3 = Integer.valueOf(700);
        int a = integer3.intValue();
        System.out.println(a);

输出

D:\java_Learning\java\jdk1.8\bin\java.exe "-javaagent:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\lib\idea_rt.jar=62724:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\bin" -Dfile.encoding=UTF-8 -classpath D:\java_Learning\java\jdk1.8\jre\lib\charsets.jar;D:\java_Learning\java\jdk1.8\jre\lib\deploy.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\access-bridge-64.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\cldrdata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\dnsns.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jaccess.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jfxrt.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\localedata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\nashorn.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunec.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunjce_provider.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunmscapi.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunpkcs11.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\zipfs.jar;D:\java_Learning\java\jdk1.8\jre\lib\javaws.jar;D:\java_Learning\java\jdk1.8\jre\lib\jce.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfr.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfxswt.jar;D:\java_Learning\java\jdk1.8\jre\lib\jsse.jar;D:\java_Learning\java\jdk1.8\jre\lib\management-agent.jar;D:\java_Learning\java\jdk1.8\jre\lib\plugin.jar;D:\java_Learning\java\jdk1.8\jre\lib\resources.jar;D:\java_Learning\java\jdk1.8\jre\lib\rt.jar;C:\Users\86130\Desktop\Javase\out\production\Basicgrammar com.qf.Demo06.Demo06
700

Process finished with exit code 0

jdk1.5之后实现自动装箱拆箱

     //**jdk1.5之后实现自动装箱拆箱**
        int i2 =300;
        Integer integer4 =i2;
        System.out.println(i2);
        Integer integer5 =200;
        int i3 =integer5;
        System.out.println(i3);
300
200

类型转换与转型,拆箱

  • 8种包装类提供不同类型间的转换方式:

    • Number父类提供的6个共性方法。

    • passseXXX()静态方法。

    • valueOf()静态方法

    注意:需要保证类型兼容,否则抛出NumberFormatException异常。

  • 1.基本类型转换成字符串

    • 1.1使用+号

    • 1.2使用Integer中的toString()方法

    code show

            //1.基本类型换成字符串
            //1.1使用+hao
            int i = 15;
            String s1 =i+"";
            //1.2使用Ingteger中的toString()方法
            String s2=Integer.toString(i);
            String s3=Integer.toString(i,16);//toString方法可以进行进制转换
            System.out.println(s1);
            System.out.println(s2);
            System.out.println(s3);
    

输出

D:\java_Learning\java\jdk1.8\bin\java.exe "-javaagent:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\lib\idea_rt.jar=60495:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\bin" -Dfile.encoding=UTF-8 -classpath D:\java_Learning\java\jdk1.8\jre\lib\charsets.jar;D:\java_Learning\java\jdk1.8\jre\lib\deploy.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\access-bridge-64.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\cldrdata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\dnsns.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jaccess.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jfxrt.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\localedata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\nashorn.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunec.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunjce_provider.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunmscapi.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunpkcs11.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\zipfs.jar;D:\java_Learning\java\jdk1.8\jre\lib\javaws.jar;D:\java_Learning\java\jdk1.8\jre\lib\jce.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfr.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfxswt.jar;D:\java_Learning\java\jdk1.8\jre\lib\jsse.jar;D:\java_Learning\java\jdk1.8\jre\lib\management-agent.jar;D:\java_Learning\java\jdk1.8\jre\lib\plugin.jar;D:\java_Learning\java\jdk1.8\jre\lib\resources.jar;D:\java_Learning\java\jdk1.8\jre\lib\rt.jar;C:\Users\86130\Desktop\Javase\out\production\Basicgrammar com.qf.Demo06.Demo07
15
15
f

Process finished with exit code 0
  • 2.字符串转换成基本类型

    • 使用Integer.parseXXX();
            //2.字符串转换成基本类型
            //使用Integer.parseXXX();
            String test ="145";
            int i1 = Integer.parseInt(test);
            System.out.println(i1);
    
D:\java_Learning\java\jdk1.8\bin\java.exe "-javaagent:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\lib\idea_rt.jar=61270:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\bin" -Dfile.encoding=UTF-8 -classpath D:\java_Learning\java\jdk1.8\jre\lib\charsets.jar;D:\java_Learning\java\jdk1.8\jre\lib\deploy.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\access-bridge-64.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\cldrdata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\dnsns.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jaccess.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jfxrt.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\localedata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\nashorn.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunec.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunjce_provider.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunmscapi.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunpkcs11.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\zipfs.jar;D:\java_Learning\java\jdk1.8\jre\lib\javaws.jar;D:\java_Learning\java\jdk1.8\jre\lib\jce.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfr.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfxswt.jar;D:\java_Learning\java\jdk1.8\jre\lib\jsse.jar;D:\java_Learning\java\jdk1.8\jre\lib\management-agent.jar;D:\java_Learning\java\jdk1.8\jre\lib\plugin.jar;D:\java_Learning\java\jdk1.8\jre\lib\resources.jar;D:\java_Learning\java\jdk1.8\jre\lib\rt.jar;C:\Users\86130\Desktop\Javase\out\production\Basicgrammar com.qf.Demo06.Demo07

145

Process finished with exit code 0
  • boolean字符串形式转换成基本类型,"true"--->true 非"true"--->false
        //boolean字符串形式转换成基本类型,"true"--->true 非"true"--->false
        String s = "a";
        boolean b =Boolean.parseBoolean(s);
        System.out.println(b);

输出

D:\java_Learning\java\jdk1.8\bin\java.exe "-javaagent:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\lib\idea_rt.jar=61710:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\bin" -Dfile.encoding=UTF-8 -classpath D:\java_Learning\java\jdk1.8\jre\lib\charsets.jar;D:\java_Learning\java\jdk1.8\jre\lib\deploy.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\access-bridge-64.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\cldrdata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\dnsns.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jaccess.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jfxrt.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\localedata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\nashorn.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunec.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunjce_provider.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunmscapi.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunpkcs11.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\zipfs.jar;D:\java_Learning\java\jdk1.8\jre\lib\javaws.jar;D:\java_Learning\java\jdk1.8\jre\lib\jce.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfr.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfxswt.jar;D:\java_Learning\java\jdk1.8\jre\lib\jsse.jar;D:\java_Learning\java\jdk1.8\jre\lib\management-agent.jar;D:\java_Learning\java\jdk1.8\jre\lib\plugin.jar;D:\java_Learning\java\jdk1.8\jre\lib\resources.jar;D:\java_Learning\java\jdk1.8\jre\lib\rt.jar;C:\Users\86130\Desktop\Javase\out\production\Basicgrammar com.qf.Demo06.Demo07

false

Process finished with exit code 0

Integer缓冲区

  • 整数缓冲区

    • Java预先创建256个常用的整数包装型对象。

    • 在实际应用当中,对已创建对象进行复用。

    • 调用Interage创建常用变量进行装箱时,
      如果创建常用变量在-128到127之间直接调用Intgerage数组中对象直接给栈中的变量
      如果不在-128到127之间

public class Demo08 {
    public static void main(String[] args) {
        //测试题
        Integer integer1 = new Integer(100);
        Integer integer2 = new Integer(100);
        System.out.println(integer1==integer2);//比较的是integer1与integer2对象中的地址!!!

        Integer integer3 =100;//自动装箱
        Integer integer4 =100;
        System.out.println(integer3==integer4);//true

        Integer integer5 =200;//自动装箱,调用的不是构造器,而是Integer.valueOf()!!!
        Integer integer6 =Integer.valueOf(200);

        System.out.println(integer5==integer6);//false
        /*
        调用Interage创建常用变量进行装箱时,
        如果创建常用变量在-128到127之间直接调用Intgerage数组中对象直接给栈中的变量
        如果不在-128到127之间, 直接new Interage。

        源码
            public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

         */

    }
}
D:\java_Learning\java\jdk1.8\bin\java.exe "-javaagent:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\lib\idea_rt.jar=60039:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\bin" -Dfile.encoding=UTF-8 -classpath D:\java_Learning\java\jdk1.8\jre\lib\charsets.jar;D:\java_Learning\java\jdk1.8\jre\lib\deploy.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\access-bridge-64.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\cldrdata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\dnsns.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jaccess.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jfxrt.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\localedata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\nashorn.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunec.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunjce_provider.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunmscapi.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunpkcs11.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\zipfs.jar;D:\java_Learning\java\jdk1.8\jre\lib\javaws.jar;D:\java_Learning\java\jdk1.8\jre\lib\jce.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfr.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfxswt.jar;D:\java_Learning\java\jdk1.8\jre\lib\jsse.jar;D:\java_Learning\java\jdk1.8\jre\lib\management-agent.jar;D:\java_Learning\java\jdk1.8\jre\lib\plugin.jar;D:\java_Learning\java\jdk1.8\jre\lib\resources.jar;D:\java_Learning\java\jdk1.8\jre\lib\rt.jar;C:\Users\86130\Desktop\Javase\out\production\Basicgrammar com.qf.Demo06.Demo08
false
true
false

Process finished with exit code 0

String类

  • 字符串是常量,创建之后不可改变。

  • 字符串字面值存储在字符串池中,可以共享。

  • String s = "hello";产生一个对象,字符串池中存储。

  • String s = new String("Hello");//产生两个对象,一个在堆中,一个在字符串池中。

package com.qf.Demo06;

public class Demo09 {
    public static void main(String[] args) {
        String s = new String("今晚的月色真美");//今晚的月色真美存储在字符串池中,s在栈中指向字符串池中的"今晚月色很美"
        String s1 = new String("今晚的月色真美");//今晚的月色真美存储在字符串池中,s在栈中指向字符串池中的"今晚月色很美"
        String s4 ="今晚的月色不美";
        //"今晚的月色不美"赋值给s4时,给字符串赋值时,并没有修改数据,
        // 而是重新开辟了一块空间,有来没有变量指向的字符串'今晚的月色真美'变为垃圾。
        System.out.println(s==s1);
        String s2 =("今晚的月色真美");//在堆中和字符串池中都创建了"今晚月色很美",s1在栈中指向堆中的的"今晚月色很美"
        String s3 =("今晚的月色真美");//在堆中和字符串池中都创建了"今晚月色很美",s1在栈中指向堆中的的"今晚月色很美"
        System.out.println(s2==s3);
    }
}
D:\java_Learning\java\jdk1.8\bin\java.exe "-javaagent:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\lib\idea_rt.jar=62161:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\bin" -Dfile.encoding=UTF-8 -classpath D:\java_Learning\java\jdk1.8\jre\lib\charsets.jar;D:\java_Learning\java\jdk1.8\jre\lib\deploy.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\access-bridge-64.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\cldrdata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\dnsns.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jaccess.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jfxrt.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\localedata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\nashorn.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunec.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunjce_provider.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunmscapi.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunpkcs11.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\zipfs.jar;D:\java_Learning\java\jdk1.8\jre\lib\javaws.jar;D:\java_Learning\java\jdk1.8\jre\lib\jce.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfr.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfxswt.jar;D:\java_Learning\java\jdk1.8\jre\lib\jsse.jar;D:\java_Learning\java\jdk1.8\jre\lib\management-agent.jar;D:\java_Learning\java\jdk1.8\jre\lib\plugin.jar;D:\java_Learning\java\jdk1.8\jre\lib\resources.jar;D:\java_Learning\java\jdk1.8\jre\lib\rt.jar;C:\Users\86130\Desktop\Javase\out\production\Basicgrammar com.qf.Demo06.Demo09
false
true

Process finished with exit code 0

字符串常用方法

  • Length();返回字符串的长度;

  • charAt(int index);放回某个位置的字符;

  • contains(String str);判断是否包含某个字符串;

  • toCharArray();返回字符串对应的数组;

  • indexOf();返回子字符串首次出现的位置;

  • lastIdexOf();返回字符串最后一次出现的位置;

  • trim():去掉字符串前后的空格;

  • toUpperCase(): 将小写转成大写;toLowerCase();把大写转成小写;

  • endWith(String str):判断字符串是否以str结尾;starWith(str);判断是否以str开头;

  • replace(char aldChar,char newChar):将旧字符串替换成新字符串

  • split(String str):根据str做拆分。

package com.qf.Demo06;

public class Demo10 {
    public static void main(String[] args) {
        //字符串方法的使用
        //1.Length();返回字符串的长度
        //2.charAt(int index);返回某个位置的字符
        //3.contains(String str);判断是否包含某个字符串
        //4.toCharArray();返回字符串对应的数组
        //5.indexOf();返回子字符串首次出现的位置
        //6.lastIdexOf();返回字符串最后一次出现的位置
        //7.trim():去掉字符串前后的空格;
        //8.toUpperCase(): 将小写转成大写;toLowerCase();把大写转成小写;;
        //9.endWith(String str):判断字符串是否以str结尾;
        //starWith(str);判断是否以str开头;
        //10.replace(char aldChar,char newChar):将旧字符串替换成新字符串
        //11.split(String str):根据str做拆分。
        String content="Java是世界上最好的编程语言";
        System.out.println(content.length());
        System.out.println(content.charAt(14));
        System.out.println(content.contains("q"));
        System.out.println(content.toCharArray());
        System.out.println(content.indexOf("a"));
        System.out.println(content.lastIndexOf("言");
        String name1 = "     张 三    ";
        System.out.println(name1.trim());
        System.out.println(content.toUpperCase());
        System.out.println(content.toLowerCase());
        System.out.println(content.endsWith("言"));
        System.out.println(content.startsWith("java"));
        //10.replace(char aldChar,,,,char newChar):将旧字符串替换成新字符串;
        //11.split(String str):根据str做拆分。
        System.out.println(content.replace("编程","学习编程"));
        String say ="Java is this best      programing language,java fragrant";
        String[] arr =say.split("[ ,]+");//增加中框号后可加入多个拆分标识符,在中框号外加上加号,将多个相同的标识符视为一个!!!
        for (String string:arr){
            System.out.println(string);
    }
}
D:\java_Learning\java\jdk1.8\bin\java.exe "-javaagent:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\lib\idea_rt.jar=62311:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\bin" -Dfile.encoding=UTF-8 -classpath D:\java_Learning\java\jdk1.8\jre\lib\charsets.jar;D:\java_Learning\java\jdk1.8\jre\lib\deploy.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\access-bridge-64.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\cldrdata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\dnsns.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jaccess.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jfxrt.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\localedata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\nashorn.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunec.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunjce_provider.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunmscapi.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunpkcs11.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\zipfs.jar;D:\java_Learning\java\jdk1.8\jre\lib\javaws.jar;D:\java_Learning\java\jdk1.8\jre\lib\jce.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfr.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfxswt.jar;D:\java_Learning\java\jdk1.8\jre\lib\jsse.jar;D:\java_Learning\java\jdk1.8\jre\lib\management-agent.jar;D:\java_Learning\java\jdk1.8\jre\lib\plugin.jar;D:\java_Learning\java\jdk1.8\jre\lib\resources.jar;D:\java_Learning\java\jdk1.8\jre\lib\rt.jar;C:\Users\86130\Desktop\Javase\out\production\Basicgrammar com.qf.Demo06.Demo10
15false
=======================
java是世界上最好的编程语言
1
14
============================================
张 三
JAVA是世界上最好的编程语言
java是世界上最好的编程语言
true
false
=========================
Java是世界上最好的学习编程语言
Java
is
this
best
programing
language
java
fragrant

Process finished with exit code 0

补充方法equals()与compareTo()

  • equals()比较两个字符串是否相等,得出是true和false

    • s1.equalsIgnoreCase(s2);//不区分大小写
  • compareTo()比较大小,进行的是两个两个字符串编码值或者字符串长度的相减,得出的是整数。

            //补充两个方法equals(),compareTo()比较大小
            System.out.println("----------比较大小---------------");
            String s1="hello";
            String s2="HELLO";
            System.out.println(s1.equals(s2));
            System.out.println(s1.equalsIgnoreCase(s2));//不区分大小写

           String s3 ="abc";
           String s4 ="xyz";
            System.out.println(s3.compareTo(s4));
            //comparTo首先比较首个字符的编码大小进行编码值相减,首字符相同的话再比较第二个字符,以此类推。
            String s5= "abc";
            String s6= "abcdef";
            System.out.println(s5.compareTo(s6));
            //conpareTo字符两个String变量赋值的现有字符相同情况下,比较的是字符串长度。
输出结果
false
true
-23
-3

String案例展示

需求
已知String str = "this is a text"
1.将str中的单词单独获取出来
2.将str中的text替换为practice
3.在text前面插入一个easy
4.将每个单词的首字母改为大写

思路
 1.split(String str):根据str做拆分,再使用for循环进行换行;
 2.replace(char aldChar,char newChar):将text替换成practice;
 3.replace(char aldChar,char newChar):将text替换成easy text;
 4.先遍历数组,通过charAt返回首个字符,
 创建一个char型的包装类Character去接收这个首字母字符
 通过toUpperCase(): 将小写转成大写。
 然后通过substring进行拼接
 输出修改完成的字符串
  */
public class Demo11 {
    public static void main(String[] args) {
        String str = "this is a text";
        //1.将str中的单词单独获取出来
        String[] arr = str.split(" ");
        for (String s : arr) {
            System.out.println(s);
        }
        System.out.println(str.replace("text","practice"));
        System.out.println(str.replace("text","easy text"));

        System.out.println("---------------------------------------");

        //遍历arr数组
        for (int i = 0; i < arr.length; i++) {
            //通过charAt返回首字母;
            char first = arr[i].charAt(0);
            //通过toUpperCase方法将首字母进行大小写转换;并创建一个UpperCase的字符串变量将转换值赋值给这个字符串变量;
            char UpperCase = Character.toUpperCase(first);
            //通过substring方法得到arr数组第1个字符的字符与转换大写的首字母进行拼接,并赋值给arr1的字符串
            String arr1 = UpperCase+arr[i].substring(1);
            //输出结果
            System.out.println(arr1);
        }
            }

        }
D:\java_Learning\java\jdk1.8\bin\java.exe "-javaagent:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\lib\idea_rt.jar=56873:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\bin" -Dfile.encoding=UTF-8 -classpath D:\java_Learning\java\jdk1.8\jre\lib\charsets.jar;D:\java_Learning\java\jdk1.8\jre\lib\deploy.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\access-bridge-64.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\cldrdata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\dnsns.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jaccess.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jfxrt.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\localedata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\nashorn.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunec.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunjce_provider.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunmscapi.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunpkcs11.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\zipfs.jar;D:\java_Learning\java\jdk1.8\jre\lib\javaws.jar;D:\java_Learning\java\jdk1.8\jre\lib\jce.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfr.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfxswt.jar;D:\java_Learning\java\jdk1.8\jre\lib\jsse.jar;D:\java_Learning\java\jdk1.8\jre\lib\management-agent.jar;D:\java_Learning\java\jdk1.8\jre\lib\plugin.jar;D:\java_Learning\java\jdk1.8\jre\lib\resources.jar;D:\java_Learning\java\jdk1.8\jre\lib\rt.jar;C:\Users\86130\Desktop\Javase\out\production\Basicgrammar com.qf.Demo06.Demo11
this
is
a
text
this is a practice
this is a easy text
---------------------------------------
This
Is
A
Text

Process finished with exit code 0

StringBuffer和StringBuilder

  • StringBuffer:可变长字符串,JDK1.0提供,运行效率慢(比String快,相对于Stringbuilder慢),线程安全。

  • StringBuilder:可变长字符串,JDK5.0提供,运行效率块,线程不安全。(在单线程情况下优先使用StringBuilder)

    区别String方法:1.效率比String高,2.比String节省内存

  1. append();追加。
public class Demo01 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        //1 append();追加
        sb.append("java最牛逼");
        System.out.println(sb);
        sb.append(",世界第一");
        System.out.println(sb);
    }
}
D:\java_Learning\java\jdk1.8\bin\java.exe "-javaagent:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\lib\idea_rt.jar=55580:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\bin" -Dfile.encoding=UTF-8 -classpath D:\java_Learning\java\jdk1.8\jre\lib\charsets.jar;D:\java_Learning\java\jdk1.8\jre\lib\deploy.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\access-bridge-64.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\cldrdata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\dnsns.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jaccess.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jfxrt.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\localedata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\nashorn.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunec.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunjce_provider.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunmscapi.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunpkcs11.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\zipfs.jar;D:\java_Learning\java\jdk1.8\jre\lib\javaws.jar;D:\java_Learning\java\jdk1.8\jre\lib\jce.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfr.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfxswt.jar;D:\java_Learning\java\jdk1.8\jre\lib\jsse.jar;D:\java_Learning\java\jdk1.8\jre\lib\management-agent.jar;D:\java_Learning\java\jdk1.8\jre\lib\plugin.jar;D:\java_Learning\java\jdk1.8\jre\lib\resources.jar;D:\java_Learning\java\jdk1.8\jre\lib\rt.jar;C:\Users\86130\Desktop\Javase\out\production\Basicgrammar com.qf.Demo07.Demo01
java最牛逼
java最牛逼,世界第一
  1. insert();添加
package com.qf.Demo07;

import sun.nio.cs.SingleByte;

public class Demo01 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        //1 append();追加
        sb.append("java最牛逼");
        System.out.println(sb);
        sb.append(",世界第一");
        System.out.println(sb);
        //insert();添加,
        sb.insert(0,"我在第一");
        System.out.println(sb);
    }
}
D:\java_Learning\java\jdk1.8\bin\java.exe "-javaagent:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\lib\idea_rt.jar=55580:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\bin" -Dfile.encoding=UTF-8 -classpath D:\java_Learning\java\jdk1.8\jre\lib\charsets.jar;D:\java_Learning\java\jdk1.8\jre\lib\deploy.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\access-bridge-64.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\cldrdata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\dnsns.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jaccess.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jfxrt.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\localedata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\nashorn.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunec.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunjce_provider.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunmscapi.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunpkcs11.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\zipfs.jar;D:\java_Learning\java\jdk1.8\jre\lib\javaws.jar;D:\java_Learning\java\jdk1.8\jre\lib\jce.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfr.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfxswt.jar;D:\java_Learning\java\jdk1.8\jre\lib\jsse.jar;D:\java_Learning\java\jdk1.8\jre\lib\management-agent.jar;D:\java_Learning\java\jdk1.8\jre\lib\plugin.jar;D:\java_Learning\java\jdk1.8\jre\lib\resources.jar;D:\java_Learning\java\jdk1.8\jre\lib\rt.jar;C:\Users\86130\Desktop\Javase\out\production\Basicgrammar com.qf.Demo07.Demo01
java最牛逼
java最牛逼,世界第一
我在第一java最牛逼,世界第一

Process finished with exit code 0

3.replace();替换(含头不含尾)

        //replace();替换,指定位置的替换
        sb.replace(4,8,"c++");
        System.out.println(sb);
我在第一c++最牛逼,世界第一
Process finished with exit code 0

4.delent();删除

package com.qf.Demo07;

import sun.nio.cs.SingleByte;

public class Demo01 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        //1 append();追加
        sb.append("java最牛逼");
        System.out.println(sb);
        sb.append(",世界第一");
        System.out.println(sb);
        //insert();添加
        sb.insert(0,"我在第一");
        System.out.println(sb);
        //replace();替换,指定位置的替换(含头不含尾)
        sb.replace(4,8,"c++");
        System.out.println(sb);
        //delent();删除(含头不含尾)
        sb.delete(0,4);
        System.out.println(sb);
    }
}
D:\java_Learning\java\jdk1.8\bin\java.exe "-javaagent:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\lib\idea_rt.jar=56280:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\bin" -Dfile.encoding=UTF-8 -classpath D:\java_Learning\java\jdk1.8\jre\lib\charsets.jar;D:\java_Learning\java\jdk1.8\jre\lib\deploy.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\access-bridge-64.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\cldrdata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\dnsns.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jaccess.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jfxrt.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\localedata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\nashorn.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunec.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunjce_provider.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunmscapi.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunpkcs11.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\zipfs.jar;D:\java_Learning\java\jdk1.8\jre\lib\javaws.jar;D:\java_Learning\java\jdk1.8\jre\lib\jce.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfr.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfxswt.jar;D:\java_Learning\java\jdk1.8\jre\lib\jsse.jar;D:\java_Learning\java\jdk1.8\jre\lib\management-agent.jar;D:\java_Learning\java\jdk1.8\jre\lib\plugin.jar;D:\java_Learning\java\jdk1.8\jre\lib\resources.jar;D:\java_Learning\java\jdk1.8\jre\lib\rt.jar;C:\Users\86130\Desktop\Javase\out\production\Basicgrammar com.qf.Demo07.Demo01
java最牛逼
java最牛逼,世界第一
我在第一java最牛逼,世界第一
我在第一c++最牛逼,世界第一
c++最牛逼,世界第一

Process finished with exit code 0

BigDecimal的使用

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

  • 位置:java.math包中。

  • 作用:精确计算浮点数。

  • 创建方式:BigDecimal bd= new BigDecimal("1.0");

package com.qf.Demo07;

import java.math.BigDecimal;

public class Demo02 {
    public static void main(String[] args) {
        double d1 =1.8;
        double d2 = 0.9;
        Systm.out.println(d1-d2);//未输出0.1,原因是double类型,采用的是近似值处理方式。

        //BigDecimal,大的浮点数精确计算
        BigDecimal bd1 =new BigDecimal("1.8");
        BigDecimal bd2 =new BigDecimal("0.9");//采用字符串进行存储数值,防止变成近似值输入
        //采用subtract()比较,对象间不能直接进行加减类的运算
        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);
        //除法在除不尽的情况下会报ArithmeticException
        BigDecimal r4 = bd1.divide(bd2);
        System.out.println(r4);
    }
}
D:\java_Learning\java\jdk1.8\bin\java.exe "-javaagent:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\lib\idea_rt.jar=58884:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\bin" -Dfile.encoding=UTF-8 -classpath D:\java_Learning\java\jdk1.8\jre\lib\charsets.jar;D:\java_Learning\java\jdk1.8\jre\lib\deploy.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\access-bridge-64.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\cldrdata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\dnsns.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jaccess.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jfxrt.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\localedata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\nashorn.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunec.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunjce_provider.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunmscapi.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunpkcs11.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\zipfs.jar;D:\java_Learning\java\jdk1.8\jre\lib\javaws.jar;D:\java_Learning\java\jdk1.8\jre\lib\jce.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfr.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfxswt.jar;D:\java_Learning\java\jdk1.8\jre\lib\jsse.jar;D:\java_Learning\java\jdk1.8\jre\lib\management-agent.jar;D:\java_Learning\java\jdk1.8\jre\lib\plugin.jar;D:\java_Learning\java\jdk1.8\jre\lib\resources.jar;D:\java_Learning\java\jdk1.8\jre\lib\rt.jar;C:\Users\86130\Desktop\Javase\out\production\Basicgrammar com.qf.Demo07.Demo02
0.9
0.9
2.7
1.62
2

Process finished with exit code 0de 0
  • BigDecimal对象.减法subtract();

  • BigDecimal对象.加法add();

  • BigDecimal对象.乘法multiply();

  • BigDecimal对象.除法divide();

    • 在除不尽情况下,选择保留的小数位数,再选择ROUND_HALF_UP进行四舍五入。
            BigDecimal r5 = bd1.divide(bd2,3,BigDecimal.ROUND_HALF_UP);
            System.out.println(r5);
    
    2.000)
    

    ![](file://C:\Users\86130\Desktop\java学习\java学习图片\BigDecimal除法的处理.png)

Date类

  • Date表示特定的瞬间,精确到毫秒。Date类中的大部分方法都已经备Calendar类中的方法所取代。

  • 时间单位

    • 1秒=1000毫秒

    • 1毫秒=1000微秒

    • 1微秒=1000纳秒

package com.qf.Demo07;

import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;

import java.sql.SQLOutput;
import java.util.Date;

public class Demo03 {
    public static void main(String[] args) {
        //创建Date对象
        //今天的时间
        Date date1 = new Date();
        System.out.println(date1.toString());
        System.out.println(date1.toLocaleString());
        //创建一个昨天的时间
        Date date2 = new Date(date1.getTime()-(24*60*60*1000*2));
        System.out.println(date2);
        System.out.println(date2.toLocaleString());
        //测试此日期是否在指定日期之后
        boolean test = date1.after(date2);
        System.out.println(test);
        //测试此日期是否在指定日期之前
        boolean test1 = date1.before(date2);
        System.out.println(test1);
        //测试此日期是否与指定日期相同
        boolean test2 = date1.equals(date2);
        System.out.println(test2);
        //比较此日期是否与指定日期大小,如果指定日期大返回-1,如果指定日期小返回1,如果相同返回0.
        int test3 = date1.compareTo(date2);
        System.out.println(test3);
    }
}
D:\java_Learning\java\jdk1.8\bin\java.exe "-javaagent:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\lib\idea_rt.jar=61230:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\bin" -Dfile.encoding=UTF-8 -classpath D:\java_Learning\java\jdk1.8\jre\lib\charsets.jar;D:\java_Learning\java\jdk1.8\jre\lib\deploy.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\access-bridge-64.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\cldrdata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\dnsns.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jaccess.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jfxrt.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\localedata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\nashorn.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunec.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunjce_provider.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunmscapi.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunpkcs11.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\zipfs.jar;D:\java_Learning\java\jdk1.8\jre\lib\javaws.jar;D:\java_Learning\java\jdk1.8\jre\lib\jce.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfr.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfxswt.jar;D:\java_Learning\java\jdk1.8\jre\lib\jsse.jar;D:\java_Learning\java\jdk1.8\jre\lib\management-agent.jar;D:\java_Learning\java\jdk1.8\jre\lib\plugin.jar;D:\java_Learning\java\jdk1.8\jre\lib\resources.jar;D:\java_Learning\java\jdk1.8\jre\lib\rt.jar;C:\Users\86130\Desktop\Javase\out\production\Basicgrammar com.qf.Demo07.Demo03
Mon Mar 21 21:09:31 CST 2022
2022-3-21 21:09:31
Sat Mar 19 21:09:31 CST 2022
2022-3-19 21:09:31
true
false
false
1

Process finished with exit code 0

Calendar类

  • Calendar提供了获取或设置各种日历字段的方法。

  • 构造方法

    • prontected Calendar():由于修饰符是protected,所以无法直接创建该对象。

    • 其他方法

    ![](file://C:\Users\86130\Desktop\java学习\java学习图片\Calendar类常用方法.png)

    package com.qf.Demo07;
    
    import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
    
    import java.util.Calendar;
    
    public class Demo04 {
        public static void main(String[] args) {
            Calendar calendar = Calendar.getInstance();//Calendar为保护类,无法直接new这个对象,通过getInstance获取这个对象
            System.out.println(calendar.getTime().toLocaleString());//直接通ToString打印的时间不方便阅读,通过getTime()打印
            System.out.println(calendar.getTimeInMillis());
            //获取时间信息
            //获取年
            int year = calendar.get(Calendar.YEAR);
            //获取月
            int month = calendar.get(Calendar.MONTH);
            //获取日
            int day = calendar.get(Calendar.DAY_OF_MONTH);
            //获取小时
            int hour = calendar.get(Calendar.HOUR);//12小时制
            int hour1 = calendar.get(Calendar.HOUR_OF_DAY);//24小时制
            //获取分钟
            int minute = calendar.get(Calendar.MINUTE);
            //获取秒
            int secont = calendar.get(Calendar.SECOND);
            System.out.println(year+"年"+month+"月"+day+"日"+hour+":"+minute+":"+secont);
            //修改时间
            Calendar calendar1 = Calendar.getInstance();
            calendar1.set(Calendar.DAY_OF_MONTH,6);
            System.out.println(calendar1.getTime().toLocaleString());
            //增加或减少时间
            calendar1.add(Calendar.DAY_OF_MONTH,1);
            System.out.println(calendar1.getTime().toLocaleString());
            calendar1.add(Calendar.DAY_OF_MONTH,-3);
            System.out.println(calendar1.getTime().toLocaleString());
            //补充 获取当前时间的最大值或最小值
            int max = calendar1.getActualMaximum(Calendar.DAY_OF_MONTH);
            System.out.println(max);
            int min = calendar1.getActualMinimum(Calendar.DAY_OF_MONTH);
            System.out.println(min);
        }
    }
    
D:\java_Learning\java\jdk1.8\bin\java.exe "-javaagent:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\lib\idea_rt.jar=61698:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\bin" -Dfile.encoding=UTF-8 -classpath D:\java_Learning\java\jdk1.8\jre\lib\charsets.jar;D:\java_Learning\java\jdk1.8\jre\lib\deploy.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\access-bridge-64.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\cldrdata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\dnsns.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jaccess.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jfxrt.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\localedata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\nashorn.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunec.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunjce_provider.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunmscapi.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunpkcs11.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\zipfs.jar;D:\java_Learning\java\jdk1.8\jre\lib\javaws.jar;D:\java_Learning\java\jdk1.8\jre\lib\jce.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfr.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfxswt.jar;D:\java_Learning\java\jdk1.8\jre\lib\jsse.jar;D:\java_Learning\java\jdk1.8\jre\lib\management-agent.jar;D:\java_Learning\java\jdk1.8\jre\lib\plugin.jar;D:\java_Learning\java\jdk1.8\jre\lib\resources.jar;D:\java_Learning\java\jdk1.8\jre\lib\rt.jar;C:\Users\86130\Desktop\Javase\out\production\Basicgrammar com.qf.Demo07.Demo04
2022-3-21 22:23:40
1647872620359
202222110:23:40
2022-3-6 22:23:40
2022-3-7 22:23:40
2022-3-4 22:23:40
31
1

Process finished with exit code 0

SimpleDateFormat类

  • SimpleDateFormat是一个以语言环境有关的方式来格式化和解析日期的具体类

  • 进行格式化(日期->文本)、解析(文本->日期)。

  • 常用的时间模式字母

![](file://C:\Users\86130\Desktop\java学习\java学习图片\常用的时间模式字母.png)

代码实例及注意点

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.SimpleTimeZone;

public class Demo05 {
    public static void main(String[] args) throws Exception{
        //创建以一个SimpleDateFormat类,并标准日期文本
        SimpleDateFormat s1 = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");
        //创建一个Date类,获取时间
        Date date = new Date();
        //格式化  把日期转成字符串, //通过format方法格式化date,并将通过SimpleDateFormat标准过的date值赋值给str
        String str = s1.format(date);
        //输出str
        System.out.println(str);
        //解析 把字符串转成日期,使用parse方法,1、必要要按照SimpleDateFormat类参数格式;2.必须要在main方法后加上throws Exception抛出异常;
        Date date1 = s1.parse("1994年10月22日12:12:12");
        System.out.println(date1.toLocaleString());
    }
}
D:\java_Learning\java\jdk1.8\bin\java.exe "-javaagent:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\lib\idea_rt.jar=61066:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\bin" -Dfile.encoding=UTF-8 -classpath D:\java_Learning\java\jdk1.8\jre\lib\charsets.jar;D:\java_Learning\java\jdk1.8\jre\lib\deploy.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\access-bridge-64.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\cldrdata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\dnsns.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jaccess.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jfxrt.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\localedata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\nashorn.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunec.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunjce_provider.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunmscapi.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunpkcs11.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\zipfs.jar;D:\java_Learning\java\jdk1.8\jre\lib\javaws.jar;D:\java_Learning\java\jdk1.8\jre\lib\jce.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfr.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfxswt.jar;D:\java_Learning\java\jdk1.8\jre\lib\jsse.jar;D:\java_Learning\java\jdk1.8\jre\lib\management-agent.jar;D:\java_Learning\java\jdk1.8\jre\lib\plugin.jar;D:\java_Learning\java\jdk1.8\jre\lib\resources.jar;D:\java_Learning\java\jdk1.8\jre\lib\rt.jar;C:\Users\86130\Desktop\Javase\out\production\Basicgrammar com.qf.Demo07.Demo05
2022032214:44:03
1994-10-22 12:12:12

Process finished with exit code 0

System类

  • System系统类,主要用于获取系统的属性数据和其他操作,构造方法私有的。

![](file://C:\Users\86130\Desktop\java学习\java学习图片\System类主要方法.png)

code示例及注意点

package com.qf.Demo07;

import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;

import java.util.Arrays;

public class Demo06 {
    public static void main(String[] args) {
        int arr[] = {12,24,28,26,30,22};
        int dest[] =new int[6];
        //1.arraycopy 数组的复制
        //src 源数组
        //srcPos 从哪个位置开始复制
        //dest 目标数组
        //destpos 目标数组的位置
        //length 复制的长度
        System.arraycopy(arr,0,dest,0,6);
        System.out.println(Arrays.toString(dest));
        //2.Arrays.copyOf(original,newLength)使用的就是arraycopy的方法
        //获取系统时间,打印是unix的元年时间1970.1.1开始的毫秒时
        System.out.println(System.currentTimeMillis());

        long start = System.currentTimeMillis();
        for (int i = -999999999; i <999999999 ; i++) {
            for (int j = -999999999; j <999999999 ; j++) {
                int result = i+j;
            }
        }
        long end =System.currentTimeMillis();
        System.out.println("用时"+(end-start));

        //3.System.gc();告诉垃圾回收器回收垃圾
        student a = new student("aaa", 17);
        new student("bbb",17);
        new student("ccc",17);//没有变量指向的对象会变成垃圾对象
        System.gc();

        //4.退出jvm
        System.exit(0);
        System.out.println("jvm已经退出");
    }
}
D:\java_Learning\java\jdk1.8\bin\java.exe "-javaagent:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\lib\idea_rt.jar=65527:D:\java_Learning\idea\IntelliJ IDEA Community Edition 2021.3.2\bin" -Dfile.encoding=UTF-8 -classpath D:\java_Learning\java\jdk1.8\jre\lib\charsets.jar;D:\java_Learning\java\jdk1.8\jre\lib\deploy.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\access-bridge-64.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\cldrdata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\dnsns.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jaccess.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\jfxrt.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\localedata.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\nashorn.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunec.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunjce_provider.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunmscapi.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\sunpkcs11.jar;D:\java_Learning\java\jdk1.8\jre\lib\ext\zipfs.jar;D:\java_Learning\java\jdk1.8\jre\lib\javaws.jar;D:\java_Learning\java\jdk1.8\jre\lib\jce.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfr.jar;D:\java_Learning\java\jdk1.8\jre\lib\jfxswt.jar;D:\java_Learning\java\jdk1.8\jre\lib\jsse.jar;D:\java_Learning\java\jdk1.8\jre\lib\management-agent.jar;D:\java_Learning\java\jdk1.8\jre\lib\plugin.jar;D:\java_Learning\java\jdk1.8\jre\lib\resources.jar;D:\java_Learning\java\jdk1.8\jre\lib\rt.jar;C:\Users\86130\Desktop\Javase\out\production\Basicgrammar com.qf.Demo07.Demo06
[12, 24, 28, 26, 30, 22]
1647937295511
用时7
垃圾回收了ccc   17
垃圾回收了bbb   17

Process finished with exit code 0

总结

  • 内部类:

    • 在一个类的内部再定义一个完整的类。

    • 成员内部类、静态内部类、局部内部类、匿名内部类。

  • Objetct类:

    • 所有类的直接或间接父类,可存储任何对象。
  • 包装类

    • 基本数据类型所对应的引用数据类型,可以使Object所统一所有数据。
  • String类

    • 字符串是常量,创建之后不可改变,字面值保存再字符串池中,可以共享。
  • BigDecimal:

    • 可以精确计算浮点数值。
  • Date

    • 特定时间
  • Calendar

    • 日历
  • SImpleDateFormat

    • 格式化时间
  • System

    • 系统类
posted @   sh_study  阅读(59)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示