Java SE07_常用类笔记

常用类

1 内部类

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

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

特点:

  • 编译之后可生成独立的字节码文件
  • 内部类可直接访问外部类私有成员,而不破坏封装
  • 可为外部类提供必要的内部功能组件

Body$Header.class Body.class

// 身体 
class Body{
    // 头部  
    class Header{    
    // 也会生成class文件  
    } 
}

1.1 成员内部类

  • 在类的内部定义,与实例变量、实例方法同级别的类
  • 外部类的一个实例部分,创建内部类对象时,必须依赖外部类对象
  • 当外部类、内部类存在重名属性时,会优先访问内部类属性
  • 成员内部类里不能定义静态成员、可以包含静态常量(final)
//外部类
public class Outer {
    //实例变量
    private String name = "张三";
    private int age = 20;

    //内部类
    class Inner{
        private String address="北京";
        private String phone = "110";
        //属性和外部类的属性名字相同时,默认访问内部类的,除非使用Outer.this.
        private String name = "李四";

//        private static String country = "中国";//成员内部内不能包括静态成员
//        private static final String country = "中国";//但是可以包括静态常量

        //方法
        public void show(){
            //打印外部类的属性 Outer.this.
            System.out.println("打印外部类的属性:");
            System.out.println(Outer.this.name);//使用这种会更加明确
            System.out.println(age);
            //打印内部类的属性
            System.out.println("打印内部类的属性:");
            System.out.println(this.name);//使用这种会更加明确
            System.out.println(address);
            System.out.println(phone);
        }
    }
}

public class OuterTest {
    //测试类
    public static void main(String[] args) {
        // 1.创建外部类对象
        Outer outer = new Outer();
        // 2.创建内部类对象
        Outer.Inner inner = outer.new Inner();
        //一步到位
//        Outer.Inner inner = new Outer().new Inner();
        inner.show();
    }
}

1.2 静态内部类

  • 不依赖外部类对象,可直接创建或通过类名访问,可声明静态成员
//外部类
public class Outer {
    //实例变量
    private String name = "xxx";
    private int age = 18;

    //静态内部类,和外部类相同,只有内部类可以通过static修饰,外部类不可以用static修饰
    static class Inner{
        private String address="上海";
        private String phone="111";
        //静态成员
        private static int count = 1000;

        public void show(){
            //调用外部类的属性
            //1.先创建外部类对象
            Outer outer = new Outer();
            //2.调用外部类对象的属性
            //打印外部类的属性
            System.out.println("打印外部类的属性:");
            System.out.println(outer.name);
            System.out.println(outer.age);
            //调用静态内部类的属性和方法
            //打印静态内部类的属性
            System.out.println("打印静态内部类的属性:");
            System.out.println(address);
            System.out.println(phone);
            //调用静态内部类的静态属性
            System.out.println(Inner.count);
        }
    }
}

public class OuterTest {
    //测试类
    public static void main(String[] args) {
        //直接创建静态内部类对象
        Outer.Inner inner = new Outer.Inner();
        inner.show();
    }
}

1.3 局部内部类

  • 定义在外部类方法中,作用范围和创建对象范围仅限于当前方法
  • 局部内部类访问外部类当前方法中的局部变量时,因无法保障变量的生命周期与自身相同,变量必须修饰为final
  • 限制类的使用范围
//外部类
public class Outer {
    //实例变量
    private String name = "程序员";
    private int age = 22;

    public void show(){
        //定义局部变量
        String address = "深圳";
        //局部内部类:注意不能加任何访问修饰符
        class Inner{
            //局部内部类的属性
            private String email="158@qq.com";
            private String phone="1588888888";
            //属性和外部类的属性名字相同时,默认访问内部类的,除非使用Outer.this.
            private int age = 33;
            //静态成员
            private int count = 1000;

            public void show2() {
                //打印外部类的属性
                System.out.println("打印外部类的属性:");
                System.out.println(Outer.this.name);//使用这种会更加明确
                System.out.println(Outer.this.age); //22
                //打印局部内部类的属性
                System.out.println("打印局部内部类的属性:");
                System.out.println(age); //33 如果内部类无age则为22
                System.out.println(this.phone);//使用这种会更加明确
                System.out.println(email);
                //打印局部变量(不能修改),jdk1.7要求变量必须为常量,jdk1.8之后自动添加final
                System.out.println("打印局部变量的属性:");
                System.out.println(address);

            }
        }
        //创建局部内部类对象
        Inner inner = new Inner();
        inner.show2();
    }
}

public class OuterTest {
    //测试类
    public static void main(String[] args) {
        Outer out = new Outer();
        out.show();

    }
}

1.4 匿名内部类

  • 没有类名的局部内部类(一切特征都与局部内部类相同)
  • 必须继承一个父类或者实现一个接口
  • 定义类、实现类、创建对象的语法合并,只能创建一个该类的对象
  • 优点:减少代码量
  • 缺点可读性较差
//使用匿名内部类优化(相当于创建了一个局部类)
Usb usb = new Usb(){ //Usb为一个接口,也可以是Monuse(实现了Usb的一个方法),不会影响到Monuse里的方法
    @Override
    public void service() {
        System.out.println("连接电脑成功,风扇开始工作了...");
    }
};
usb.service();

2 Object类

  • 超类、基类,所有类的直接或间接父类,位于继承树的最顶层
  • 任何类,如没有书写extends显示继承某个类,都默认直接继承Object类,否则为间接继承
  • Object类中所定义的方法,是所有对象都具备的方法
  • Object类型可以存储任何对象
    • 作为参数,可接受任何对象
    • 作为返回值,可返回任何对象

2.1 getClass()方法

  • 返回引用中存储的实际对象类型
  • 应用:通常用于判断两个引用中实际存储对象类型是否一致
  • 返回Class类型
//判断s1和s2是不是同一个类型,getClass返回 class类型
Class class1 = s1.getClass();
Class class2 = s2.getClass();
if(class1.equals(class2)){
    System.out.println("s1和s2属于同一个对象");
}else {
    System.out.println("s1和s2不属于同一个对象");
}

2.2 hashCode()方法

  • 返回该对象的哈希码值
  • 哈希值根据对象的地址或字符串或数字使用hash算法计算出来的int类型的值
  • 一般情况下相同对象返回相同哈希码
  • 返回int类型
s1.hashCode();
s2.hashCode();
// 自然不同
Student s3 = s1; // 此时s3的hashCode与s1相同

2.3 toString()方法

  • 返回该对象的字符串表示(表现形式)
  • 可以根据程序需求覆盖该方法,如:展示对象各个属性值
  • 返回String类型
//toString方法
System.out.println(s1.toString());//Object的toString直接打印包+类名+哈希值
System.out.println(s2.toString());//重写的toString直接打印该类的具体信息

2.4 equals()方法

  • 默认实现为(this == obj), 比较两个对象地址是否相同
  • 可进行覆盖,比较两个对象的内容是否相同
  • 返回boolean类型

equals()方法覆盖步骤

  1. 比较两个引用是否指向同一个对象。
  2. 判断obj是否为nul1。
  3. 判断两个引用指向的实际对象类型是否一致。
  4. 强制类型转换。
  5. 依次比较各个属性值是否相同。
//4.equals方法:判断两个对象值是否相等
System.out.println(s1.equals(s2));//false
System.out.println(s1.equals(s3));//true
Student s4 = new Student("小明", 17);
Student s5 = new Student("小明", 17);
System.out.println(s4.equals(s5));//true

//重写equals方法
@Override
public boolean equals(Object o) {
    //1.判断两个对象是否是同一个引用
    if (this == o) return true;
    //2.判断o是否为空
    //3.判断是否是同一个类型(getClass())(也可以 o instanceof Student)
    //instanceof判断对象是否是某种类型
    if (o == null || getClass() != o.getClass()) return false;
    //4.强制类型转换
    Student student = (Student) o;
    //5.比较属性
    return age == student.age &&
        name.equals(student.name);
}

2.5 finalize()方法

  • 当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象,进入回收队列
  • 垃圾对象:没有有效引用指向此对象时,为垃圾对象
  • 垃圾回收:由gc销毁垃圾对象,释放数据存储空间
  • 自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象
  • 手动回收机制:使用System.gc();通知JVM执行垃圾回收
//finalize回收垃圾
new Student("小明", 17);
System.gc();
System.out.println("回收垃圾");
//会打印回收垃圾 小明对象被回收了...

//重写finalize方法
@Override
protected void finalize() throws Throwable {
	System.out.println(this.name+"对象被回收了...");
}

3 包装类

  • 基本数据类型所对应的引用数据类型
  • Object 可统一所有数据,包装类的默认值是null
类型 包装类 字节位数
byte Byte 8位,-128~127
boolean Boolean 1位,默认false
short Short 16位,-32768~32767
char Character 16位,存储Unicode码
int Integer 32位
long Long 64位
float Float 32位
double Double 64位

3.1 类型转换与装箱、拆箱

  • 8种包装类提供不用类型间的转换方式
    1. Number父类中提供的6个共性方法
    2. parseXXX( )静态方法
    3. valueOf( )静态方法
  • 注意:需保证类型兼容,否则抛出NumberFormatException异常
	public static void main(String[] args) {

        //类型转换:装箱:基本类型 -> 引用类型, 基本类型转成引用类型的过程
        //基本类型
        int num1 = 10;
        //第一种:使用Integer类创建对象
        Integer integer1 = new Integer(num1);
        //第二种:使用Integer类valueOf方法
        Integer integer2 = Integer.valueOf(num1);

        //类型转换,拆箱,引用类型转成基本数据类型
        Integer integer3 = new Integer(100);
        int num2 = integer3.intValue();

        //从jdk1.5之后,提供自动装箱和拆箱
        int age = 18;
        //自动装箱
        Integer integer4 = age;
        //自动拆箱
        int age2 = integer4;

        //基本类型和字符串之间的转换
        //1.基本类型 -> 字符串
        int n1 = 100;
        //1.1 使用+号
        String s1 = n1+"";
        //1.2 使用Integer中的toString方法
        String s2 = Integer.toString(n1);//Integer.toString(n1, radix); radix表示的是进制数

        //2.字符串 -> 基本类型
        String str = "150";
        //使用Integer.parsXXX()
        int n2 = Integer.parseInt(str);

        //3.boolean -> 基本类型,"true"->true,非"true"->false
        String str2 = "true";
        String str3 = "ture";
        System.out.println(Boolean.parseBoolean(str2));//true
        System.out.println(Boolean.parseBoolean(str3));//false

    }

3.2 整数缓冲区

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

    Integer integer3 = 100;//自动装箱,Integer.ValueOf
    Integer integer4 = 100;
    //IntegerCache缓存区数组 [-128, 127],在缓冲区的地址相同所以为true
    System.out.println(integer3 == integer4);//true

    Integer integer5 = 200;
    Integer integer6 = 200;
    //因为缓存区数组 [-128, 127],超过之后不能进入缓冲区,没在缓冲区的就需要new Integer,地址不同所以为false
    System.out.println(integer5 == integer6);//false

    Integer integer7 = Integer.valueOf("200");//只有int类型的可以自动装箱,其他的需要手动装箱
    Integer integer8 = Integer.valueOf("200");
    System.out.println(integer7 == integer8);//false
}

4 String类

  • 字符串是常量,创建之后不可改变
  • 字符串字面值存储在字符串池中,可以共享
  • String s = "Hello";产生一个对象,在字符串常量池中存储
  • String s = new String("Hello"); 产生两个对象,堆、池各一个

4.1 常用方法

	public static void main(String[] args) {
        //字符串方法的使用

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

        String content = "java是最好的语言,java No.1,java最好";
        System.out.println(content.length());//27 字符串长度
        System.out.println(content.charAt(0));//j 返回第一个位置的字符
        System.out.println(content.charAt(content.length()-1));//好 返回最后一个位置的字符
        System.out.println(content.contains("java"));//true 判断是否包含'java'
        System.out.println(content.contains("php"));//false 判断是否包含'php'


        //4.toCharArray(); 返回字符串对应数组
        //5.indexOf(); 返回子字符串首次出现的位置
        //6.lastIndexOf(); 返回字符串最后一次出现的位置
        System.out.println(Arrays.toString(content.toCharArray()));//[j, a, v, a, 是, 最, 好, 的, 语, 言, ,, j, a, v, a,  , N, o, ., 1]
        System.out.println(content.indexOf("java"));//0 第一个出现的下标
        System.out.println(content.indexOf("java", 4));// 从索引4开始找 返回11
        System.out.println(content.lastIndexOf("java"));//21,最后一个出现的下标

        //7.trim(); //去掉字符串前后空格
        //8.toUpperCase(); toLowerCase(); 转换大小写
        //9.endWith(str); startWith(str);  判断是否以str 结尾、开头
        String content2 = "  Hello World  ";
        System.out.println(content2.trim());//Hello World 去掉前后空格
        System.out.println(content2.toUpperCase());//  HELLO WORLD 转大写
        System.out.println(content2.toLowerCase());//  hello world 转小写
        String filename = "hello.java";
        System.out.println(filename.endsWith(".java"));//true 判断是否以.java结尾
        System.out.println(filename.startsWith("hello"));//true 判断是否以hello开头

        //10.replace(char old, char new); 用心的字符或字符串替换旧的字符或字符串
        //11.split(); 对字符串拆分
        //content="java是最好的语言,java No.1,java最好"
        System.out.println(content.replace("java", "php"));//php是最好的语言,php No.1,php最好
        String say = "java is the best programing language";
        String[] s = say.split(" ");//split("[ ,]+")可以以空格和逗号一起分割,+号代表可以出现多个(贪婪匹配)
        System.out.println(s.length);//6 切割后的数组长度
        for (String str : s){
            System.out.print(str+"\t");//java	is	the	best	programing	language
        }
        System.out.println();

        //补充两个equals/compareTo();比较大小
        //equalsIgnoreCase忽略大写写进行比较
        String s1 = "hello";
        String s2 = "HELLO";
        System.out.println(s1.equals(s2));//false 比较值
        System.out.println(s1.equalsIgnoreCase(s2));//true 忽略大小写比较

        String s3 = "abc";//97
        String s4 = "xyz";//120
        //compareTo(); 两字符不同时比较字符字典序的ascii码相减
        //字符相同时比较长度 返回差值
        System.out.println(s3.compareTo(s4));//-23
    }

4.2 案例演示

已知String str = "this is a text",需求:

  1. 将str中的单词单独获取
  2. 将str中的text替换成practice
  3. 在text前面插入一个easy
  4. 将每个单词的首字母改为大写
	public static void main(String[] args) {
        String str = "this is a text";
        //1. 将str中的单词单独获取
        String[] arr = str.split(" ");
        for(String s : arr) {
            System.out.print(s+"\t");//this	is	a	text
        }
        System.out.println();
        //2. 将str中的text替换成practice
        String str2 = str.replace("text", "practice");
        System.out.println(str2);//this is a practice

        //3. 在text前面插入一个easy
        String str3 = str.replace("text", "easy text");
        System.out.println(str3);//this is a easy text

        //4. 将每个单词的首字母改为大写
        for(int i = 0; i < arr.length; i++) {
            char first = arr[i].charAt(0);
            //把第一个字符转成大写
            char upperfirst = Character.toUpperCase(first);
            //拼接 substring():从1开始截取,可以有结束的位置
            arr[i] = upperfirst+arr[i].substring(1);
            System.out.print(arr[i]+"\t");//This	Is	A	Text
        }
    }

4.3 可变字符串

  • StringBuffer:jkd1.0提供,可变长字符串,运行效率慢、线程安全
  • StringBuilder:jkd5.0提供,可变长字符串、运行快、线程不安全
  • StringBuilder更快,StringBuffer线程更安全(一般使用StringBuffer比较好)

效率都比String高且节省内存,单线程使用StringBuilder。

	public static void main(String[] args) {
        //StringBuffer和StringBuilder 用法一致
        StringBuffer sb = new StringBuffer();
//        StringBuilder sb = new StringBuilder();
        //1.append(); 追加
        sb.append("java世界第一");
        System.out.println(sb.toString());//java世界第一

        //2.insert(); 添加、插入
        sb.insert(0,"start");//指定位置插入
        System.out.println(sb.toString());//startjava世界第一

        //3.replace(); 替换
        sb.replace(0, 5, "hello");//左闭右开
        System.out.println(sb.toString());//hellojava世界第一

        //4. delete(); 删除
        sb.delete(0, 5);//左闭右开
        System.out.println(sb.toString());//java世界第一

        //5.reverse(); 字符反转
        sb.reverse();
        System.out.println(sb.toString());//一第界世avaj

        //6. 清空 sb.delete(0, sb.length())
        sb.delete(0, sb.length());
        System.out.println(sb.length());//0 清空之后的长度
    }

5 BigDecimal类

  • 位置 java.math 包中
  • 作用 精确计算浮点数
  • Double是近似值存储,在某些实际应用中需要精确运算,Double类型不符合要求,所以需要借助BigDecimal。
	public static void main(String[] args) {
        double d1 =  1.0;
        double d2 =  0.9;
        System.out.println(d1 - d2);//0.09999999999999998
        //BigDecimal 大的浮点数精确计算
        BigDecimal bd1 = new BigDecimal("1.0");//用字符窜
        BigDecimal bd2 = new BigDecimal("0.9");
        //减法:subtract()
        BigDecimal r1 = bd1.subtract(bd2);
        System.out.println(r1);//0.1

        //加法:add()
        BigDecimal r2 = bd1.add(bd2);
        System.out.println(r2);//1.9

        //乘法:multiply()
        BigDecimal r3 = bd1.multiply(bd2);
        System.out.println(r3);//0.90

        //除法:divide()
        //divide(BigDecimal divisor, int scale, int roundingMode) scale:保留位数,roundingMode:小数取舍模式
        //BigDecimal.ROUND_HALF_DOWN 四舍五入
        //不设置scale和roundingMode除不尽时会报异常
        BigDecimal r4 = new BigDecimal("1.4")
                .subtract(new BigDecimal("0.5"))
                .divide(new BigDecimal("0.9"));//(1.4-0.5)/0.9
        System.out.println(r4);//1

        //除不尽时 2的地方填保留位数 后面保留类型为四舍五入
        BigDecimal r5 = new BigDecimal("20").divide(new BigDecimal("3"),2,BigDecimal.ROUND_HALF_DOWN);
        System.out.println(r5);//6.67
    }

6 日期类

6.1 Date类

Date表示特定的瞬间,精确到毫秒(ms)。在jkd1.1开始,Date类中的大部分方法都已经被Calendar类中的方法所取代。

时间单位:s(秒),ms(毫秒),μs(微秒),ns(纳秒)

  • 1s = 1,000ms
  • 1ms = 1,000μs
  • 1μs = 1,000ns
	public static void main(String[] args) {
        //1.创建Date对象 java.util包下的
        Date date1 = new Date();//当前时间
        System.out.println(date1);//Mon May 23 00:00:00 CST 2022
        System.out.println(date1.toLocaleString());//2022-5-23 00:00:00 已过时 但也能用

        //昨天的时间
        Date date2 = new Date(date1.getTime()-(60*60*24*1000));
        System.out.println(date2.toLocaleString());//2022-5-22 00:00:00

        //2.方法after before
        //b1的时候是否在b2之后
        boolean b1 = date1.after(date2);
        //b1的时候是否在b2之前
        boolean b2 = date1.before(date2);
        System.out.println(b1);//true
        System.out.println(b2);//false

        //比较compareTo(); 比较的是毫米值 今天的时间毫秒值比昨天的毫秒值多
        int d = date1.compareTo(date2);
        System.out.println(d);//1 多的为1 少的为 -1

        //比较是否相等 equals()
        boolean b3 = date1.equals(date2);
        System.out.println(b3);//false
    }

6.2 Calendar类

  • Calendar提供了获取或设置各种日历字段的方法
  • 构造方法 protected Calendar(); 由于是protected 所以无法直接创建
  • 其他方法
方法名 说明
static Calendar getInstance() 使用默认时区和区域获取日历
void set(int year, int month, int date, int hourofday, int minute, int second) 设置日历的年、月、日、时、分、秒
int get(int field) 返回给定日历字段的值。字段比如年、月、日
void setTime(Date date) 用给定的date设置此日历时间 Date -> Calendar
Date getTime() 返回一个date表示此日历的时间 Calendar -> Date
void add(int field, int amount) 按照日历的规则,给指定字段添加或减少时间量
long getTimeInMilles() 毫秒为单位返回该日历的时间值
	public static void main(String[] args) {
        //1.创建Calendar类
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar.getTime().toLocaleString());//2022-5-23 00:00:00
        //2.获取时间的信息
        //获取年
        int year = calendar.get(Calendar.YEAR);
        //获取月(从0-11)
        int month = calendar.get(Calendar.MONTH);
        //获取日(两个都可以)
        int day1 = calendar.get(Calendar.DAY_OF_MONTH);
        int day2 = calendar.get(Calendar.DATE);
        //小时
        int hour1 = calendar.get(Calendar.HOUR_OF_DAY);//12小时
        int hour2 = calendar.get(Calendar.HOUR);//24小时
        //分钟
        int minute = calendar.get(Calendar.MINUTE);
        //秒
        int second = calendar.get(Calendar.SECOND);

        //3.修改时间
        Calendar calendar2 = Calendar.getInstance();
        calendar2.set(calendar.DAY_OF_MONTH,22);//设置日数为22
        System.out.println(calendar2.getTime().toLocaleString());//2022-5-22 00:00:00

        //4.add()方法修改时间
        calendar2.add(Calendar.HOUR,1);//添加1小时时间 第二个参数amount属性为正+,为负-
        System.out.println(calendar2.getTime().toLocaleString());//2022-5-22 01:00:00

        //5.补充方法
        int max = calendar2.getActualMaximum(Calendar.DAY_OF_MONTH);//该数最大天数
        int min = calendar2.getActualMinimum(Calendar.DAY_OF_MONTH);//该数最小天数
        System.out.println("max="+max+" min="+min);//max=31 min=1
    }

6.3 SimpleDateFormat类

  • SimpleDateFormat是一个以与语言环境有关的方式来格式化和解析日期的具体类
  • 进行格式化(日期→文本)、解析(文本→日期)
  • 常用的时间模式字母
字母 日期或时间 示例
y 2019
M 年中月份 08
d 月中天数 10
H 一天中小时(0-23) 22
m 分钟 16
s 59
S 毫秒 356
	public static void main(String[] args) throws Exception {
        //1.创建SimpleDateFormat对象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd");
        //2.创建Date对象
        Date date = new Date();
        //3.格式化date(日期—>字符串)
        String str = sdf.format(date);
        System.out.println(str);//2022年05月23日 00:00:00
        //解析(字符串—>日期)
        Date date2 = sdf2.parse("1970/01/02");//parse有异常,需要抛出Exception异常
        System.out.println(date2.toLocaleString());//1970-1-2 0:00:00
        //踩坑记录:parse的参数必须符合sdf的格式,否则会报异常
    }

7 System类

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

方法名 说明
static void arraycopy(...) 复制数组
static long currentTimeMillis(); 获取当前系统时间,返回毫秒值
static void gc(); 建议jvm赶快启动垃圾回收期器回收垃圾
static void exit(int status); 退出jvm 如果参数是0表示正常退出jvm 非0表示异常退出
	public static void main(String[] args) {
        //1.arraycopy(src,srcPos,dest,destPos,length) 数组的复制
        //src:原数组 srcPos:从哪个位置开始复制(以0开始) dest:目标数组 destPos:目标数组的位置 length:复制的长度
        int[] arr = {20, 18, 15, 8};
        int[] dest1 = new int[4];
        int[] dest2 = new int[4];
        System.arraycopy(arr, 0, dest1, 0, dest1.length);
        System.arraycopy(arr, 2, dest2, 2, 2);
        for (int i = 0; i < dest1.length; i++) {
            System.out.print(dest1[i]+" ");//20 18 15 8
        }
        System.out.println();
        for (int i = 0; i < dest2.length; i++) {
            System.out.print(dest2[i]+" ");//0 0 15 8
        }

        //2.Arrays.copyOf(original, newLength) Arrays工具类也是用的arraycopy来实现
        System.out.println();
        int[] ints = Arrays.copyOf(arr, 2);
        for (int i = 0; i < ints.length; i++) {
            System.out.print(ints[i]+" ");//20 18
        }

        //3.System.currentTimeMillis() 自1970年1月1日零点到目前计算这一刻所经历的的毫秒数
        //返回值为long型,因为int已经存不下了
        long time = System.currentTimeMillis();
        System.out.println(time);//一串数字

        //4.System.gc();告诉垃圾回收器回收

        //5.System.exit(0);  退出jvm,后面的代码不执行
    }

总结

内部类:

  • 在一个类的内部再定义一个完整的类。
  • 成员内部类、静态内部类、局部内部类、匿名内部类。

Object类:

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

包装类:

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

String类:

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

BigDecimal:

  • 可精确计算浮点数。

Date:

  • 特定时间

Calendar:

  • 日历,Date过期的方法可使用Calendar里面的方法

SimpleDateFormat:

  • 格式化时间

System:

  • 系统类

End

posted @   lyluoye  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示