ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java常用类

2022-05-16 10:04:42  阅读:133  来源: 互联网

标签:常用 Java String int System Calendar public out


Java常用类

String类

String类又称不可变字符序列。 String位于java.lang包中,Java程序默认导入java.lang包下的所有类。Java字符串使用Unicode。注意,它是不可变的:

003

创建字符串

String str = 'test'

常量池

  • 全字符串常量池:全局字符串常量池中存放的内容是在类加载完成后存到String Pool中的,在每个VM中只有一份,存放的是字符串常量的引用值(在堆中生成字符串对象实例)。
  • class文件常量池:class常量池是在编译的时候每个class都有的,在编译阶段,存放的是常量(文本字符串、final常量等)和符号引用。
  • 运行时常量池:运行时常量池是在类加载完成之后,将每个class常量池中的符号引用值转存到运行时常量池中,也就是说,每个class都有一个运行时常量池,类在解析之后,将符号引用替换成直接引用,与全局常量池中的引用值保持一致。

String 创建的字符串存储在公共池中,而 new 创建的字符串对象在堆上:

String str1 = "abc";
String str2 = new String("def");
String str3 = "abc";
String str4 = str2.intern();
String str5 = "def";
System.out.println(str1 == str3);// true
System.out.println(str2 == str4);// false
System.out.println(str4 == str5);// true

==比较地址,所以通常情况下比较字符串使用equals()。

常用API

  • 返回指定下标字符:char charAt(int index)
  • 字符串判等: boolean equals(String other)
  • 忽略大小写判等: boolean equalsIgnoreCase(String other)
  • 查找字符首次出现位置: int indexOf(String str)
  • 查找字符最后出现位置: int lastIndex(String str)
  • 字符串长度: int length()
  • 字符串替换: String replace(char oldChar, char newChar)
  • 开头检查: boolean startsWith(String prefix)
  • 结尾检查: boolean endWith(String prefix)
  • 截取: String substring(int beginIndex, int endIndex)
  • 大写转小写: String toLowerCase()
  • 小写转大写: String toUpperCase()
  • 去除头尾空格: String trim()

StringBuffer和StringBuilder

StringBuffer和StringBuilder非常类似。 这两个类都是抽象类AbstractStringBuilder的子类,方法几乎一模一样,均代表可变的字符序列:

004

二者的区别:

  • StringBuffer是JDK1.0版本提供的类,线程安全,做线程同步检查, 效率较低。
  • StringBuilder是JDK1.5版本提供的类,线程不安全,不做线程同步检查,因此效率较高。 建议采用该类。

常用方法:

  • 添加字符序列:public StringBuilder append(…)
  • 删除序列:public StringBuilder delete(int start,int end)
  • 删除字符:public StringBuilder deleteCharAt(int index)
  • 插入序列:public StringBuilder insert(…)
  • 字符序列逆序: public StringBuilder reverse()

不可变和可变字符序列使用陷阱

String一经初始化后,就不会再改变其内容了。对String字符串的操作实际上是对其副本(原始拷贝)的操作。如果多次执行这些改变串内容的操作,会导致大量副本字符串对象存留在内存中,降低效率。如果这样的操作放到循环中,会极大影响程序的时间和空间性能,甚至会造成服务器的崩溃。

相反,StringBuilder和StringBuffer类是对原字符串本身操作的,可以对字符串进行修改而不产生副本拷贝或者产生少量的副本。因此可以在循环中使用。

时间处理相关类

在计算机世界 1970 年 1 月 1 日 00:00:00 为基准时间,每个度量单位是毫秒。用long类型的变量来表示时间。

long now = System.currentTimeMillis();

Date类

在标准Java类库中包含一个Date类。它的对象表示一个特定的瞬间,精确到毫秒。

  • Date() 分配一个Date对象,并初始化此对象为系统当前的日期和时间,可以精确到毫秒。
  • Date(long date) 分配 Date 对象并初始化此对象。
  • 测试此日期是否在指定日期之后:boolean after(Date when)
  • 测试此日期是否在指定日期之前:booleanbefore(Date when)
  • 比较两个日期的相等性:boolean equals(Object obj)
  • 返回自基准时间以来的毫秒数:long getTime()
  • 把此 Date 对象转换为 String: String toString()
    • dow mon dd hh:mm:ss zzz yyyy

DateFormat类和SimpleDateFormat类

把时间对象转化成指定格式的字符串。反之,把指定格式的字符串转化成时间对象。DateFormat是一个抽象类,一般使用它的的子类SimpleDateFormat类来实现。

使用示例:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestDateFormat {
    public static void main(String[] args) throws ParseException {
        // new出SimpleDateFormat对象
        SimpleDateFormat s1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        SimpleDateFormat s2 = new SimpleDateFormat("yyyy-MM-dd");
        // 将时间对象转换成字符串
        String daytime = s1.format(new Date());
        System.out.println(daytime);
        System.out.println(s2.format(new Date()));
        System.out.println(new SimpleDateFormat("hh:mm:ss").format(new Date()));
        // 将符合指定格式的字符串转成成时间对象.字符串格式需要和指定格式一致。
        String time = "2007-10-7";
        Date date = s2.parse(time);
        System.out.println("date1: " + date);
        time = "2007-10-7 20:15:30";
        date = s1.parse(time);
        System.out.println("date2: " + date);
    }
}

Calender类

Calendar 类是一个抽象类,为我们提供了关于日期计算的相关功能,比如:年、月、日、时、分、秒的展示和计算。GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统。

使用示例:

import java.util.*;
public class TestCalendar {
    public static void main(String[] args) {
        // 得到相关日期元素
        GregorianCalendar calendar = new GregorianCalendar(2999, 10, 9, 22, 10, 50);
        int year = calendar.get(Calendar.YEAR); // 打印:1999
        int month = calendar.get(Calendar.MONTH); // 打印:10
        int day = calendar.get(Calendar.DAY_OF_MONTH); // 打印:9
        int day2 = calendar.get(Calendar.DATE); // 打印:9
        // 日:Calendar.DATE和Calendar.DAY_OF_MONTH同义
        int date = calendar.get(Calendar.DAY_OF_WEEK); // 打印:3
        // 星期几 这里是:1-7.周日是1,周一是2,。。。周六是7
        System.out.println(year);
        System.out.println(month);
        System.out.println(day);
        System.out.println(day2);
        System.out.println(date);
        // 设置日期
        GregorianCalendar calendar2 = new GregorianCalendar();
        calendar2.set(Calendar.YEAR, 2999);
        calendar2.set(Calendar.MONTH, Calendar.FEBRUARY); // 月份数:0-11
        calendar2.set(Calendar.DATE, 3);
        calendar2.set(Calendar.HOUR_OF_DAY, 10);
        calendar2.set(Calendar.MINUTE, 20);
        calendar2.set(Calendar.SECOND, 23);
        printCalendar(calendar2);
        // 日期计算
        GregorianCalendar calendar3 = new GregorianCalendar(2999, 10, 9, 22, 10, 50);
        calendar3.add(Calendar.MONTH, -7); // 月份减7
        calendar3.add(Calendar.DATE, 7); // 增加7天
        printCalendar(calendar3);
        // 日历对象和时间对象转化
        Date d = calendar3.getTime();
        GregorianCalendar calendar4 = new GregorianCalendar();
        calendar4.setTime(new Date());
        long g = System.currentTimeMillis();
    }
    static void printCalendar(Calendar calendar) {
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH) + 1;
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        int date = calendar.get(Calendar.DAY_OF_WEEK) - 1; // 星期几
        String week = "" + ((date == 0) ? "日" : date);
        int hour = calendar.get(Calendar.HOUR);
        int minute = calendar.get(Calendar.MINUTE);
        int second = calendar.get(Calendar.SECOND);
        System.out.printf("%d年%d月%d日,星期%s %d:%d:%d\n", year, month, day,  
                        week, hour, minute, second);
    }
}

Math类

java.lang.Math提供了一系列静态方法用于科学计算;其方法的参数和返回值类型一般为double型。如果需要更加强大的数学运算能力,计算高等数学中的相关内容,可以使用apache commons下面的Math类库。

常用方法:

  • 绝对值:abs
  • 三角函数:acos,asin,atan,cos,sin,tan
  • 平方根:sqrt
  • a的b次幂:pow(double a, double b)
  • 取最大值:max(double a, double b)
  • 取最小值:min(double a, double b)
  • 向上取整:ceil(double a)
  • 向下取整:floor(double a)
  • 取0.0 到 1.0 的随机数:random()
  • double型的数据a转换为long型:long round(double a)
  • 弧度转角度:toDegrees(double angrad)
  • 角度转弧度:toRadians(double angdeg)

File类

java.io.File类:代表文件和目录。 在开发中,读取文件、生成文件、删除文件、修改文件的属性时经常会用到本类。

常用方法:

  • 常见构造方法:public File(String pathname)
    • 以pathname为路径创建File对象,如果pathname是相对路径,则默认的当前路径在系统属性user.dir中存储
  • 访问文件属性:
    • 判断File是否存在:public boolean exists()
    • 判断File是否是目录:public boolean isDirectory()
    • 判断File是否是文件:public boolean isFile()
    • 返回File最后修改时间:public long lastModified()
    • 返回File大小:public long length()
    • 返回文件名:public String getName()
    • 返回文件的目录路径:public String getPath()
  • 创建文件或目录:
    • 创建新的File:createNewFile()
    • 删除File对应的文件:delete()
    • 创建一个目录:mkdir()
    • 创建多个目录:mkdirs()

枚举类

JDK1.5引入了枚举类型。枚举体就是放置一些常量。枚举类型的定义包括枚举声明和枚举体。格式如下:

enum 枚举名{
    枚举体 (常量列表)
}

所有的枚举类型隐性地继承自 java.lang.Enum。枚举实质上还是类,而每个被枚举的成员实质就是一个枚举类型的实例,他们默认都是public static final修饰的。可以直接通过枚举类型名使用它们。

当你需要定义一组常量时,可以使用枚举类型。另外尽量不要使用枚举的高级特性,事实上高级特性都可以使用普通类来实现,没有必要引入枚举,增加程序的复杂性。

枚举的使用示例:

import java.util.Random;
public class TestEnum {
    public static void main(String[] args) {
        for (Week k : Week.values()) {// 枚举遍历
            System.out.println(k);
        }
        int a = new Random().nextInt(4); // 生成0,1,2,3的随机数
        switch (Season.values()[a]) {// switch语句中使用枚举
        case SPRING:
            System.out.println("春天");break;
        case SUMMER:
            System.out.println("夏天");break;
        case AUTUMN:
            System.out.println("秋天");break;
        case WINDTER:
            System.out.println("冬天");break;
        }
    }
}
enum Season {
    SPRING, SUMMER, AUTUMN, WINDTER
}
enum Week {
    星期一, 星期二, 星期三, 星期四, 星期五, 星期六, 星期日
}

标签:常用,Java,String,int,System,Calendar,public,out
来源: https://www.cnblogs.com/AncilunKiang/p/16275841.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有