java基础笔记-常用类的概述和使用

 

包的名称和功能

  • java.lang 包是 java的核心包,由java虚拟机自动导入. 如 System,String.
  •  java.util包 - 该包是Java语言的工具包,里面提供了大量工具类以及集合类等。 如:Scanner类、Random类、List集合、...
  •  java.io包 - 该包是Java语言中的输入输出包,里面提供了大量读写文件相关的类等。 如:FileInputStream类、FileOutputStream类、...
  •  java.net包 - 该包是Java语言中的网络包,里面提供了大量网络编程相关的类等。 如:ServerSocket类、Socket类、...
  •  java.sql 包 - 该包是Java语言中的数据包,里面提供了大量操作数据库的类和接口等。 如:DriverManager类、Connection接口、…

 

Obiect 类

  • java.lang.Object类是Java语言中类层次结构的根类,也就是说任何一个类都是该类的直接或者间 接子类。
  • 如果定义一个Java类时没有使用extends关键字声明其父类,则其父类为 java.lang.Object 类
  • Object类定义了“对象”的基本行为, 被子类默认继承。
boolean equals(Object obj):

   用于判断调用对象是否与参数对象相等。

   该方法默认比较两个对象的地址是否相等,与 == 运算符的结果一致

   若希望比较两个对象的内容,则需要重写该方法。

示例代码:

 

package com.lagou.task11;

import java.util.Objects;

public class Student extends Object {
    private int id; // 用于描述学号的成员变量
    private String name; // 用于描述姓名的成员变量

    public Student() {
    }

    public Student(int id, String name) {
        setId(id);
        setName(name);
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        if (id > 0) {
            this.id = id;
        } else {
            System.out.println("学号不合理哦!!!");
        }
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return id == student.id &&
                Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name);
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
/*
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Student student = (Student) o;

        if (id != student.id) return false;
        return name != null ? name.equals(student.name) : student.name == null;
    }

    @Override
    public int hashCode() {
        int result = id;
        result = 31 * result + (name != null ? name.hashCode() : 0);
        return result;
    }

 */
    /**
     * 为了比较两个对象的内容,也就是学号信息需要重写该方法
     */
    // Student this = s1;
    // Object obj = s2;
    /*
    @Override
    public boolean equals(Object obj) {
        // 当调用对象和参数对象指向同一个对象时,则内容一定相同
        if (this == obj) return true;
        // 当调用对象为不为空而参数对象为空时,则内容一定不相同
        if (null == obj) return false;
        // 判断obj指向的对象是否为Student类型的对象,若是则条件成立,否则条件不成立
        if (obj instanceof Student) {
            Student ts = (Student) obj;
            // 以学号作为基准判断两个对象是否相等  int是基本数据类型,内存空间中放的就是数据本身,使用 == 可以判断数据是否相同
            //return this.getId() == ts.getId();
            // 以姓名作为基准判断两个对象是否相等  String是引用数据类型,内存空间中放的是地址,使用 == 判断地址是否相同
            // 也就是判断两个对象中姓名字符串的地址是否相同,不够完美
            //return this.getName() == ts.getName();
            return this.getName().equals(ts.getName()); // 比较姓名字符串的内容是否相同
        }
        // 否则类型不一致没有可比性,则内容一定不相同
        return false;
    }
    */
    /**
     * 为了使得该方法的结果与equals方法的结果保持一致,从而满足Java官方的常规协定,需要重写该方法
     */
    /*
    @Override
    public int hashCode() {
        //return getId(); // 不再代表内存地址的编号了
        final int type = 12;
        //return type*31 + getId();
        return type*31 + getName().hashCode();
    }
    */
    /**
     * 为了返回更有意义的字符串数据,则需要重写该方法
     */
    /*
    @Override
    public String toString() {
        return "Student[id = " + getId() + ", name = " + getName() + "]";
    }
     */
}

 

总结:

  == 是判断两个对象的地址是否一致

  重写equals 方法可以根据对象的内容具体判断是否一致

  重写 hashcode 方法用来和equals方法的结果保持一致

  

int 类型的hashcode 重写:

final int type = 12;
return type*31 + getId();

String 类型的hashcode重写:
return type*31 + getName().hashCode();
判断2 个对象的成员字符串相等:
 return this.getName().equals(ts.getName());
 

 包装类

  

Integer类:

 

package com.lagou.task11;

public class IntegerTest {

    public static void main(String[] args) {

        // 1.打印Integer类中常用的常量数值
        System.out.println("最大值是:" + Integer.MAX_VALUE); // 2^31-1
        System.out.println("最小值是:" + Integer.MIN_VALUE); // -2^31
        System.out.println("所表示二进制的位数是:" + Integer.SIZE); // 32
        System.out.println("所占字节的个数是:" + Integer.BYTES); // 4
        System.out.println("对应int类型的Class实例是:" + Integer.TYPE); // int

        System.out.println("------------------------------------------------------");
        // 2.使用构造方法来构造Integer类型的对象并打印
        //Integer it1 = new Integer(123);
        //System.out.println("it1 = " + it1); // 自动调用toString方法   123
        //Integer it2 = new Integer("456");
        //System.out.println("it2 = " + it2); // 456
        // 上述方法已过时,建议使用valueOf方法取代之,相当于从int类型到Integer类型的转换,叫做装箱
        Integer it3 = Integer.valueOf(123);
        System.out.println("it3 = " + it3); // 123
        // 相当于从String类型到Integer类型的转换
        Integer it4 = Integer.valueOf("456");
        System.out.println("it4 = " + it4); // 456   自动调用toString方法得到的是String类型
        // 获取调用对象中的整数数值,相当于从Integer类型到int类型的转换,叫做拆箱
        int ia = it4.intValue();
        System.out.println("获取到的整数数据是:" + ia); // 456  得到的是int类型

        System.out.println("------------------------------------------------------");
        // 3.从Java5开始增加了自动装箱和自动拆箱的机制
        Integer it5 = 100;  // 直接通过赋值运算符实现自动装箱
        int ib = it5;       // 直接通过赋值运算符实现自动拆箱

        System.out.println("------------------------------------------------------");
        // 4.装箱和拆箱的笔试考点
        Integer it6 = 127; //128;
        Integer it7 = 127; //128;
        Integer it8 = new Integer(127); //new Integer(128);
        Integer it9 = new Integer(127); //new Integer(128);
        System.out.println(it6 == it7);      // 比较地址  false  true  地址一样
        System.out.println(it6.equals(it7)); // 比较内容  true
        System.out.println(it8 == it9);      // 比较地址  false
        System.out.println(it8.equals(it9)); // 比较内容  true

        System.out.println("------------------------------------------------------");
        // 5.实现静态方法的调用
        int ic = Integer.parseInt("200");
        //int ic = Integer.parseInt("200a"); // 编译ok,运行发生NumberFormatException数字格式异常,因为有字母
        Sy
stem.out.println("字符串转换为整数的结果是:" + ic); // 200 System.out.println("根据参数指定的整数获取对应的十进制字符串是:" + Integer.toString(200)); System.out.println("根据参数指定的整数获取对应的二进制字符串是:" + Integer.toBinaryString(200)); System.out.println("根据参数指定的整数获取对应的十六进制字符串是:" + Integer.toHexString(200)); System.out.println("根据参数指定的整数获取对应的八进制字符串是:" + Integer.toOctalString(200)); } }

 

 

 

 注: 自动装箱的时候, -128 ~127 使用了自动装箱池的操作,直接取装箱池里面的对象.

 

Double 包装类:

package com.lagou.task11;

public class DoubleTest {

    public static void main(String[] args) {

        // 1.在Java5之前装箱和拆箱的实现
        // 实现了从double类型到Double类型的转换,装箱
        Double db1 = Double.valueOf(3.14);
        System.out.println("db1 = " + db1); // 3.14
        // 实现了从Double类型到double类型的转换,拆箱
        double d1 = db1.doubleValue();
        System.out.println("d1 = " + d1); // 3.14

        System.out.println("---------------------------------------------");
        // 2.从Java5开始实现自动装箱和自动拆箱
        Double db2 = 3.14;
        double d2 = db2;

        System.out.println("---------------------------------------------");
        // 3.实现静态方法和成员方法的调用
        double d3 = Double.parseDouble("13.14");
        System.out.println("d3 = " + d3); // 13.14

        System.out.println("db2对象的判断结果是:" + db2.isNaN()); // false 不是非数字
        Double db3 = Double.valueOf(0/0.0);
        System.out.println("db2对象的判断结果是:" + db3.isNaN()); // true  是非数字


    }
}

Boolean 包装类:

package com.lagou.task11;

public class BooleanTest {

    public static void main(String[] args) {

        // 1.在Java5之前采用方法进行装箱和拆箱
        // 相当于从boolean类型到Boolean类型的转换,装箱
        Boolean bo1 = Boolean.valueOf(true);
        System.out.println("bo1 = " + bo1); // true
        boolean b1 = bo1.booleanValue();
        System.out.println("b1 = " + b1); // true

        System.out.println("----------------------------------------------");
        // 2.从Java5开始支持自动装箱和拆箱
        Boolean bo2 = false;
        boolean b2 = bo2;
        System.out.println("b2 = " + b2); // false

        System.out.println("----------------------------------------------");
        // 3.实现从String类型到boolean类型的转换
        //boolean b3 = Boolean.parseBoolean("112");
        // 该方法的执行原理是:只要参数数值不为true或者TRUE时,则结果就是false,查手册和源码
        boolean b3 = Boolean.parseBoolean("TRUE");
        System.out.println("b3 = " + b3); // true
    }
}

 

 Character 包装类:

package com.lagou.task11;

public class CharacterTest {

    public static void main(String[] args) {

        // 1.在Java5之前调用方法实现装箱和拆箱机制
        // 相当于从char类型到Character类型的转换,装箱
        Character ca1 = Character.valueOf('a');
        System.out.println("ca1 = " + ca1); // a
        // 从Character类型向char类型的转换,拆箱
        char c1 = ca1.charValue();
        System.out.println("c1 = " + c1); // a

        System.out.println("----------------------------------------");
        // 2.从Java5开始支持自动装箱和拆箱
        Character ca2 = 'b';
        char c2 = ca2;
        System.out.println("c2 = " + c2); // b

        System.out.println("----------------------------------------");
        // 3.实现字符类型的判断以及转换
        System.out.println(Character.isUpperCase(c2)); // 判断是否为大写字母  false
        System.out.println(Character.isLowerCase(c2)); // 判断是否为小写字母  true
        System.out.println(Character.isDigit(c2));     // 判断是否为数字字符  false
        System.out.println("转换为大写字符是:" + Character.toUpperCase(c2)); // B
        System.out.println("转换为小写字符是:" + Character.toLowerCase(c2)); // b
    }
}

 Math 类:

package com.lagou.task11;

/**
 * 编程实现对Math类中常用方法的测试
 */
public class MathTest {

    public static void main(String[] args) {

        System.out.println("获取两个整数中最大值的结果是:" + Math.max(10, 20)); // 20
        System.out.println("获取两个整数中最小值的结果是:" + Math.min(10, 20)); // 10
        System.out.println("获取次方的结果是:" + Math.pow(2, 3)); // 8.0  体现double类型
        System.out.println("获取绝对值的结果是:" + Math.abs(-5)); // 5
        System.out.println("进行四舍五入的结果是:" + Math.round(3.14)); // 3
        System.out.println("该整数的平方根是:" + Math.sqrt(16)); // 4.0
        System.out.println("生成的随机数是:" + Math.random()); // 随机数
    }
}

 

 java.math.BigDecimal 类: 用于精确计算

package com.lagou.task11;

import java.math.BigDecimal;
import java.math.RoundingMode;

public class BigDecimalTest {

    public static void main(String[] args) {

        // 1.构造BigDecimal类型的两个对象
        BigDecimal bd1 = new BigDecimal("5.2");
        BigDecimal bd2 = new BigDecimal("1.3");
        // 2.使用构造完毕的对象实现加减乘除运算
        System.out.println("实现加法运算的结果是:" + bd1.add(bd2)); // 6.5
        System.out.println("实现减法运算的结果是:" + bd1.subtract(bd2)); // 3.9
        System.out.println("实现乘法运算的结果是:" + bd1.multiply(bd2)); // 6.76
        System.out.println("实现除法运算的结果是:" + bd1.divide(bd2)); // 4

        System.out.println("---------------------------------------------------------------");
        // 3.实现精确运算
        System.out.println(0.1 + 0.2); // 0.30000000000000004
        BigDecimal bd3 = new BigDecimal("0.1");
        BigDecimal bd4 = new BigDecimal("0.2");
        System.out.println("精确计算的结果是:" + bd3.add(bd4)); // 0.3

        System.out.println("---------------------------------------------------------------");
        // 4.注意事项
        BigDecimal bd5 = new BigDecimal("2");
        BigDecimal bd6 = new BigDecimal("0.3");
        System.out.println("除法运算的结果是:" + bd5.divide(bd6, RoundingMode.HALF_UP)); // 7
        
        //把1234.567赋值给变量a0
        BigDecimal a0 = new BigDecimal(1234.567);
        //保留两位,以HALF_UP,四舍五入的形式:输出1234.57
        System.out.println(a0.setScale(2, RoundingMode.HALF_UP));
        //保留一位,以CEILING,直接进位的形式:输出1234.6
        System.out.println(a0.setScale(1,RoundingMode.CEILING));
        //保留一位,以FLOOR,直接甩掉尾巴部分的形式:输出1234.5
        System.out.println(a0.setScale(1,RoundingMode.FLOOR));

    }
}

 

 

 java.math.BigInteger 类:用来表示比long类型还大的数据类型

package com.lagou.task11;

import java.math.BigInteger;

public class BigIntegerTest {

    public static void main(String[] args) {

        // 1.构造两个BigInteger类型的对象并指定初始值
        BigInteger bi1 = new BigInteger("20");
        BigInteger bi2 = new BigInteger("8");
        // 2.实现加减乘除取余操作并打印
        System.out.println("实现加法运算的结果是:" + bi1.add(bi2)); // 28
        System.out.println("实现减法运算的结果是:" + bi1.subtract(bi2)); // 12
        System.out.println("实现乘法运算的结果是:" + bi1.multiply(bi2)); // 160
        System.out.println("实现除法运算的结果是:" + bi1.divide(bi2)); // 2
        System.out.println("实现取余运算的结果是:" + bi1.remainder(bi2)); // 4

        System.out.println("-----------------------------------------------------");
        // 3.一次性得到商和余数
        BigInteger[] arr = bi1.divideAndRemainder(bi2);
        for (int i = 0; i < arr.length; i++) {
            System.out.println("下标为" + i + "的元素是:" + arr[i]); // 2 4
        }
    }
}

 

 文章来自拉勾教育 大数据开发

  

 

posted @ 2021-04-14 20:31  wangheng1409  阅读(79)  评论(0编辑  收藏  举报