java 常用类(重点):
String 类:
String 类代表字符串。创建以后不能更变。
public class tests {
public static void main(String[] args) {
String s1 = "hello";
String s2 = "hello";
System.out.println(s1==s2);//true,指向String池中的同一块内存
s1 = new String("hello");
s2 = new String("hello");
System.out.println(s1==s2); //false,两个不同的对象
System.out.println(s1.equals(s2)); //true,String类重写了Object类的equals方法,内容相同就相等
char[] c = {'s','u','n',' ','j','a','v','a'};
s1 = new String(c); //将一个字符数组赋值给一个字符串
s2 = new String(c,4,4); //截取字符数组的一部分赋值给字符串(从c中第4个字符开始截取4个)
System.out.println(s1); //sun java
System.out.println(s2); //java
}
}
String 类常用方法:
char chasrAt( int index )返回字符串中第index个字符( 字符串实际是一个字符数组)
int length( ) 返回字符串长度
int indexOf( String str, int fromIndex ) 返回字符串从 fromIndex 开始出现 str 的第一个位置
boolean equalsIgnoreCasr( String another ) 比较字符串与 another 是否一样(忽略大小写)
String replace( charoldChar, char newChar ) 在字符串中用 newChar 字符替换 oldChar 字符
boolean startsWith( String prefix ) 判断字符串是否以 prefix 字符串开头
boolean endsWith( String suffix ) 判断字符串是否以 suffix 字符串结尾
String toUpperCase( ) 返回字符串大写形式
String toLowerCase( ) 返回字符串小写形式
String substring( int beginIndex ) 返回该字符串从 beginIndex 开始到结尾的字符串
String substring( int beginIndex, int endIndex ) 返回该字符串从 beginIndex 开始到 endIndex 结尾的子字符串
String trim( ) 返回该字符串去掉开头和结尾空格的字符串
String value Of( ...... ) 可以将基本类型(对象类型)装换为字符串类型(相当于调用toString( )方法)
String[ ] split( String regex ) 可以将一个字符串按照指定的分隔符 regex 分隔成一个个子串,放进一个字符串数组中
StringBuffer 类:
StringBuffer 类代表可变字符序列。
StringBuffer 常用方法:
StringBuffer append( ...... ) 参数可以是基本类型,String,StringBuffer,char数组,对象类型,可以为该 StringBuffer 对象添加字符串序列,返回添加后的该StringBuffer对象引用
StringBuffer insert( int offset , ...... ) 参数可以是基本类型,String,StringBuffer,char数组,对象类型,可以为该 StringBuffer 对象在指定位置插入字符序列,返回修改后的该StringBuffer对象引用
Stringuffer delete( int start , int end ) 可以删除 start 开始到 end-1 为止的一段字符序列,返回修改后的该 StringBuffer 对象引用
StringBuffer reverse( ) 将字符序列逆序排列
枚举类 :
java.lang.Enum 枚举类型
使用关键字 enum
public class TestEnum {
public enum MyColor { red, green, blue };
public enum MyDoorOpener { me, mywife };
public static void main(String[] args) {
MyColor m = MyColor.red;
switch(m) {
case red:
System.out.println("red");
break;
case green:
System.out.println("green");
break;
default:
System.out.println("default");
}
System.out.println(m);
}
}
日期类:
格式化日期:
import java.text.*;
import java.util.*;
public class testd {
public static void main(String[] args)throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日"); //以这种模式格式化日期
Date d = new Date(); //获得当前时间
System.out.println(sdf.format(d)); //将日期以指定模式输出
}
}
System.currentTimeMillis( ) 返回从1970年1月1日零时开始到当前以毫秒为单位的时间。
将String类型转换为日期类型:
import java.sql.*;
public class testd {
public static void main(String[] args)throws Exception {
String s = "1990-11-12 08:24:27";
Timestamp ts = Timestamp.valueOf(s);
System.out.println(ts);
}
}
正则表达式:
用途:1. 字符串匹配(字符匹配);2. 字符串查找;3. 字符串替换
类:1. java.lang.String;2. java.util.regex.Pattern ; 3. java.util.regex.Matcher
java.lang.String 类中与正则表达式相关的方法:
boolean matches( String regex ) 告知这个字符串是否匹配给定的正则表达式。
String replaceAll( String regex , String replacement ) 使用给定的 replacement 替换这个字符串匹配给定的正则表达式的子字符串。
String replaceFirst( String regex , String replacement ) 使用给定的 replacement 替换这个字符串匹配给定的正则表达式的第一个子字符串。
String[ ] split( String regex ) 根据给定正则表达式的匹配拆分此字符串。
String[ ] split( String regex , int limit ) 根据匹配给定的正则表达式来拆分这个字符串。
public class testd {
public static void main(String[] args)throws Exception {
System.out.println("abc".matches("...")); //true, .代表任何字符
System.out.println("a56t879a".replaceAll("\\d","-")); //a--t--a, \\d 代表一个数字
}
}
import java.util.regex.*;
public class testd {
public static void main(String[] args)throws Exception {
Pattern p = Pattern.compile("[a-z]{3}"); //compile()方法:返回在其中编译过此模式的正则表达式。
Matcher m = p.matcher("fgh"); //matcher()方法:创建匹配给定输入与此模式的匹配器。
System.out.println(m.matches()); //matches()方法:尝试将整个区域与模式匹配,当且仅当整个区域序列匹配此匹配器的模式时才返回 true。
}
}
关于 . * + ? 的例子代码:
import java.util.regex.*;
public class testd {
public static void main(String[] args)throws Exception {
print("a".matches(".")); //. 所有字符
print("aa".matches("a*")); //* a出现零次或者多次
print("aaa".matches("a+")); //+ a出现一次或者多次
print("a".matches("a?")); //? a出现零次或者一次
print("".matches("a*")); //* a出现零次或者多次
print("".matches("a?")); //? a出现零次或者一次
print("2134567898767895".matches("\\d{3,20}")); // \\d{ ,} 数字出现最少3次,最多20次
print("192.168.0.aaa".matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\D{1,3}")); // \\. 代表点,\\D 代表非数字
print("192".matches("[0-2][0-9][0-9]")); // [ ] 范围 ,一个[]只匹配一个字符
}
public static void print(Object b){
System.out.println(b);
}
}
关于[ ] 例子代码:
import java.util.regex.*;
public class testd {
public static void main(String[] args)throws Exception {
print("a".matches("[abc]")); //范围 abc
print("a".matches("[^abc]")); //范围 非abc,^ 为取反
print("A".matches("[a-z]|[A-Z]")); //范围 a-z或者A-Z
print("A".matches("[a-z[A-Z]]")); //范围 a-z或者A-Z
print("R".matches("[A-Z&&[RFG]]")); //范围 A-Z 并且在 RFG 中
}
public static void print(Object b){
System.out.println(b);
}
}
关于 \\d , \\D , \\s , \\S , \\w , \\W
import java.util.regex.*;
public class testd {
public static void main(String[] args)throws Exception {
print(" ".matches("\\s")); // \\s 表示空字符
print("a".matches("\\S")); // \\S 非空字符
print("5w".matches("\\w{2}")); // \\w 单词字符(范围[a-zA-Z_0-9]字母加下划线加数字) {3} 正好出现三次
print("1qazxsw2".matches("\\W{2,7}")); // \\W 非单词 {2 , 7}最少出现2次,最多出现7次
print("R".matches("\\D")); // \\D 非数字
print("3".matches("\\d")); // \\d 数字
print("\\".matches("\\\\")); // 匹配一个反斜杠"\\" , 需要"\\\\"
}
public static void print(Object b){
System.out.println(b);
}
}
关于边界符 ^ , $ , \\b 例子代码:
import java.util.regex.*;
public class testd {
public static void main(String[] args)throws Exception {
print("hello world".matches("^he.*")); // ^ 表示以什么开头
print("hello java".matches(".*va$")); // $ 表示以什么结尾
print("hello sir".matches("^h[a-z]{1,3}o\\b.*r$")); // \\b 表示单词边界(空格,换行等符号)
}
public static void print(Object b){
System.out.println(b);
}
}
邮箱匹配的正则表达式:
import java.util.regex.*;
public class testd {
public static void main(String[] args)throws Exception {
String email1 = "[email protected]";
String email2 = "[email protected]";
print(email1.matches("[\\w[.-]]+@[\\w[.-]]+.[\\w]+"));
print(email2.matches("[\\w[.-]]+@[\\w[.-]]+.[\\w]+"));
}
public static void print(Object b){
System.out.println(b);
}
}
分组:
import java.util.regex.*;
public class testd {
public static void main(String[] args)throws Exception {
Pattern p = Pattern.compile("(\\d{1,5})([a-z]{3})"); //用小括号表示分组,一个小括号表示一个分组,根据左小括号表示是第几个分组
String s = "123aaa-4567bbb-89ccc-000";
Matcher m = p.matcher(s);
while(m.find()) { //find() 尝试查找与该模式匹配的输入序列的下一个子序列。
print(m.group(1)); //group() 返回由以前匹配操作所匹配的输入子序列。 0 代表原来的字符,1代表第一个分组
}
}
public static void print(Object b){
System.out.println(b);
}
}
反射机制:
ClassLoader 的类加载机制
并非一次性加载,而是需要的时候加载(运行期间动态加载)
static 语句块在加载后执行一次
dynamic (动态)语句块每次 new 新的对象都会执行(等同于构造方法中的语句,用的较少)
public class testd {
public static void main(String[] args){
new A();
System.out.println("-------");
new B(); //new 出来才会加载
new C();
new C(); //static 内容只会加载一次
new D();
new D(); //动态语句每次都会加载
}
}
class A{
}
class B{
}
class C{
static {
System.out.println("CCCCCCC");
}
}
class D{
{
System.out.println("DDDDDD");
}
}
public class testd {
public static void main(String[] args)throws Exception{
String s = "T";
Class c = Class.forName(s); // forName( )回与带有给定字符串名的类或接口相关联的 Class 对象
c.newInstance(); // newInstance( ) 创建此 Class 对象所表示的类的一个新实例。
}
}
class T{
static {
System.out.println("T loaded");
}
public T() {
System.out.println("T constructed!");
}
}