java基础(八):Java常用类

java常用类

1.基本数据类型的包装类

2.字符串相关类

  • 不可变字符序列:String
  • 可变字符序列:StringBuffer、StringBuilder

3.时间处理相关类

  • Date

  • DateFormat、SimpleDateFormat

  • Calendar

4.枚举类

5.Math类

6.File类

一.基本数据类型的包装类

为什么需要 包装类?

JAVA并不是纯面向对象的语言。Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的。

但是我们在实际使用中经常需要将基本数据转化成对象,便于操作

比如:集合的操作中。 这时,我们就需要将基本类型数据转化成对象!

包装类均位于java.lang包,包装类和基本数据类型的对应关系:

包装类的作用:

  • 提供:字符串、基本类型数据、对象之间互相转化的方式!
  • 包含每种基本数据类型的相关属性如最大值、最小值等

所有的包装类(Wrapper Class)都有类似的方法,掌握一个其他都类似!以Integer为例!

 

包装类型

  • 常用属性

MAX_VALUE :返回当前类型的最大值

MIN_VALUE :返回当前类型的最小值

TYPE :返回当前包装类型对应的基本类型

  • 方法

ParseInt() :将一个字符串转为对应的类型

Equals() :比较两个对象是否相等

自动装箱和自动拆箱 

自动装箱

基本类型就自动地封装到与它相同类型的包装中,如: Integer i = 100; 本质上是,编译器编译时为我们添加了: Integer i = new Integer(100);

自动拆箱

包装类对象自动转换成基本类型数据。如: int a = new Integer(100); 本质上,编译器编译时为我们添加了: int a = new Integer(100).intValue();

九大基本类型

字符型(char)

布尔型(Boolean)

Voidvoid

数值类型(byteshortintlongfloatdouble)

二.字符串相关类

String(不可变字符序列)

Java字符串就是Unicode字符序列,例如串“Java”就是4个Unicode字符J,a,v,a组成的。

Java允许使用符号"+"把两个字符串连接起来。

String类的常用方法:

  • char charAt(int index)    : 返回字符串中第index个字符。
  • boolean equals(String other)   如果字符串与other相等,返回true
  • boolean equalsIgnoreCase(String other)   如果字符串与other相等(忽略大小写),则返回true
  • int indexOf(String str) lastIndexOf():indexOf 从前向后查找指定子串在源字符串中首次出现的位置
  • int length()   返回字符串的长度。
  • String replace(char oldChar,char newChar) 返回一个新串,它是通过用 newChar 替换此字符串中出现的所有oldChar而生成的
  • boolean startsWith(String prefix) 如果字符串以prefix开始,则返回true
  • boolean endsWith(String prefix) 如果字符串以prefix结尾,则返回true
  • String substring(int beginIndex) String substring(int beginIndex,int endIndex) 返回一个新字符串,该串包含从原始字符串beginIndex到串尾或endIndex-1的所有字符
  • String toLowerCase() 返回一个新字符串,该串将原始字符串中的所有大写字母改成小写字母
  • String toUpperCase() 返回一个新字符串,该串将原始字符串中的所有小写字母改成大写字母
  • String trim() 返回一个新字符串,该串删除了原始字符串头部和尾部的空格
  • split() :按照指定分隔符对字符串进行分隔,返回值为字符串数组
  • toCharArray() :将当前字符串转为char型数组
  • concat() :将指定字符内容连接到当前字符串的末尾

字符串相等的判断:

equals判断字符串值相等,==判断字符串对象引用相等!

一般使用equals方法

public class StringTest3 {
    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "abc";
        String s3 = new String("abc");
        String s4 = new String("abc");
        System.out.println(s1==s2);   //true
        System.out.println(s1==s3);   //false
        System.out.println(s3==s4);   //false
    }
}

字符串的创建

字符串拼接

其实在字符串拼接过程实际调用了StringBuffer对象进行拼接,每次都会生成一个新的对象。

拼接结束之后直接抛弃该对象。

所以在字符串拼接过程造成了较大的资源浪费,同时也降低了字符串的拼接效率(所以在对字符串对象进行大量拼接操作时建议使用StringBufferStringBuilder)。

StringBuffer

StringBuffer将产生一个线程安全(代码内部包含了Synchronized关键字)的对象以实现对字符串的操作。

在进行字符串拼接过程StringBuffer操作的是同一个字符串对象,这操作可以避免产生过多的字符串常量。

常用方法

  • Append() :在当前字符串对象的末尾追加一个新的字符串内容(公交站的自动排队)
  • Insert() :在当前字符串的任意位置插入一个新的字符串内容(公交站的插队现象)
  • Delete() :删除指定索引位置的字符串内容
  • toString() :将StringBuffer对象转为String

优点

  1. 线程安全的字符串对象(方法上都是用synchronized锁)
  2. 不会产生过多的字符串对象(避免了过多的垃圾)

StringBuilder

一个非线程安全的字符串对象,作用于StringBuffer相似。

StringBuilder中也提供了一系列用于字符串拼接的方法。这操作可以避免产生过多的字符串常量。

常用方法同StringBuffer

StringBufferStringBuilder的区别

StringBuffer在多线程环境的情况下使用具有一定的线程安全型,因为在方法上都是用了线程锁——Synchronized

相反,StringBuilder没有使用线程锁,所以对于单线程情况下更适合。

使用场景

String :存储字符串常量时使用

StringBuilder :单线程下字符串拼接使用

StringBuffer :多线程下字符串拼接使用

效率

StringBuilder > StringBuffer > String

三.时间相关处理类

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

Java中时间的表示说白了也是数字,是从:标准纪元1970.1.1 0点开始到某个时刻的毫秒数,类型是long

四. Math类

包含了常见的数学运算函数。

random() : 生成[0,1)之间的随机浮点数

生成:0-10之间的任意整数: int a = (int)(10*Math.random());

生成:20-30之间的任意整数: int b = 20 + (int)(10*Math.random());

五. 递归结构

递归:“自己调用自己”,一个使用递归技术的方法将会直接或者间接的调用自己

递归的缺陷: “简单”是递归的优点之一。

但是递归调用会占用大量的系统堆栈,内存耗用多,在递归调用层次多时速度要比循环慢的多。所以再使用时要慎重。

任何可用递归解决的问题也能使用迭代解决。

当递归方法可以更加自然地反映问题,并且易于理解和调试,并且不强调效率问题时,可以采用递归;

六. File类

java.io.File类:文件和目录路径名的抽象表示形式

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

public boolean canRead()     

public boolean canWrite()

public boolean exists()     

public boolean isDirectory()  

public boolean isFile()     

public boolean isHidden()    

public long lastModified()   

public long length()    

public String getName()     

public String getPath()

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

public boolean createNewFile()throws IOException

public boolean delete()

public boolean mkdir(), mkdirs()   注意两个的区别!

七. 枚举

枚举类型:

  1. 只能够取特定值中的一个
  2. 使用enum关键字
  3. 所有的枚举类型隐性地继承自 java.lang.Enum。(枚举实质上还是类!而每个被枚举的成员实质就是一个枚举类型的实例,他们默认都是public static final的。可以直接通过枚举类型名直接使用它们。)
  4. 强烈建议当你需要定义一组常量时,使用枚举类型

尽量不要使用枚举的高级特性,事实上高级特性都可以使用普通类来实现,没有必要引入复杂性!

枚举其实就是一组常量值,通过枚举可以有效的规范变量的赋值。枚举是一种引用类型。其实枚举类型也是一个类。

定义形式:

[修饰符] enum 枚举名{

常量值集合

}

扩展枚举

  • 枚举与方法

    在枚举类型的内部可以定义静态和非静态方法。

  • 枚举与构造函数

    在枚举的内部可以定义构造函数(个数不限),但不能使用public访问修饰符,否则会出现错误。

  • 枚举与抽象方法

    在枚举的内部可以定义抽象方法,然后由常值进行实现。

 

----------------------------------------------------------

 

 

 --------------------------------------------------

 

posted @ 2020-06-09 23:20  Vincent-yuan  阅读(234)  评论(0编辑  收藏  举报