JavaCommonClass
常用内部类
概念:在一个类的内部再定义一个完整的类:
-
特点:编译之后可生成独立的字节码文件
-
内部类:可直接访问外部类的私有成员,而不破坏封装
-
可为外部提供必要的内部功能组件
-
成员内部类
-
静态内部类
-
局部内部类
-
匿名内部类
成员内部类

-
在类的内部定义,与实例变量,实例方法同级别的类
-
通过成员内部类调用外部类不破化封装
-
外部类的一个实例部分,创建内部类对象,必须依赖外部类对象。
注意点:
当外部类,内部类存在重名属性是,会优先访问内部类属性。

在属性冲突情况下需要调用外部类属性时,外部类名.this.属性名
System.out.println(Outer.this.name);//当内部类与外部类存在属性冲突时调用外部类方法
成员内部类不能定义静态成员(但是可以包含静态常量)final
静态内部类
-
不依赖外部类对象,可直接创建或通过类名访问,可申明静态成员。
-
只能直接访问外部类的静态成员(实例成员需要实例化外部类对象)
outher.Inner.inner = new outer.Inner();
outer.Inner.show();

局部内部类
-
定义在外部类方法,作用范围和创建对象范围仅限当前对象方法。
-
局部内部类访问外部类当前方法中的局部变量时,因无法保障变量的生命周期与自身相同,变量必须修饰final
-
限制类的使用范围(仅在当前方法)

匿名内部类
-
没有类名的局部类(一切特征与局部内部类相同)。
-
编译后加载
-
必须继承一个父类或者实现一个接口
-
定义类,实现类创建对象的语法合并,只能创建一个该类的对象
-
优点:减少代码量
-
缺点:可读性差

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()方法覆盖步骤
-
比较两个引用是否指向同一个对象
-
判断obj是否null
-
判断两个引用指向的实际对象类型是否一致
-
强制类型转换
-
依次比较各个属性是否相同
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。
-
包装类对应

类型转换与装箱、拆箱
-
把栈里的基本类型放到堆里,改为引用类型,称为装箱;
-
把堆里的引用类型放到栈里,改为基本类型,称为拆箱;
-
8种包装类提供不同类型间的转换方式;
-
- Number父类提供6个共性方法。将引用类型转换为基本类型(抽象类
Number
是表示数字值可转换为基本数据类型平台类的超类byte
,double
,float
,int
,long
和short
)
- Number父类提供6个共性方法。将引用类型转换为基本类型(抽象类
包装代码演示
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
15
言
false
=======================
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节省内存
- 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最牛逼,世界第一
- 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)

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,所以无法直接创建该对象。
-
其他方法

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
2022年2月21日10: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是一个以语言环境有关的方式来格式化和解析日期的具体类
-
进行格式化(日期->文本)、解析(文本->日期)。
-
常用的时间模式字母

代码实例及注意点
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
2022年03月22日14:44:03
1994-10-22 12:12:12
Process finished with exit code 0
System类
- System系统类,主要用于获取系统的属性数据和其他操作,构造方法私有的。

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
- 系统类
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通