Java基础之常见类

包装类的概念

Java是面向对象的语言,但是不是纯面向对象的,在实际应用中我们经常需要将基本数据转换成对象。比如将基本数据类型存储到Object[]数组或集合中的操作等等。
Java在设计类时为每个基本数据类型设计了一个对应的类进行代表,
因此,这八个和基本数据类型对应的类统称为包装类(Wrapper Class)。
对于包装类,主要掌握基本数据类型,包装类对象以及字符串之间的转换。

自动装箱和拆箱

自动装箱和拆箱就是将基本数据类型和包装类之间进行自动的互相转换。
自动装箱(autoboxing)/拆箱(unboxing)。
自动装箱过程是通过调用包装类的valueOf()方法实现的,而自动拆箱过程是通过调用包装类的 xxxValue()方法实现的(xxx代表对应的基本数据类型,如intValue()、doubleValue()等)。
自动装箱与拆箱的功能事实上是编译器来帮的忙,编译器在编译时依据您所编写的语法,决定是否进行装箱或拆箱动作。

包装类的缓存问题

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

String类

String 类对象代表不可变的Unicode字符序列,因此我们可以将String对象称为“不可变对象”。
我们发现字符串内容全部存储到value[]数组中,而变量value是final类型的,也就是常量(即只能被赋值一次)。 这就是“不可变对象”的典型定义方式。
我们发现在前面学习String的某些方法,比如:substring()是对字符串的截取操作,但本质是读取原字符串内容生成了新的字符串。
在遇到字符串常量之间的拼接时,编译器会做出优化,即在编译期间就会完成字符串的拼接。因此,在使用==进行String对象之间的比较时,我们需要特别注意比较字符串时,尽量使用equals。
String类常用的方法有
1. String类的下述方法能创建并返回一个新的String对象: concat()、 replace()、substring()、 toLowerCase()、 toUpperCase()、trim()。
2. 提供查找功能的有关方法: endsWith()、 startsWith()、 indexOf()、lastIndexOf()。
3. 提供比较功能的方法: equals()、equalsIgnoreCase()、compareTo()。
4. 其它方法: charAt() 、length()。

可变化字符序列

StringBuffer和StringBuilder非常类似,均代表可变的字符序列。 这两个类都是抽象类AbstractStringBuilder的子类。
显然,内部也是一个字符数组,但这个字符数组没有用final修饰,随时可以修改。因此,StringBuilder和StringBuffer称之为“可变字符序列”。那两者的区别:
1. StringBuffer JDK1.0版本提供的类,线程安全,做线程同步检查, 效率较低。
2. StringBuilder JDK1.5版本提供的类,线程不安全,不做线程同步检查,因此效率较高。 建议采用该类。

可变字符序列常用方法列表:
1. 重载的public StringBuilder append(…)方法
可以为该StringBuilder 对象添加字符序列,仍然返回自身对象。
2. 方法 public StringBuilder delete(int start,int end)
可以删除从start开始到end-1为止的一段字符序列,仍然返回自身对象。
3. 方法 public StringBuilder deleteCharAt(int index)
移除此序列指定位置上的 char,仍然返回自身对象。
4. 重载的public StringBuilder insert(…)方法
可以为该StringBuilder 对象在指定位置插入字符序列,仍然返回自身对象。
5. 方法 public StringBuilder reverse()
用于将字符序列逆序,仍然返回自身对象。
6. 方法 public String toString() 返回此序列中数据的字符串表示形式。
7. 和 String 类含义类似的方法:
注意:链式调用,核心就是调用了return this 把自己返回了,所以它还可以继续调用方法。

不可变和可变字符序列使用陷阱:
String和StringBuilder在频繁字符串修改时,String效率明显偏低,而StringBuilder效率高。所以平时我们在频繁更改字符串时应该尽量使用可变字符序列。

时间处理的相关类

Date类

在计算机世界,1970年1月1日00:00:00是基准时间,度量单位是毫秒(1秒=1000毫秒)。
了解Date类的相关方法即可,目前Date的很多日期操作方法都由Calendar类取代了。而日期字符串的转换则由DateFormat类取代。

注意DateFormat和SimpeDateFormat类的使用:掌握时间对象和指定字符串格式的相互转换。了解格式化字符代表的具体含义。

Calendar类

掌握获取和设置日历对象的相关元素,以及日期的计算:
最重要的是掌握日历对象和日期对象之间的相互转换;以及Java中默认的规则。

运用以上所学知识,写一个可视化日历程序

Math类和Random类的常见方法

Math类的常用方法:
1. abs 绝对值
2. acos,asin,atan,cos,sin,tan 三角函数
3. sqrt 平方根
4. pow(double a, double b) a的b次幂
5. max(double a, double b) 取大值
6. min(double a, double b) 取小值
7. ceil(double a) 大于a的最小整数
8. floor(double a) 小于a的最大整数
9. random() 返回 0.0 到 1.0 的随机数
10. long round(double a) double型的数据a转换为long型(四舍五入)
11. toDegrees(double angrad) 弧度->角度
12. toRadians(double angdeg) 角度->弧度。
Math类中虽然为我们提供了产生随机数的方法Math.random(),但是通常我们需要的随机数范围并不是[0, 1)之间的double类型的数据,这就需要对其进行一些复杂的运算。如果使用Math.random()计算过于复杂的话,我们可以使用例外一种方式得到随机数,即Random类,这个类是专门用来生成随机数的,并且Math.random()底层调用的就是Random的nextDouble()方法。

File类

java.io.File类:代表文件和目录
主要掌握读取文件,生成文件和删除文件等。了解常见方法的使用。
在eclipse中,user.dir代表本项目的目录。
注意mkdir()和mkdirs()的区别:
mkdir():目录结构中有一个不存在,则不会创建整个目录树。
mkdirs():目录结构中有一个不存在也没关系;创建整个目录树。

学习递归打印目录树

枚举

枚举类型的定义包括枚举声明和枚举体。格式如下:
enum 枚举名 {
枚举体(常量列表)
}
所有的枚举类型隐性地继承自 java.lang.Enum。枚举实质上还是类!而每个被枚举的成员实质就是一个枚举类型的实例,他们默认都是public static final修饰的。可以直接通过枚举类型名使用它们。
可以用增强for循坏来遍历枚举;也可以结合switchyuj。

猜你喜欢

转载自blog.csdn.net/qq_35383654/article/details/85220933