文章目录
Java最顶层的根类是Object
Object是所有类的祖先类,定义了所有对象都具有的基本状态和行为。在定义类的时候,即使没有指定父类,Java也会自动将其定义为Object的子类。
Java核心包
Java的核心包一共有12个,其中:
(1)java.lang包封装了所有编程应用的基本类;
(2)java.util 包提供实用程序类和集合类,如系统特性定义和使用、日期函数类、集合等工具;
(3)java.applet 包为Applet 提供执行需要的所有类,主要是访问Applet 内容的通信类;
(4)java.rmi 包提供程序远程方法调用所需的类。
Java中System类
System类是一个final类,在java.io包下面,所有的方法都用类变量来调用,对System 类不可能实例化。System类主要用来提供标准输入/输出和系统环境信息的访问设置。而System类的属性有以下几种:
(1)public static final InputStream in:标准输入;
(2)public static final OutputStream out:标准输出;
(3)public static final PrintStream err:标准错误输出。
Java中String类
在String的方法中,
(1)toLowerCase()方法是转换成小写;
(2)valueOf()方法是获得相应数值;
(3)charAt()方法是提取字符串中指定位置的字符;
(4)append()是StringBuffer的方法(不在String类中)。
Java中StringBuffer类
获取和设置StringBuffer 对象的长度和容量的方法有length()、capacity()、setLength(),调用方式如下:
(1)sl.length():返回sl中字符个数;(英文字符和汉字都是一个字符串长度)
(2)sl.capacity():返回sl的容量,即内存空间数量,通常会大于length;
(3)sl.setLength(int newLength):改变sl中字符的个数,如果newLength大于原个数,则新添的字符都为空(“ ”);相反,字符串中的最后几个字符将被删除。
例题:
StringBuffer buf1=new StringBuffer(20);
System.out.println(buf1.length()+","+buf1.capacity());
result:
0,20
String,StringBuffer和StringBuilder类的区分
1.定义区分:
String:字符串常量 。
StringBuffer 与 StringBuilder是字符缓冲变量。
2.线程安全区分:
StringBuffer 与 StringBuilder 中的方法和功能完全是等价的,只是StringBuffer中的方法大都采用了synchronized 关键字进行修饰,因此是线程安全的,而StringBuilder没有这个修饰,可以被认为是线程不安全的。
3.运行速度:
StringBuilder和StringBuffer的“可变”特性总结如下:
(1)append,insert,delete方法最根本上都是调用System.arraycopy()这个方法来达到目的
(2)substring(int, int)方法是通过重新new String(value, start, end - start)的方式来达到目的。因此,在执行substring操作时,StringBuilder和String基本上没什么区别。
总的来说,三者在执行速度方面的比较:StringBuilder > StringBuffer > String。
4.使用场景:
(1)使用String类的场景:在字符串不经常变化的场景中可以使用String类,例如常量的声明、少量的变量运算。
(2)使用StringBuffer类的场景:在频繁进行字符串运算(如拼接、替换、删除等),并且运行在多线程环境中,则可以考虑使用StringBuffer,例如XML解析、HTTP参数解析和封装。
(3)使用StringBuilder类的场景:在频繁进行字符串运算(如拼接、替换、和删除等),并且运行在单线程的环境中,则可以考虑使用StringBuilder,如SQL语句的拼装、JSON封装等。
5.区分:
(1)String类型的字符串对象是不可变的,一旦String对象创建后,包含在这个对象中的字符系列是不可以改变的,直到这个对象被销毁;
(2)StringBuilder和StringBuffer类型的字符串是可变的,不同的是StringBuffer类型的是线程安全的,而StringBuilder不是线程安全的;
(3)如果是多线程环境下涉及到共享变量的插入和删除操作,StringBuffer则是首选。如果是非多线程操作并且有大量的字符串拼接,插入,删除操作则StringBuilder是首选。毕竟String类是通过创建临时变量来实现字符串拼接的,耗内存还效率不高,怎么说StringBuilder是通过JNI方式实现终极操作的。
String类中的字符串连接使用的是“+”,而StringBuffer中的连接使用的是append()方法。
StringBuffer是不能直接转成String类对象,必须调用toString()方法才可以把一个StringBuffer的对象变为String类的对象。
字符串创建对象和new创建对象的区别
用双引号括起来的是字符串常量(string),用单引号括起来的是字符常量(char)。
String s1="bc";
String s2="bc";
创建了一个对象
Java用字符串池管理字符串,Java程序运行时JVM会在内存创建一个 字符串缓冲池。对于Java变量操作,内存主要分为栈和堆两部分。栈用来保存基本类型或者内置类型,主要有char、byte、short、int、long、float、double、boolean和对象的引用,数据可以共享,速度仅次于寄存器(register),快于堆。堆是用于存储对象的内存空间,字符串缓冲池则为堆空间,堆中可以存放隐式对象(如字符串常量),也可以存放显示对象(如用new创建对象)。在本例中,当使用String s1="bc"创建对象时,JVM首先判断缓冲池有没有值为“bc”的对象,如果没有,则构造一个,使s1引用该对象。当s2创建时,JVM在缓冲池中找到相同值的对象,则s2引用s1所引用的对象“bc”.
String s3="bc";
String s4=new String(s3);
创建了两个对象
在本例中,使用new操作符创建对象,这将调用String类的构造方法来创建一个新的对象,使其表示一个与参数相同的字符串序列。换句话来说,新创建的字符串是该参数字符串的副本。因此创建了两个对象:一个是通过字符串常量的形式在字符串缓冲池中创建的;另一个是通过new操作符在堆中创建的。
Java中匹配器类(Matcher)
(1)boolean matcher.find()方法用于寻找下一个模式匹配串;
(2)int matcher.start()方法用于返回匹配串的一个起始索引整数值;
(3)int matcher.end()方法用于返回匹配串的一个终止索引整数值;
(4)static boolean matches()方法用于输入字符串与模式串比较的方法。