Java学习笔记10-26

常用类

包装类:
Java是面向对象的语言,但不是纯面向对象,比如基本数据类型就不是对象。但实际应用中经常需要将基本数据转化成对象,以便于操作。比如:将基本数据类型存储到Object[]数组或集合中的操作等等。为了解决这个不足,Java在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class)
包装类位于java.lang包,对应关系见表格:

基本数据类型包装类
byteByte
booleanBoolean
shortShort
charCharacter
intInteger
longLong
doubleDouble

包装类基本用法

  1. 作为和基本数据类型对应的类型存在,方便涉及到对象的操作,如Object[],集合等操作。
  2. 包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法(这些操作方法的作用是在基本数据类型、包装类对象、字符串之间提供相互之间的转化)

Number类

自动装箱和拆箱
将基本数据类型和包装类自动转换。

包装类空指针异常问题:

public class Test {
	public static void main(String[] args) {
		Integer i = null;
		// int j = i;	// NullPointerException
	}
}

包装类的缓存问题
整型、char类型所对应的包装类,在自动装箱时,对于-128~127之间的值会进行缓存处理,其目的是提高效率。缓存原理为:如果数据在-128~127这个区间,那么在类加载时就已经为该区间的每个数值创建了对象,并将这256个对象存放到一个名为cache的数组中。每当自动装箱过程发生时(或手动调用valueOf()时),就会先判断数据是否在该区间,如果在则直接获取数组中对应的包装类对象的引用,如果不在该区间,则会通过new调用包装类的构造方法来创建对象。


字符串相关类:
String类
String类对象代表不可变的Unicode字符序列,因此也称为“不可变对象”。

StringBuilder类和StringBuffer类
StringBuilder:线程不安全,不做线程同步检查,效率高。(建议使用)
StringBuffer:线程安全,做线程同步检查,效率较低。
常用方法列表:
重载的public StringBuilder append(…)方法
可为该StringBuilder对象添加字符序列,仍返回自身对象。
方法public StringBuilder delete(int start, int end)
可删除从start开始到end-1为止的一段字符序列,返回自身对象
方法public StringBuilder deleteCharAt(int index)
移除此序列指定位置上的char,返回自身对象
重载public StringBuilder insert(…)方法
可为该StringBuilder对象在指定位置插入字符序列,返回自身对象
方法public StringBuilder reverse()
用于将字符序列逆序,返回自身对象
方法public String toString()返回此序列中数据的字符串表示形式
和String类含义类似的方法:
public int indexOf(String str)
public int indexOf(String str, int fromIndex)
public String substring(int start)
public String substring(int start, int end)
public int length()
char charAt(int index)

不可变字符序列使用陷阱

String str1 = "";
for (int i = 0; i < 5000; i++) {
	str1 = str1 + i;	// 相当于产生了5000个对象
}

建议使用StringBuilder来进行字符串拼接

StringBuilder str2 = new StringBuilder("");
for (int i = 0; i < 5000; i++) {
	str2.append(i);
}

计算机里把1970年1月1日00:00:00定位基准时间
时间处理相关类:
Date类(java.util.Date)

  • Date()分配一个Date对象,并初始化此对象为系统当前的日期和时间,可以精确到毫秒
  • Date(long date)分配Date对象并初始化此对象,以表示自从标准基准时间以来的毫秒数
  • boolean equals(Object obj)比较两个日期的相等性
  • long getTime()返回毫秒数
  • String toString()把此Date对象转换成以下形式的String:
    dow mon dd hh:mm:ss zzz yyyy (dow是一周中的某一天)

DateFormat和SimpleDateFormat

字母日期或时间元素表示示例
GEra标志符TextAD
yYear1996;96
M年中的月份MonthJuly;Jul;07
w年中的周数Number27
W月份中的周数Number2
D年中的天数Number189
d月份中的天数Number10
F月份中的星期Number2
E星期中的天数TextTuesday;Tue
aAm/pm 标记TextPM
H小时数(0-23)Number0
k小时数(1-24)Number24
Kam/pm中的小时数(0-11)Number0
ham/pm中的小时数(1-12)Number12
m分钟数Number30
s秒数Number55
S毫秒数Number978
z时区General time zonePacific Standard Time;PST;GMT-08:00
Z时区RFC 822 time zone0800
	Date now = new Date();
    DateFormat f1 = new SimpleDateFormat("今年的第D天,第w周");
    String str3 = f1.format(now);
    System.out.println(str3);

Calendar
抽象类,为我们提供关于日期计算的功能,比如:年、月、日、时、分、秒的展示和计算。
GregorianCalendar是Calendar的子类,表示公历。
注:一月是0,二月是1,以此类推。因为大多数人习惯使用单词而不是使用数字来表示月份,这样程序也许更易读,父类Calendar使用常量来表示月份:JANUARY,FEBRUARY等等。


其他常用类
Math类,Random类
java.lang.Math提供了一系列静态方法用于科学计算;常用方法如下:

  • abs绝对值
  • acos,asin,atan,cos,sin,tan三角函数
  • sqrt平方跟
  • paw(double a,double b)a的b次幂
  • max(double a, double b)取最大值
  • min(double a, double b)取最小值
  • ceil(double a)大于a的最小整数
  • floor(double a)小于a的最大整数
  • random()返回0.0到1.0的随机数
  • long round(double a) double型的数据a转换为long型(四舍五入)
  • toDegrees(double angrad) 弧度->角度
  • toRadians(double angdeg) 角度->弧度

File类
java.io.File类:代表文件和目录,用于读取文件、创建文件、删除文件、修改文件。
常见构造方法:public File(String pathname)
以pathname为路径创建File对象,如果pathname是相对路径,则默认的当前路径在系统属性user.dir中存储。

System.out.println(System.getProperty("user.dir"));	// 获取当前路径

通过File对象可以访问文件的属性:

方法说明
public boolean exists()判断File是否存在
public boolean isDirectory()判断File是否是目录
public boolean isFile()判断File是否是文件
public long lastModified()返回File最后修改时间
public long length()返回File大小
public String getName()返回文件名
public String getPath()返回文件的目录

通过File对象创建空文件或目录(在该对象所指的文件或目录不存在的情况下)
File类创建文件或目录的方法列表

方法说明
createNewFile()创建新的File
delete()删除File对应的文件
mkdir()创建一个目录;中间某个目录缺失,则创建失败
mkdirs()创建多个目录;中间某个目录缺失,则创建该确实目录

递归打印目录树

// 打印目录树,结合递归
public class PrintFileTree {
    public static void main(String[] args) {
        File f = new File("F:\\Javacode\\Project001");
        printFile(f,0);
    }

    static void printFile(File file, int level) {
        for (int i = 0;i<level; i++) {
            System.out.print("-");
        }
        // 输出文件名
        System.out.println(file.getName());

        if(file.isDirectory()) {
            File[] files = file.listFiles();    // 列出他的所有子文件、子目录
            for (File temp:files) {
                printFile(temp,level+1);
            }
        }
    }
}

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

  • 当需要定义一组常量时,可以使用枚举类型。
  • 尽量不要使用枚举的高级特性,实际上高级特性都可以使用普通类来实现,没有必要专门用高级特性来实现。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值