【JavaSE】之Java常用类(下)

简介: 【JavaSE】之Java常用类(下)

三、包装类


  • Java中基本数据类型对应的引用数据类型,叫包装类
public static void main(String[] args) {
    // JDK1.5之前的写法
    int i = 3;
    Integer in = new Integer(i); // 装箱
    Object obj = in;
    int i2 = in.intValue(); // 拆箱
    // JDK1.5之后,自动装箱拆箱
    Integer in1 = i; // 自动装箱
    int i3 = in1; // 自动拆箱
    Double d = 0.3;
    double db = d;
    // 将字符串转换成基本数据类型
    String s = "3";
    // 如果该字符串里面不是数字,将会出现NumberFormatException
    int n = Integer.valueOf(s); // parseInt()也行
    System.out.println(n);
    String s1 = "2.04";
    double db1 =  Double.parseDouble(s1);
    System.out.println(db1);
    // 如果该字符串中不是true(不区分大小写),则返回false,不论如何不会报错
    String s2 = "TRue";
    boolean b = Boolean.parseBoolean(s2);
    System.out.println(b);
    // 对于char类型,直接使用charAt(index)
    String s3 = "ABCD";
    char c = s3.charAt(2);
    System.out.println(c);
    int m = 50;
    int m1 = 50;
    System.out.println(m == m1);
    // Integer常量池(缓冲区)
    // 在Integer中,最多会设置-128到127,一共256个常量
    // 在使用valueOf或者直接以数字的形式赋值时,会去常量池中查找,如果能找到,则返回该常量,否则或创建一个对象
    // 如果是常量池中的常量,使用再多次,也是用的同一个地址
    Integer in2 = 100;
    Integer in3 = 100;
    System.out.println(in2 == in3); // true
    Integer in4 = 200;
    Integer in5 = 200;
    System.out.println(in4 == in5); // false
    Integer in6 = new Integer(100);
    Integer in7 = new Integer(100);
    System.out.println(in6 == in7); // false
    Integer in8 = Integer.valueOf(100);
    Integer in9 = Integer.valueOf(100);
    System.out.println(in8 == in9); // true
    Integer in10 = Integer.valueOf(200);
    Integer in11 = Integer.valueOf(200);
    System.out.println(in10 == in11); // false
}

四、字符串


  • String对象创建后不可变,是指String内部使用一个final char[]来存放数据。所以值不能改变。
  • String每次重新赋值相当于重新的创建了字符串。


String s = "hello";
s = "world678";
System.out.println(s);

字符串的两种赋值方式: String s = “hello”; String s1 = new String(“world”);


字符串常量池,在内存中,会分配一块空间,里面存放字符串常量,当使用""来给字符串赋值时,会在常量创建该字符串,如果变量直接用等于接收,即变量中存储的是该常量的地址,而该常量可以复用,所以下面第一个表达式的值为true,即都指向常量池中的同一个区域。


而如果通过new String来创建对象,会分配一个块新的空间,所以下面的第二个表达式值为false。

String s1 = "hello";
String s2 = "hello";
System.out.println(s1 == s2); // true
String s3 = new String("hello");
String s4 = new String("hello");
System.out.println(s3 == s4); // false

字符串的常量优化:(编译期优化)


如果字符串在编译时,能确定值,并且不会变化,则会进行优化,直接在编译时直接得到结果,而不会在运行时再计算。

String s5 = "ab";
String s6 = "a" + "b";
System.out.println(s5 == s6); // true
String s7 = "a";
String s8 = s7 + "b";
System.out.println(s5 == s8); // false
final String s9 = "a";
String s10 = s9 + "b";
System.out.println(s5 == s10); // true

字符串常用方法如下代码


注意: 如果该方法是用来改变字符串,一定会返回一个新的字符串,因为字符串不能直接改变 。

public static void main(String[] args) {
    // 得到字符某个位置的字符
    String s = "hello";
    char ch = s.charAt(1); // 结果为e
    String s1 = "oh, hello, hello";
    boolean b = s1.contains(s); // 结果是true,s1字符串中包含s
    System.out.println(b);
    char [] arr = s1.toCharArray(); // 将字符串转换成char数组
    System.out.println(Arrays.toString(arr));
    int index = s1.indexOf(s); // 判断s1中是否包含s,如果包含则返回s第一次出现的下标,如果不包含,则返回-1
    System.out.println(index);
    // 注意:数组的长度为length属性,字符串是length方法
    System.out.println(s1.length()); // length方法返回字符串的长度
    String s2 = "       hello       ";
    System.out.println(s2);
    System.out.println(s2.length());
    String newS2 = s2.trim(); // 去掉字符串两边的空格
    System.out.println(newS2);
    System.out.println(newS2.length());
    String newS1 = s1.toUpperCase(); // 将字符串全部大写
    System.out.println(newS1);
    newS1 = newS1.toLowerCase(); // 将字符串全部小写
    System.out.println(newS1);
    boolean b1 = s1.startsWith("oh,"); // 判断字符串是否以xx开始
    System.out.println(b1);
    b1 = s1.endsWith("oh,"); // 判断字符串是否以xx结尾
    System.out.println(b1);
    String newS3 = s1.replace("h", "ooo"); // 将字符串中出现h全部替换成ooo
    System.out.println(newS3);
    String [] strArr = s1.split(","); // 将字符串根据,切割成一个字符串数组
    System.out.println(strArr.length);
    System.out.println(Arrays.toString(strArr));
    String s4 = "abcdefghijkllmn";
    String newS4 = s4.substring(3); // 从第三号位置开始截取,截取后面所有的字符串
    System.out.println(newS4);
    newS4 = s4.substring(3, 6); // 从第三号位置开始截取,截取到6号位置(不包含6号位置)
    System.out.println(newS4);
    byte [] bytes = s5.getBytes(); // 得到所有的字节形成的字节数组
    System.out.println(Arrays.toString(bytes));
}


五、可变字符串


  • 可变字符串可以对字符串进行增删改操作,主要作用是当要大量的操作字符串的时候,应该使用可变字符串,以提升性能,节约空间。
  • StringBuffer:JDK1.0提供,线程安全,效率低
  • StringBuilder:JDK5.0提供,线程不安全,效率高
// 创建StringBuilder或StringBuffer
StringBuilder sb = new StringBuilder("hello");
// 拼接字符串
sb.append("world");
sb.append("world");
sb.insert(2, "aaa"); // 向第二号位插入内容
sb.delete(3, 6); // 从第3号位删除到第6号位(不包含6号位)
System.out.println(sb.toString());

六、BigDecimal


  • 通常用来进行小数精确运算和大数字的计算。
  • 注意:构造方法一定要使用字符串的方式。
public static void main(String[] args) {
    //        System.out.println(1.0-0.9); // 不精确
    //        System.out.println(2100000000 * 2100000000 * 2100000000); // 超出范围
    BigDecimal b = new BigDecimal("1.0");
    BigDecimal b1 = new BigDecimal("0.9");
    System.out.println(b.subtract(b1)); // 减法
    BigDecimal b2 = new BigDecimal("1.0234279243253");
    BigDecimal b3 = new BigDecimal("0.91231231234");
    System.out.println(b2.multiply(b3)); // 乘法
    BigDecimal b4 = new BigDecimal("1.0234279243253");
    BigDecimal b5 = new BigDecimal("0.91231231234");
    // 参数1,数
    // 参数2,保留小数位
    // 参数3,此处选择的四舍五入
    System.out.println(b4.divide(b5, 2000, BigDecimal.ROUND_HALF_UP));// 除法
    // 大数字的运算
    BigDecimal b6 = new BigDecimal("428374892734927347892749827498273947298374927344");
    BigDecimal b7 = new BigDecimal("548347593754892874823472938748237875984359374859");
    System.out.println(b6.multiply(b7));
}

七、Date


  • 常用的一个日期时间类,可以得到当前时间,与其他的时间比较早晚。
public static void main(String[] args) {
    Date d = new Date(); // 得到当前时间对象,有时区
    // 得到距离1970-1-1 GMT 0:0:0 所经过的毫秒数
    System.out.println(d.getTime()); 
    d.setTime(1597046465956L); // 设置时间为2020-8-10 16:01:05 CST
    System.out.println(d);
    Date d1 = new Date();
    System.out.println(d.before(d1)); // 判断d是否在d1之前
    System.out.println(d.after(d1)); // 判断d是否在d1之后
    int n = d.compareTo(d1); // d如果早于d1,返回-1,等于返回0,晚于返回1
    System.out.println(n);
}

八、日历类


  • 日历类主要作用是对日期进行获取和设置,并进行加减。
public static void main(String[] args) {
    // 得到对象,不能使用new创建对象
    Calendar c = Calendar.getInstance();
    // 获取日期
    int year = c.get(Calendar.YEAR);
    int month = c.get(Calendar.MONTH);
    int date = c.get(Calendar.DATE);
    int hour = c.get(Calendar.HOUR_OF_DAY);// 24小时制
    int minute = c.get(Calendar.MINUTE);
    int second = c.get(Calendar.SECOND);
    int weekday = c.get(Calendar.DAY_OF_WEEK); // 日一二三
    System.out.println(year + "年" + (month+1) + "月" + date + "日 " +
                       hour + ":" + minute + ":" + second + " 星期" + weekday);
    // 日期计算
    // 参数1:日期计算的标准(日,月,年,星期,小时等)
    // 参数2:时长(可以使用负数)
    c.add(Calendar.WEEK_OF_YEAR, -60);
    System.out.println(c);
}

九、SimpleDateFormat


  • 主要作用是将日期格式化成字符串,或将字符串转换成日期格式。
public static void main(String[] args) {
    String s = "1999年10月10日 14:25:36.175";
    // yyyy 年
    // MM 月
    // dd 日
    // HH 24制小时 
    // hh 12小时制
    // mm 分钟
    // ss 秒
    // SSS 毫秒
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss.SSS");
    try {
        Date date = sdf.parse(s); // 将字符串转换成日期类型
        System.out.println(date);
    } catch (ParseException e) {
        // 如果出错会执行输出异常原因
        e.printStackTrace();
    } 
    Date d = new Date();
    SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String str = sdf1.format(d); // 按照提供的格式将日期转换成字符串显示
    System.out.println(str);
} = 'bar';

十、System类的常见方法


  • arrayCopy() :数组复制
  • currentTimeMillis():得到当前时间的毫秒数
  • gc():建议JVM启动垃圾回收
  • exit(0):退出系统
public static void main(String[] args) {
    // 得到当前时间距离1970-1-1 0:0:0 GMT的毫秒数
    System.out.println(System.currentTimeMillis());
    for (int i = 0; i < 100; i++) {
        if(i == 20) {
            System.exit(0); // 退出系统
        }
        System.out.println(i);
    }
}


后记


Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~

相关文章
|
27天前
|
算法 Java 数据处理
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。HashSet基于哈希表实现,提供高效的元素操作;TreeSet则通过红黑树实现元素的自然排序,适合需要有序访问的场景。本文通过示例代码详细介绍了两者的特性和应用场景。
36 6
|
15天前
|
存储 安全 Java
java.util的Collections类
Collections 类位于 java.util 包下,提供了许多有用的对象和方法,来简化java中集合的创建、处理和多线程管理。掌握此类将非常有助于提升开发效率和维护代码的简洁性,同时对于程序的稳定性和安全性有大有帮助。
37 17
|
6天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
10天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
50 4
|
11天前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
27 2
|
15天前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
|
20天前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。
|
20天前
|
Java API Maven
如何使用 Java 字节码工具检查类文件的完整性
本文介绍如何利用Java字节码工具来检测类文件的完整性和有效性,确保类文件未被篡改或损坏,适用于开发和维护阶段的代码质量控制。
|
19天前
|
存储 Java 编译器
java wrapper是什么类
【10月更文挑战第16天】
23 3
|
22天前
|
Java 程序员 测试技术
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
21 5