JAVA常用类笔记

JDK1.8中文文档
我们常用的类用这个文档来学习。
JAVA常用类笔记_第1张图片
通过索引搜索出类的信息。

1.Object类

Object类是所有类的父类,所有类都默认继承了Object类。
java.lang.Object类

Class Object是类Object结构的根。 每个班都有Object作为超类。 所有对象(包括数组)都实现了这个类的方法。

1.1 clone() 方法

需要注意的是在clone在Object中是project修饰符。因为所有类都是Object的子类,所以如果不实现clone方法,在类中可以直接使用父类的clone方法,但是其对象在别的类中不能调用clone方法。所以必须重写clone方法。

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
            Person person = new Person();
            Person clone = (Person)person.clone();

深拷贝和浅拷贝是啥?

1.2 toString()方法

返回对象的字符串表示形式。 一般来说, toString方法返回一个“textually代表”这个对象的字符串。 结果应该是一个简明扼要的表达,容易让人阅读。 建议所有子类覆盖此方法。
返回对象的字符串表示形式。

        Person person = new Person("name");
        System.out.println(person.toString());

打印结果为

com.liu.Person@4554617c

一般重写object的tostring方法.
alt + insert快捷键快速生成toString()

   @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", test2='" + test2 + '\'' +
                '}';
    }

打印结果为:

Person{name=‘name’, age=0, test2=‘null’}

1.3 getClass()方法

返回此Object的运行时类。 返回的类对象是被表示类的static synchronized方法锁定的对象。
返回结果:表示 类对象的运行时类的Class对象。

不可重写,要调用的话,一般和getName()联合使用,如getClass().getName();

        Person person = new Person("name");
        System.out.println(person.getClass());

class com.liu.Person

        Person person = new Person("name");
        System.out.println(person.getClass().getName());

1.4 finalize()方法

垃圾收集确定不再有对该对象的引用时,垃圾收集器在对象上调用该对象。 一个子类覆盖了处理系统资源或执行其他清理的finalize方法。
垃圾回收器会调用回收该对象

1.5 equals()方法

指示一些其他对象是否等于此。
该equals类方法Object实现对象上差别可能性最大的相等关系; 也就是说,对于任何非空的参考值x和y ,当且仅当x和y引用相同的对象( x == y具有值true )时,该方法返回true 。
一般比较的是引用的地址

String a = "1";
        if("1".equals(a)){
            System.out.println("true");
        }

一般都会重写,String上面的比较一看就是比较字符的值而不是地址,查看源码。

   public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

重写了equals

1.6 hashCode()方法

返回对象的哈希码值。 支持这种方法是为了散列表,如HashMap提供的那样 。

只要在执行Java应用程序时多次在同一个对象上调用该方法, hashCode方法必须始终返回相同的整数,前提是修改了对象中equals比较中的信息。 该整数不需要从一个应用程序的执行到相同应用程序的另一个执行保持一致。
如果根据equals(Object)方法两个对象相等,则在两个对象中的每个对象上调用hashCode方法必须产生相同的整数结果。
不要求如果两个对象根据equals(java.lang.Object)方法不相等,那么在两个对象中的每个对象上调用hashCode方法必须产生不同的整数结果。 但是,程序员应该意识到,为不等对象生成不同的整数结果可能会提高哈希表的性能。

重写equals方法都会重写hashCode

 public int hashCode() {
        int h = hash;
        if (h == 0 && value.length > 0) {
            char val[] = value;

            for (int i = 0; i < value.length; i++) {
                h = 31 * h + val[i];
            }
            hash = h;
        }
        return h;
    }

1.7 wait()方法 和 notify()方法

wait导致当前线程等待,直到另一个线程调用此对象的notify()方法或notifyAll()方法,或指定的时间已过。
notify醒正在等待对象监视器的单个线程。 如果任何线程正在等待这个对象,其中一个被选择被唤醒。 选择是任意的,并且由实施的判断发生。 线程通过调用wait方法之一等待对象的监视器。

  • 这边在多线程会详解

2.包装类

八种基本数据类型都对应自己的包装类

基本数据类型 对应的包装类
byte Byte
short Short
int Integer
long Long
char Character
float Float
double Double
boolean Boolean
根据第一步查找对象的jdk1.8的中文文档,可以详细看到每个包装类提供的方法。这里介绍几个常用的方法。

2.1、 实现 int 和 Integer 的相互转换

        int m = 500;
        Integer obj = new Integer(m); // 手动装箱
        int n = obj.intValue(); // 手动拆箱

2.2、 将字符串转换为整数

 System.out.println(Integer.parseInt("100"));

2. 3、将整数转换为字符串

System.out.println(Integer.toString(1));

2.4 自动拆箱和装箱

上面 Integer obj = new Integer(m); // 手动装箱
其实可以自动

        int a = 2;
        Integer b =a;
        int c = b;
        b.toString();

3.Math类

va 的 Math 包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根和三角函数
常用的方法

        Math.abs(-10);   //绝对值
        Math.cbrt(1);//计算立方根
        Math.pow(2, 2);//计算a的b次方
        Math.max( 2,5 );//计算最大值
        Math.min( 2,3 );//计算最小值
        Math.rint(5.5);

        Math.random(); //取得一个大于或者等于0.0小于不等于1.0的随机数
        int a = (int)(Math.random()*100);
        System.out.println(a);

4. Random类

该类的实例用于生成伪随机数的流。
上面介绍了Math下面提供一个random(),可以用来提供随机数。

 System.out.println(new Random().nextInt(100));

5. 日期时间类

5.1 Date类

java.util 包提供了 Date 类来封装当前的日期和时间。

 System.out.println(new Date().toString());

打印结果 Sun Jun 12 13:55:10 CST 2022

5.2 SimpleDateFormat格式化时间类

        Date date = new Date();
        SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");
        System.out.println(ft.format(date));

打印结果 2022-06-12 01:59:40

这边只要对应yyyy mm等就行 中间随意定义连接

G 纪元标记
yyyy 四位年份
MM 月份
dd 一个月的日期
hh (1~12)格式小时
HH 一天中的小时 (0~23)
mm 分钟数
ss 秒数
SS 毫秒
E 星期几

        Date date = new Date();
        SimpleDateFormat ft = new SimpleDateFormat ("yyyy/MM/dd E HH:mm:ss");
        System.out.println(ft.format(date));

2022/06/12 星期日 14:07:37

6. Calendar类

我们现在已经能够格式化并创建一个日期对象了,但是我们如何才能设置和获取日期数据的特定部分
呢,比如说小时,日,或者分钟? 我们又如何在日期的这些部分加上或者减去值呢? 答案是使用Calendar
类。Date中有很多方法都已经废弃了!

Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明
的,只需要使用getInstance方法创建即可。

set(int year, int month, int date, int hourOfDay, int minute)

        Calendar c = Calendar.getInstance();//默认是当前日期
        c.set(2019,6,12);
        System.out.println(c.get(Calendar.YEAR));
常量 描述
Calendar.YEAR 年份
Calendar.MONTH 月份
Calendar.DATE 日期
Calendar.DAY_OF_MONTH 日期,和上面的字段意义完全相同
Calendar.HOUR 12小时制的小时
Calendar.HOUR_OF_DAY 24小时制的小时
Calendar.MINUTE 分钟
Calendar.SECOND
Calendar.DAY_OF_WEEK 星期几

Calendar 完全是强化班的date

        Calendar nowTime = Calendar.getInstance();
        SimpleDateFormat ft = new SimpleDateFormat ("yyyy/MM/dd E HH:mm:ss");
        System.out.println(ft.format(nowTime.getTime()));

7.String类

String 类代表字符串。字符串是常量;它们的值在创建之后不能更改。

public final class String

String源码是用final修饰的。

7.1 初始化

        String str="hello";//直接赋值的方式 1
        String str2=new String("hello");//实例化的方式

栈中存放 str变量名
堆中存放hello
JAVA常用类笔记_第2张图片

7.2 常量池

在字符串中,如果采用直接赋值的方式(String str=“hello”)进行对象的实例化,则会将匿名对象“hello放入对象池,每当下一次对不同的对象进行直接赋值的时候会直接利用池中原有的匿名对象,我们可以用对象手工入池;

7.3 String常用的方法

7.3.1 String比较

equals
比较字符串内容是否相等

       String str="hello";//直接赋值的方式 1
        String str2=new String("hello");//实例化的方式
        if(str.equals(str2)){
            System.out.println("true");
        }

equalsIgnoreCase
比较内容是否相等,忽略大小写

        String str="hello";//直接赋值的方式 1
        String str2=new String("Hello");//实例化的方式
        if(str.equalsIgnoreCase(str2)){
            System.out.println("true");
        }

boolean startsWith(String str):
判断字符串对象是否以指定的str开头
boolean endsWith(String str):
判断字符串对象是否以指定的str结尾

7.3.1 String的截取

length
长度

       String str="hello";//直接赋值的方式 1
        System.out.println(str.length());

charAt
获取指定位置的索引,从0开始,下面打印出来就是e

 System.out.println(str.charAt(1));

indexOf
获取str在字符串对象中第一次出现的索引,打印为2

System.out.println(str.indexOf("ll"));

substring
字符串截取,开始索引,结束索引

 System.out.println(str.substring(2));
        System.out.println(str.substring(2,4));

7.3 String的转换

toCharArray 把字符串转换为字符数组
toLowerCase 把字符串转换为小写字符串
toUpperCase 把字符串转换为大写字符串

        String str="hello";//直接赋值的方式 1
        char[] chars = str.toCharArray();
        System.out.println(str.toLowerCase ());
        System.out.println(str.toUpperCase());

7.4 其他方法

trim 去两端空格
split 字符串分割

        String str="  hello world";//直接赋值的方式
        String[] os = str.split("o");
        System.out.println(str);
        System.out.println(os[0]);
        System.out.println(str.trim());

8. StringBuilder 和 StringBuffer

StringBuilder 和 StringBuffer都是可变的字符串,和String相比。在这里插入代码片
StringBuilder 是非线程安全的
StringBuffer 是线程安全的

        StringBuilder str  = new StringBuilder("hello");
        StringBuffer stb = new StringBuffer("world");

8.1 常用方法

8.1 insert

在index位置插入。

        StringBuilder str  = new StringBuilder("hello");
        StringBuffer stb = new StringBuffer("world");

        str.insert(3,"222");
        System.out.println(str);

运行结果 hel222lo。

        StringBuilder str  = new StringBuilder("hello");
        StringBuffer stb = new StringBuffer("world");

        str.insert(3,new StringBuffer("333"));
        System.out.println(str);

8.2 append

在原来的字符串追加。

        StringBuilder str  = new StringBuilder("hello");
        StringBuffer stb = new StringBuffer("world");

        str.append(new StringBuffer("333"));
        System.out.println(str);

8.3 replace

位置0,到2 的内容替换成22

        StringBuilder str  = new StringBuilder("hello");
        StringBuffer stb = new StringBuffer("world");

        str.replace(0,2,"22");
        System.out.println(str);

8.2 比较String、StringBuffer、StringBuilder之间的区别

String 字符串常量
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)

在大多数情况下三者在执行速度方面的比较:StringBuilder > StringBuffer > String

9 File类

文件类

File f = new File("d:/src3/TestObject.java");

详情见IO学习

你可能感兴趣的:(java系统学习,java,开发语言,java-ee)