学习,永无止境!|

韩熙隐ario

园龄:2年11个月粉丝:1关注:0

2025-01-16 22:28阅读: 3评论: 0推荐: 0

常用类学习

学习视频

object类

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

getClass()方法

  • public final Class<?> getClass(){}
  • 返回引用中存储的实际对象类型
  • 应用:通常用于判断两个引用中实际存储对象类型是否一致

实例

public class Test {
    public static void main(String[] args) {
        Person person1 = new Person();
        Person person2 = new Student();
        Student student = new Student();
        Class class1 = person1.getClass();
        Class class2 = person2.getClass();
        Class class3 = student.getClass();

        if (class1 == class2) {
            System.out.println("class1 == class2");
        } else {
            System.out.println("class1 != class2");
        }
        if (class2 == class3) {
            System.out.println("class2 == class3");
        } else {
            System.out.println("class2 != class3");
        }
    }
}

image

hashCode()方法

  • public int hashCode() {}
  • 返回该对象的哈希码值。
  • 哈希值根据对象的地址字符串数字使用hash算法计算出来的int类型的数值。
  • 一般情况下相同对象返回相同哈希码,

实例

public class Test {
    public static void main(String[] args) {
        Person person1 = new Person();
        Person person2 = new Student();
        System.out.println(person1.hashCode());
        System.out.println(person2.hashCode());
        person1 = person2;
        System.out.println(person1.hashCode());

    }
}

image

toString()方法

  • public String toString(){}

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

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

  • //测试类
    public class Test {
        public static void main(String[] args) {
            Person person1 = new Person();
            Person person2 = new Student();
            
            System.out.println(person1.toString());
            System.out.println(person2.toString());
        }
    }
    //重写Student类的toString方法
    public class Student extends Person{
        int name;
        public String toString() {
            return "Student'name:" + name;
        }
    }
    
    

image

@之后的值和hashCode()得到的地址相同,只是进制不同。

equals()方法

  • public boolean equals(Object obj) {}
  • 默认实现为(this==obj),比较两个对象地址是否相同。
  • 可进行覆盖,比较两个对象的内容是否相同,
public class Test {
    public static void main(String[] args) {
        Person person1 = new Student("张三", 18);
        Person person2 = new Student("张三", 18);
        //输出false,因为equals默认对比的是对象的地址,而不是内容(今天面试问了,-_-!)
        System.out.println(person1.equals(person2));
    }
}

equals()方法覆盖的步骤

  • 比较两个引用是否指向同一个对象。
  • 判断obj是否为null。
  • 判断两个引用指向的实际对象类型是否一致。
  • 强制类型转换。
  • 依次比较各个属性值是否相同。

实例

public class Student{
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public boolean equals(Object obj) {
        //比较两个引用是否指向同一个对象。
        if (this == obj) return true;
        //obj是否为空
        if (obj == null) return false;
        //判断两个引用指向的实际对象类型是否一致。
//        if (this.getClass() == obj.getClass()) {
//
//        }
        if (obj instanceof Student) {
            //强制类型转换
            Student student = (Student) obj;
            //判断内容是否一致
            return this.name == student.name && this.age == student.age;
        }
        return false;
    }
}
//调用类
public class Test {
    public static void main(String[] args) {
        Student student1 = new Student("张三", 18);
        Student student2 = new Student("张三", 18);
        //重写后返回true
        System.out.println(student1.equals(student2));
    }
}

finalize()方法

  • 当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象进入回收队列。
  • 垃圾对象:没有有效引用指向此对象时,为垃圾对象
  • 垃圾回收:由GC销毁垃圾对象,释放数据存储空间。
  • 自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象。
  • 手动回收机制:使用System.gc(); 通知JVM执行垃圾回收,也只是通知,回收与否还要看JVM的决定
//实例
Student a = new Student();//不回收
new Student();//会回收

包装类

什么是包装类

  • 基本数据类型所对应的引用数据类型。
  • Object可统一所有数据,包装类的默认值是null。

image

类型转换与装箱、拆箱

  • 8种包装类提供不同类型间的转换方式
  • Number父类中提供的6个共性方法。
  • 装箱就是将基本数据类型(在栈中)转换成引用数据类型(堆中)
  • 拆箱就是将引用数据类型(堆中)转换成基本数据类型(在栈中)
public class Demo01 {
    public static void main(String[] args) {
        //类型转换:装箱,基本类型转成引用类型的过程
        //基本类型
        int num1 = 18;
        //使用Interger类创建对象
        Integer integer1 = new Integer(num1);
        Integer integer2 = Integer.valueOf(num1);
        System.out.println("装箱");
        System.out.println(integer1);
        System.out.println(integer2);

        //类型转型:拆箱,引用类型转成基本类型
        Integer integer3 = new Integer(100);
        int num2 = integer3.intValue();
        System.out.println("拆箱");
        System.out.println(num2);

        //JDK1.5之后可以自动装箱拆箱了,其实字节码文件中的代码也是一样的
        //参考C++中的重载操作符
        int num3 = 18;
        //自动装箱
        Integer integer = num3;
        System.out.println("自动装箱");
        System.out.println(num3);
        //自动拆箱
        int num4 = integer;
        System.out.println("自动拆箱");
        System.out.println(num4);
    }
}

Number提供的方法,具体可见帮助文档

image

基本类型和字符串转换

  • 用parseXXX()静态方法
public class Demo02 {
    public static void main(String[] args) {
        //1基本数据类型转成字符串
        int num1 = 255;
        //1.1使用加号
        String s1 = num1 + "";
        //1.2使用Integer中的toString()方法,有多种重载方法,可以指定进制转换
        String s2 = Integer.toString(num1, 16);
        System.out.println(s1);
        System.out.println(s2);

        //2字符串转成基本类型
        String str = "150";
        //使用Integer.parseXXX();
        int num2 = Integer.parseInt(str);
        System.out.println(num2);

        //boolean字符串形式转成基本类型:“true”-->true  非“true”-->fasle
        String str2 = "true";
        String str3 = "tru";
        System.out.println(Boolean.parseBoolean(str2));
        System.out.println(Boolean.parseBoolean(str3));
    }
}

整数缓冲区

  • Java预先创建了256(-128到127)个常用的整数包装类型对象。
  • 在实际应用当中,对已创建的对象进行复用。节省资源
public class Demo03 {
    public static void main(String[] args) {
        //面试题
        Integer integer1 = new Integer(100);
        Integer integer2 = new Integer(100);
        System.out.println(integer1 == integer2);//false

        //在缓冲区范围之内,实际上是一个对象实体
        Integer integer3 = 100;//自动装箱
        Integer integer4 = 100;
        System.out.println(integer3 == integer4);//true

        //超过缓冲区范围之内
        Integer integer5 = 200;//自动装箱
        Integer integer6 = 200;
        System.out.println(integer5 == integer6);//false

    }
}

通过代码了解,可以看出确实是-128到127.

image

image

String类

概述

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

实例代码

public class Demo04 {
    public static void main(String[] args) {
        String name1 = "hello";//“hello”存储在字符串中
        name1 = "world";//world赋值给name变量,给字符串赋值时,没有修改数据,而是重新开辟空间
        String name2 = "world";
        System.out.println(name.getClass() == name2.getClass());//true

        //演示字符串的另一种创建方式,new String();
        String str1 = new String("java");
        String str2 = new String("java");
        System.out.println(str == str1);//false
        System.out.println(str.equals(str1));//true
    }
}

示意图

image

注意这里的String类型的equals对比的字符串的内容,而不是对象地址。由代码可知

image

常用方法

  • public int length():返回字符串的长度。

  • public char charAt(int index):根据下标获取字符。

  • public boolean contains(String str):判断当前字符串中是否包含str。

  • public char[] toCharArray():将字符串转换成数组。

  • public int indexOf(String str):查找str首次出现的下标,存在,则返回该下标;不存在,则返回-1。

  • public int lastIndex0f(Stringstr):查找字符串在当前字符串中最后一次出现的下标索引。

  • public String trim():去掉字符串前后的空格。

  • public String toUpperCase():将小写转成大写。

  • public String toLowerCase():将大写转成小写。

  • public boolean endWith(String str):判断字符串是否以str结尾。

  • public boolean startWith(String str):判断字符串是否以str开头。

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

    String content = "java123java";
    content.replace("java","C++");//会变成C++123C++
    
  • public String[] split(String str):根据str做拆分。

    小技巧,参数中str可以写成“[ ,]+”,中括号中的空格和逗号表示空格和括号都要拆分,而加号则是空号中的某个字符出现连续多个是也可以分割。

  • public boolean equls():上面已说

  • public int compareTo(String str):字符按从前往后依次按字典表顺序比大小,返回前后两者差值

    特殊的两者长度不同,但是用公共前缀时,返回的是长度差值,而不再编码差值,如“java”和“javac”得-1

  • public String substring(int beginIndex, int endIndex):截取字符串

    image

可变字符串

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

当然这里的快慢是相对的,都比String类型快

public class Demo05 {
    public static void main(String[] args) {
        //StringBuffer和StringBuilder的方法使用一样
        StringBuffer sb = new StringBuffer();
        //1 append();追加
        sb.append("hello");
        System.out.println(sb.toString());
        sb.append("world");
        System.out.println(sb.toString());
        //2 insert();插入
        sb.insert(0,"perword");
        System.out.println(sb.toString());
        //3 replace();替换,可以指定下标范围,遵循"含头不含尾"的原则
        sb.replace(0,7,"Hi,");
        System.out.println(sb.toString());
        //4 delete();删除
        sb.delete(0, 3);
        System.out.println(sb.toString());
        //清空
        sb.delete(0, sb.length());
        System.out.println(sb.length());
    }
}

image

BigDecimal类

  • 位置:java.math包中。
  • 作用:因为基本数据类型中的浮点数是近似的,实现不了精确计算浮点数,此时要用到该类。创建方式:BigDecimal bd=new BigDecimal(“1.0”)
  • 方法:
    • BigDecimal add(BigDecimal bd) 加
    • BigDecimal subtract (BigDecimal bd) 减
    • BigDecimal multiply(BigDecimal bd) 乘
    • BigDecimal divide(BigDecimal bd) 除

image

image

Date类

  • Date表示特定的瞬间,精确到毫秒。Date类中的大部分方法都已经被Calendar类中的方法所取代。
  • 时间单位
    • 1秒=1000毫秒
    • 1毫秒=1000微秒
    • 1微秒=1000纳秒
public class Date {
    public static void main(String[] args) {
        //1 创建Date对象
        //今天
        Date date1 = new Date();
        System.out.println(date1.toString());
        System.out.println(date1.toLocaleString());
        //昨天
        Date date2 = new Date(date1.getTime() - (60 * 60 * 24 * 1000));
        System.out.println(date2.toLocaleString());
        //2 方法after before
        System.out.println(date1.after(date2));
        System.out.println(date1.before(date2));

        //比较compareTo();
        System.out.println(date1.compareTo(date2));
        //比较是否相等equals();
        System.out.println(date1.equals(date2));
    }
}

image

Calendar类

image

public class Test {
    public static void main(String[] args) {
        //1 创建Calender对象
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar.getTime().toLocaleString());
        System.out.println(calendar.getTimeInMillis());
        //2 获取时间信息
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DAY_OF_WEEK);
        int hour = calendar.get(Calendar.HOUR);
        int minute = calendar.get(Calendar.MINUTE);
        int second = calendar.get(Calendar.SECOND);
        System.out.println(year + "年" + (month + 1) + "月"
            + day + "日" + hour + ":" + minute + ":" + second);
        //修改时间
        Calendar calendar2 = Calendar.getInstance();
        calendar2.set(Calendar.DAY_OF_MONTH, 17);
        System.out.println(calendar2.getTime().toLocaleString());

        //补充方法,获取当月最大最小日期
        int max = calendar2.getActualMaximum(Calendar.DAY_OF_MONTH);
        int mix = calendar2.getActualMinimum(Calendar.DAY_OF_MONTH);
        System.out.println(max);
        System.out.println(mix);
    }
}

image

SimpleDateFormat类

image

public class Test {
    public static void main(String[] args) throws Exception {
        //1 创建SimpleDateFormat对象y 年 M 月
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        //格式可以自定义
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
        //2 创建Date
        Date date1 = new Date();
        //格式化date(把日期转成字符串)
        String str = sdf1.format(date1);
        System.out.println(str);
        //解析(把字符串转成日期)
        //如果字符串格式与pattern不对应,则要抛出异常
        Date date2 = sdf2.parse("2025-02-05");
        System.out.println(date2);
    }
}

image

System类

image

public class Test {
    public static void main(String[] args) throws Exception {
        //arraycopy:数值的复制
        int[] arr = {20, 39, 23, 45, 23, 54, 22, 67};
        int[] dest = new int[8];
        //参数分别是:源数值,从哪个位置开始复制,目标数值,目标数值的位置,复制长度
        //ctrl 点击可以参数arraycopy是native修饰的,使用本地方法,用C/C++实现,效率很高
        System.arraycopy(arr, 4, dest, 4, 4);
        for (int i = 0; i < dest.length; i++) {
            System.out.println(dest[i]);
        }

        //获取1970年至今的毫秒数
        System.out.println(System.currentTimeMillis());
        long start = System.currentTimeMillis();
        int n = 99999999;
        for (int i = (-1) * n; i < n; i++) {
            for (int j = (-1) * n; j < n; j++) {
                int result = i * j;
            }
        }
        long end = System.currentTimeMillis();
        System.out.println("用时:" + (end - start));

        //exit()推出jvm虚拟机
        System.exit(0);
        //退出后后面代码将不会执行
        System.out.println("不输出");
    }
}

image

本文作者:韩熙隐ario

本文链接:https://www.cnblogs.com/arioya/p/18675864

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   韩熙隐ario  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起