首页 > 编程知识 正文

java创建一个类,java中有哪些常用类

时间:2023-05-03 13:41:59 阅读:135310 作者:2161

使用软件: eclipse 2019-2

jdk:11

首先,Objects类是属于Java的工具类,具体的包位置是java.Util.Objects。 这是JDK 1.7版中添加的检查工具,所有方法都由静态限定。

检查下标共有三种方法。 我个人认为是鸡肋。 自己写if判断比这个方便

checkindex(intindex,int length )不在判断给定的索引是否在0给定的数组长范围内()简单地说,判断给定的数组下标是否越界)的范围内i10; I () {a[i]=i 1; 调用checkIndex方法,并将返回值代入xintx=Objects.checkindex(0,a.length ); system.out.println(x; 输出结果为0intx=Objects.checkindex(6,a.length ); system.out.println(x; 6输入的索引值大于或等于指定的数组长或小于0时,输出结果报告错误,错误类型为下标越界

//首先是长度为10的数组int[] a=new int[10]; for(intI=0; i10; I () {a[i]=i 1; 调用checkIndex方法,并将返回值代入xintx=Objects.checkindex(-1,a.length ); system.out.println(x; ----------------intx=---- objects.check inning system.out.print ln (x; ----------------intx=---- objects.check inning system.out.print ln (x; 这三个结果都是错误的。 exceptioninthread ' main ' Java.lang.indexoutofboundsexception 3360 index-1 outofboundsforlength 10at Java.base JDK.internted onditions.Java:64 ) at Java.base/JDK.internal.util.preconditions.outofboundscheckindex (preconditions.Java ) JDK.internal.util.preconditions.check index (preconditions.Java 3360248 ) atJava.base/Java.util.objects.chects attest.objects test.main (objects test.Java :14 ) checkfromindexsize (intfromindex,ints ) int length ),将通过该方法判断时传递的返回值设为f,超出length的范围返回错误(下标越界)。此方法判断从f开始后面是否有size个位置,最后的这个位置位于length的范围内,或者是之前的配置通过调用checkFromIndexSize方法并将返回值代入Xin tx=objects.checkfroomindexsize方法,可以轻松理解system.out.println(x; 这是从第七个位置开始的倒数第三个位置。 也就是说,7、8、9的最后一个位置是9,数组的长度是10,所以如果正确返回7的输出,则为7 intx=objects.checkfromindexsize (7,4,a.length )。 system.out.println(x; 如果将size的值更改为4,则最后一个位置的下标为10,这将超过数组的长度,因此exceptioninthread ' main ' Java.lang.indexoutofboundsexception 3360 range 7 ) outofboundsforlength 10 checkfromtoIndex (intfromindex,int toIndex,int length )该方法包括从fromindex到toindex的范围system.out.println(x; 该方法意味着从7开始,到10的范围是否在数组a中

的范围内从7开始7,8,9,数组a的范围为0,1,2...7,8,9,所以返回7,输出结果就为7有个特例:就是fromIndex的值可以与toIndex的值相等 int x = Objects.checkFromToIndex(10, 10, a.length);System.out.println(x);这个次调用的结果为10,虽然这里没有报错,但是我们在使用返回的这个下标作用到数组a时还是会报错。需要注意

以上三个检查数组的方法参数都不能小于0,或是大于length。

equals

有两个equals方法,一个是equals,另一个是deepEquals,这两个都可以比较传入的任意类型的数据是否相等,返回值均为boolean类型

Objects中的两个equals方法有一个特别的地方,就是它可以比较值为null的两个对象其他的equals方法在调用者的值为null时就直接报错了

首先equals方法,

首先Objects中的equals源码为: public static boolean equals(Object a, Object b) { return (a == b) || (a != null && a.equals(b)); }举例: String s1 = null;String s2 = null;boolean result = Objects.equals(s1, s2);System.out.println(result); System.out.println(s1.equals(s2));结果为:trueException in thread "main" java.lang.NullPointerExceptionat test.ObjectsTest.main(ObjectsTest.java:12)Objects中的equals首先就判断传进来的参数是否相等,其次是判断第一个参数是否为null,若不为空则调用该参数的equals方法去比较。再看一个例子: String[] s1 = {"q","w","e"};String[] s2 = {"q","w","e"};String[] s3 = {"a","s","d"};boolean result = Objects.equals(s1, s2);System.out.println(result);result = Objects.equals(s1, s3);System.out.println(result);此例的输出为false,false;因为数组是属于引用类型的变量,在进行比较时比较的是其内存地址,s1和s2虽然值一样,但是内存地址不一样,所以为false

deepEquals

deepEquals字面意思就是比equlas进行更深度的比较还是上面的例子,只是将equals换成了deepEquals String[] s1 = {"q","w","e"};String[] s2 = {"q","w","e"};String[] s3 = {"a","s","d"};boolean result = Objects.deepEquals(s1, s2);System.out.println(result);result = Objects.deepEquals(s1, s3);System.out.println(result);运行结果为ture,false;这两种方法的区别就在于deepEquals是比较传入对象的值完全一致才会返回ture所以在比较类类型,数组等引用类型时用deepEquals比较好,当然也可以选择重写equalse方法来让比较更符合我们的要求 对null的判断 判断传入的对象是否为空,isNull(Object obj)和noNull(Object obj),字面意思isNull参数为null返回true反之false,noNull参数为null返回false反之true

源码也很简单

直接就是用==去和null比较public static boolean isNull(Object obj) { return obj == null; }public static boolean nonNull(Object obj) { return obj != null; }有一点需要注意,在比较类类型对象时,只要创建了对象即使没有给该对象赋值,该对象也是不为空的例: Person p1 = new Person("赤红",17);Person p2 = new Person();System.out.println(Objects.isNull(p1));System.out.println(Objects.isNull(p2));结果为两个false,因为只创建了对象并没有对对象的属性赋值,所以对象的属性为null requireNonNull,判断传入的引用对象是否为空,这个方法有三种不同的形态 第一种,判断是否为空,空则报错,反之返回传入的参数 public static <T> T requireNonNull(T obj) { if (obj == null) throw new NullPointerException(); return obj; } 第二种,与第一种一样,区别是可以传入一个自定义的提示 public static <T> T requireNonNull(T obj, String message) { if (obj == null) throw new NullPointerException(message); return obj; } 传入的对象为空后,则把自定义的message跟在异常后面提示例:String tips = "这是空的"; String s = null; System.out.println(Objects.requireNonNull(s, tips));结果为:Exception in thread "main" java.lang.NullPointerException: 这是空的 第三种,与第二种一样,区别是对自定义的提示做了一个判断,如果自定义的信息为null 则报错时就是默认的格式(感觉说了和没说一样) public static <T> T requireNonNull(T obj, Supplier<String> messageSupplier) { if (obj == null) throw new NullPointerException(messageSupplier == null ? null : messageSupplier.get()); return obj; } requireNonNullElse,用法与requireNonNull相似 对传进来的数据进行判断,返回第一个非空值(obj)否则返回第二个非空值(defaultObj) 可以看到里面调用了requireNoNull,若第二个也为空则报错,在错误后面提示defualtObj; public static <T> T requireNonNullElse(T obj, T defaultObj) { return (obj != null) ? obj : requireNonNull(defaultObj, "defaultObj"); }

requireNonNullElseGet

具体用法是这样,在调用时传入一个对象,和一个Supplier的实现类如果传入的对象是null则调用Supplier的get方法,非空则调用其toString方法尖括号里的类型要与传入对象一样 String s = null;String tips = "这是空的";System.out.println(Objects.requireNonNullElseGet(s, new Supplier<String>() {@Overridepublic String get() {// TODO Auto-generated method stubreturn tips;}})); toString​ toString​(Object o) 就是打印传入对象的toString方法,如果传入对象是空,就返回字符串"null"toString​(Object o, String nullDefault) 两个差不多,非空都是掉用o的toString方法,非空则输出nullDefault

还剩一个compare​(T a, T b, Comparator<? super T> c),目前没接触到实际应用场景,待补充

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。