JavaJSON相关类 java类详解_数据结构



一、Java常用类

学习java的常用类-学会jdk-api文档的使用,我们把java的常用类又称为java的API
jdk6-api文档翻译的比较准确-人译
jdk8-api文档-机译

1、Object(*)

Object类是所有类的父类,即所有类都继承Object类

Student stu1 = new Student("赵日天");
  Student stu2 = new Student("赵日天");
  Student stu3 = stu1;

1、equals

指示其他某个对象是否与此对象“相等”。

比较的内存地址

/**
   * 1.equals:比较两个对象的内存地址是否相等
   */
  System.out.println(stu1.equals(stu3));
  System.out.println(stu1.equals(stu2));

2、hashCode

/**
   * 2.hashCode:获取对象的内存地址
   */
  int hashCode1 = stu1.hashCode();
  int hashCode2 = stu2.hashCode();
  int hashCode3 = stu3.hashCode();
  System.out.println(hashCode1);
  System.out.println(hashCode2);
  System.out.println(hashCode3);

3、toString

如果子类没有重写父类Object类的toString方法,这个时候直接输出对象,结果是对象的内存地址

如果子类重写父类Object类中的toString方法,这个时候直接输出对象,结果是执行子类重写后的toStirng方法,输出对象的字符串表现形式

3、getClass(了解)

获取创建该对象的类路径

System.out.println(stu1.getClass());

5.finalize()

垃圾回收器

总结

/**
   * == 
   *  如果作用于基本数据类型,比较值是否相等
   *  如果作用于引用数据类型,比较内存地址是否相等
   * equals
   *  引用数据类型的比较,建议使用equals
   */
  int n = 1;
  int m=2;
  System.out.println(n == m);
  System.out.println(stu1 == stu2);

2、基本数据类型的包装类(*)

java语言是一个面向对象的语言,但是java中的基本数据类型却不是面向对象的,但是我们在实际使用中经常将基本数据类型转换成对象,便于操作,这时,我们就需要用的基本数据类型的包装类!

包装类的继承关系:





JavaJSON相关类 java类详解_java_02




JavaJSON相关类 java类详解_jvm_03


1.Integer

1.赋值
//1.整数
  int a1 = 10;
  Integer a2 = 100;
  
  //2.小数
  double b1 = 3.14;
  Double b2 = 3.11;
  //3.字符
  char c1 = 'a';
  Character c2 = 'b';
  //4.布尔
  boolean d1 = true;
  Boolean d2 = false;
2属性和方法
//1.int最大值
  System.out.println(Integer.MAX_VALUE);
  //2.int最小值
  System.out.println(Integer.MIN_VALUE);
  //3.把字符串转整数--字符串的内容必须看着就像数值
  String s = "123";
  int n = Integer.parseInt(s);
  System.out.println(n);
  //4.整数转字符串
  int m = 234;
  String s2 = m+"";
  System.out.println(s2);
3Integer跟int值的区别
Intege有属性,有方法
在java中所有的引用类型都可以赋null值,null表示空的意思
Integer比int多一个值null
4自动装箱和自动拆箱
自动装箱
    自动把int类型的数字转换成Integer,该过程自动调用valueOf(int i) 
    int a = 100;
    Integer b = a; 等价于 Integer b = Integer.valueOf(100) 
自动拆箱
    自动把Integer类型的数字转换成int,该过程自动调用 intValue()
 Integer n = 20;
 int num = n;//该过程等价于int num = n.intValue();
5.案例

分析下面代码的运行结果

Integer i = 10;
     Integer j = 10;
     //1--==作用于引用数据类型比较的是内存地址,因为i和j的内存地址相等,结果为true
     System.out.println(i == j);
     Integer a = 128;
     Integer b = 128;
     //2--a,b代表不同的对象,a,b存储的内存地址不同等,结果为false
     System.out.println(a == b);

     int k = 10;
     //3--变量i会自动拆箱转换为int类型,然后比较值
     System.out.println(k == i);
     int kk = 128;
     //4--变量a会自动拆箱,转换为int类型,然后比较值
     System.out.println(kk == a);

     Integer m = new Integer(10);
     Integer n = new Integer(10);
     //5
     System.out.println(m == n);
     //6包装类对Object类的equals方法进行了重写,重写后equals方法用来比较值
     System.out.println(a.equals(b));

总结

1.当 i >= -128 并且 i <= 127 的时候,直接从缓存中把值取出来赋值给变量。那么第一个打印结果因为 i = 10 在缓存表示的范围内,所以为 true。
 2.从上面的分析我们知道,128是不在-128到127之间的,所以第一次创建新的Integer对象,第二次也创建了一个新的Integer对象。故打印结果为false
 3.基本数据类型跟包装类型比较,直接比较值
 4.基本数据类型跟包装类型比较,直接比较值
 5.new出来的都是新对象

 总结:Integer类重写了equals方法,重写后的作用是用来比较2个Integer类型变量的值
 比较引用数据类型变量的值,使用equals

3、String(*)

1、获取方法


方法

说明

int length()

获取字符串的长度(*)

char charAt(int index)

获取指定位置的字符(index  下标 )

int indexOf(String str)

获取指定字符首次出现的位置

int lastIndexOf(String str)

获取指定字符最后一次出现的位置

String s = "hello";
  /**
   * 一.获取方法
   */
  //1、获取长度
  int len = s.length();
  System.out.println("字符串的长度为:"+len);
  //2.获取指定下标位置的字符(字符串中的每个字符都有下标,下标从0开始)
  char c = s.charAt(4);
  System.out.println(c);
  //3.获取指定字符首次出现的下标
  int index = s.indexOf("l");
  System.out.println(index);

2、判断方法(*)


方法

说明

boolean endswith(String str)

测试此字符串是否以指定的后缀结束

boolena isEmpty()

字符串长度是否为0  jdk1.6新特性

boolean contains(CharSequences s)

是否包含指定值  应用:搜索

boolean equals(Object  objec)

判断两个字符串值是否相等

boolean equalsIgnoreCase(String str)

忽略大小写是否相等

startsWith(String prefix)

测试此字符串是否以指定的前缀开始。

/**
   * 二.判断方法
   */
  //1.equals
  String s1 = "world";
  boolean r1 = s1.equals(s);
  System.out.println(r1);
  
  String s2 = "www.woniuxy.com";
  //2.判断字符串是否以指定的后缀结束
  boolean r2 = s2.endsWith(".com");
  System.out.println(r2);
  //3.判断字符串是否为空--判断长度
  String s3 = "";
  boolean r3 = s3.isEmpty();
  System.out.println(r3);
  //4.判断字符串是否包含指定的值
  boolean r4 = s2.contains("wo");
  System.out.println(r4);
  //5.比较两个字符串是否相等,并忽略大小写
  String s4 = "WWW.WoniuXy.Com";
  boolean r5 = s4.equalsIgnoreCase(s2);
  System.out.println(r5);
  //6.判断字符串是否以指定的内容开头
  boolean r6 = s2.startsWith("www.");
  System.out.println(r6);

3、转换方法


方法

说明

String toUpperCase()

小写转大写

String toLowerCase()

大写转小写

char[] toCharArray()

将字符串转换为字符数组

new  String(char[] array)

将字符数组转为字符串

/**
   * 三.转换
   */
  String s5 = "Hello";
  //1.小写转大写
  String newS1 = s5.toUpperCase();
  System.out.println(newS1);
  //2.大写转小写
  String newS2 = s5.toLowerCase();
  System.out.println(newS2);
  //3.字符串转字符数组
  char[] arr = s5.toCharArray();
  //字符数组可以直接打印
  for (int i = 0; i < arr.length; i++) {
   System.out.println(arr[i]);
  }
  //4.字符数组转字符串
  String newStr = new String(arr);
  System.out.println(newStr);

4、其他方法(*)


方法

说明

String replace(char oldChar, char newChar)

使用指定的值替换替换此字符串所有匹配的字符

String[] split(String regex)

根据指定字符将字符串切割为数组

String substring(int beginIndex)

从指定位置截取到最后

String substring(int beginIndex, int endIndex)

截取指定长度的字符串

String trim()

去除字符串首尾空格

/**
   * 四.其它方法
   */
  String str = "woniuxy";
  //1.替换--被替换的内容,替换后的内容
  String newStr1 = str.replace("woniu", "***");
  System.out.println(newStr1);
  //2.切割(注意,不能对点和*进行切割)
  String str2 = "aa-bb-cc-dd";
  String[] arr2 = str2.split("-");
  for (int i = 0; i < arr2.length; i++) {
   System.out.println(arr2[i]);
  }
  //3.截取
  String s6 = "www.woniuxy.com";
  //a.从指定下标截取到字符串末尾
  String newS6 = s6.substring(3);
  System.out.println(newS6);
  //b.指定截取的下标区间--不包含结束下标
  String newS7 = s6.substring(3, 7);
  System.out.println(newS7);
  //4去除字符串的首尾空格
  String s7 = "  aaa   bbb  cc   ";
  String newS8 = s7.trim();
  System.out.println(newS8);
  //5.去除字符串的所有空格
  String newS9 = s7.replace(" ", "");
  System.out.println(newS9);

5.字符串的遍历

/**
   *  字符串的遍历
   */
  String str8 = "www.woniuxy.com";
  //方式一
  for(int i=0;i<str8.length();i++) {
   char b = str8.charAt(i);
   System.out.println(b);
  }
  
  System.out.println("----------------------");
  //方式二
  char[] arr3 = str8.toCharArray();
  for (int i = 0; i < arr3.length; i++) {
   System.out.println(arr3[i]);
  }

6、补充

String类是被final修饰的类,不可以被继承

在java中,所有的字符串字面值都看作是Stirng类的实例(对象),并且所有的字符串字面值都是常量。

1、比较字符串的值(*)
/**
 * String类被final修饰,不能有子类
 * 所有的字符串字面值,都看作String类的实例(对象)
 * 字符串的值是常量,在创建后不可更改
 * 字符串拼接一定会创建新对象
 */

  String s1 = "hello";
  String s2 = s1+"world";
  System.out.println(s2);
  
  
  String str1 = "Java 基础版";

  String str2 = new String();

  String str3 = new String("Java 高级版"); 
  System.out.println(str3);
  
  
  String st1 = "abc";
  String st2 = "abc";
  //==比较对象的内存地址
  System.out.println(st1 == st2);//st1,st2是同一个对象
  System.out.println("-------------------------");
  String st3 = new String("abc");//st3是new出来的,是一个新的对象
  System.out.println(st3 == st1);

比较引用数据类型的值是否相等用equals

//1.比较字符串的值是否相等--String类重写了Object类的equals方法,用来比较字符串的值是否相等
  String s1 = "hello";
  String s2 = new String("hello");
  System.out.println(s1.equals(s2));
2、hashCode
String s1 = "abc";
  String s2 = "abc";
  String s3 = new String("abc");
  
  System.out.println(s1 == s2);
  System.out.println(s1 == s3);
  
  
  System.out.println(s1.hashCode());
  System.out.println(s2.hashCode());
  System.out.println(s3.hashCode());
  
  String s4 = "Aa";
  String s5 = "BB";
  System.out.println("--------------------------");
  System.out.println(s4.hashCode());
  System.out.println(s5.hashCode());

  System.out.println(s1.equals(s3));

4、Arrays

数组工具类型,可以让我们非常方便的去操作数组

//创建数组
  int[] arr = {2,6,3,7,5};
  //1.数组复制(扩容)
  int[] newArr = Arrays.copyOf(arr, 10);
//  for (int i = 0; i < newArr.length; i++) {
//   System.out.println(newArr[i]);
//  }
  
  //2.数组排序--升序排序
  Arrays.sort(arr);
//  for (int i = 0; i < arr.length; i++) {
//   System.out.println(arr[i]);
//  }
  
  //3.数组查找--使用二分法去数组中查找元素,数组必须是升序的,结果是元素在数组中的下标,没找到结果为负数
  int index = Arrays.binarySearch(arr, 10);
  System.out.println(index);
  //4.数组转字符串
  //直接输出数组输出的是数组的内存地址
  System.out.println(arr);
  
  //返回指定数组内容的字符串表示形式。
  System.out.println(Arrays.toString(arr));

5、Math 类

Math执行基本数学运算的方法。

//1.PI
  System.out.println(Math.PI);
  //2.取绝对值-
  int n1 = Math.abs(-123);
  System.out.println(n1);
  //3.向上取整
  double n2 = Math.ceil(3.3);
  System.out.println(n2);
  //4.向下取整
  double n3 = Math.floor(3.6);
  System.out.println(n3);
  //5.四舍五入
  long n4 = Math.round(3.49);
  System.out.println(n4);
  //6.随机数  0<=Math.random()<1
  //生成1-10之间的整数
  double n5 = (int)(Math.random()*10)+1;
  System.out.println(n5);
  
  //7.求m的n次方
  double n6 = Math.pow(2, 3);
  System.out.println(n6);

6、UUID

表示通用唯一标识符

/**
   * UUID
   *  生成32位随机字符串
   */
  String uuid = UUID.randomUUID().toString();
  System.out.println(uuid);

7、Random

//创建Random对象
  Random random = new Random();
  //生成0-10之间的随机整数,不包含10
  int n = random.nextInt(10);
  System.out.println(n);