Java学习笔记--常用类及其常用方法、JDK5新特性、正则表达式介绍

object类

  • 直接输出一个对象的名称,其实就是调用了该对象的toString()方法。
  • 一般会重写toString()方法,输出成员变量的值。
  • 对象名.getClass().getname()会得到类名。
  • equals()方法默认是比较两个对象的地址是否相等,但一般都会重写该方法,比较两个对象的成员变量是否相等。
  • clone()方法重建并返回一个此对象的副本。使用该方法时需要该类重写该方法,因为有权限修饰符protected,且需要该类实现Cloneable接口(标记接口,没有任何方法)。

String类

  • 字符串常量存在常量池当中。
  • 不同变量如果字符串内容相同,那么所指字符串常量是同一个。
public class StringDemo4 {
	public static void main(String[] args) {
		String s1 = "hello";
		String s2 = "world";
		String s3 = "helloworld";
		System.out.println(s3 == s1 + s2);// false,变量相加会在堆内存new一个string对象来存储放在常量区的字符串
		System.out.println(s3.equals((s1 + s2)));// true
		System.out.println(s3 == "hello" + "world");// true
		System.out.println(s3.equals("hello" + "world"));// true
	}
}
  • String类中比较常用的方法:
public static String valueOf(int i)//将整形转为字符串
public char[] toCharArray()//将字符串转为字符数组
public char charAt(int index)//返回指定位置的字符

其他类常用方法

  • Arrays类中的public static String toString(int[] a)方法将数组以字符串输出。
  • Integer类中的public static String toString(int i)方法将整形转化为字符串。
  • Integer类中的public static int parseInt(String s)方法能将字符串转为整数。

StringBuffer类

  • 相比于String类,StringBuffer类是一个线程安全的可变字符序列,字符串拼接操作直接在原字符串的基础上进行的,占用的额外空间更少。
  • StringBuffer对象和String对象之间的相互转换可以通过构造函数。也可以通过StringBuffer类的toString()方法将StringBuffer对象转为String对象。

JDK5新特性

  • 自动装箱:把基本类型转换为包装类类型
  • 自动拆箱:把包装类类型转换为基本类型
public class IntegerDemo {
	public static void main(String[] args) {
		// 定义了一个int类型的包装类类型变量
		// Integer i = new Integer(100);//通过构造函数
		Integer ii = 100;
		ii += 200;
		System.out.println("ii:" + ii);

		// 通过反编译后的代码
		// Integer ii = Integer.valueOf(100); //自动装箱
		// ii = Integer.valueOf(ii.intValue() + 200); //自动拆箱,再自动装箱
		// System.out.println((new StringBuilder("ii:")).append(ii).toString());
	}
}
  • Integer直接赋值的面试题
public class TestDemo {
    public static void main(String[] args){
        Integer i1 = new Integer(127);
        Integer i2 = new Integer(127);
        System.out.println(i1 == i2);//false

        Integer i3 = new Integer(128);
        Integer i4 = new Integer(128);
        System.out.println(i3 == i4);//false

        Integer i5 = 128;
        Integer i6 = 128;
        System.out.println(i5 == i6);//false

        Integer i7 = 127;
        Integer i8 = 127;
        System.out.println(i7 == i8);//true

        // 针对-128到127之间的数据,做了一个数据缓冲池,如果数据是该范围内的,每次并不创建新的空间
        // Integer ii = Integer.valueOf(127);
    }
}
  • 枚举类:只有有限个实例的类,实例都在类中已创建好。外部不能实例化该类。
    • 定义枚举类要用关键字enum;
    • 所有枚举类都是Enum的子类;
    • 枚举类的第一行上必须是枚举项,之间用逗号隔开,最后加上分号;
    • 枚举类可以有构造方法,但必须是private的,默认也是private。枚举项等价于在类中创建的实例对象,用法比较特殊:枚举项名(实参),后面的括号表示调用构造方法传入参数;
    • 枚举类也可以有抽象方法,但是枚举项必须重写该方法;
public enum Direction {
	FRONT("前") {
		@Override
		public void show() {
			System.out.println("前");
		}
	},
	BEHIND("后") {
		@Override
		public void show() {
			System.out.println("后");
		}
	};

	private String name;

	private Direction(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public abstract void show();
}
  • Enum类中的常用方法:
public final int compareTo(E o)//return self.ordinal - other.ordinal;
public final String name()//return name;
public final int ordinal()//return ordinal;
public String toString()//return name;
//获取枚举对象的字节码文件对象中由name指定的枚举项,返回类型就是枚举类的类型
public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)
//此方法虽然在JDK文档中查找不到,但每个枚举类都具有该方法,它遍历枚举类的所有枚举值非常方便
public <T extends Enum<T>> T[] values()

正则表达式

  • 正则表达式是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。
  • 正则表达式判断功能:String类的public boolean matches(String regex)方法
  • 拆分功能:String类public String[] split(String regex)方法根据给定正则表达式的匹配拆分此字符串。
  • 替换功能:public String replaceAll(String regex, String replacement)使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
  • 正则表达式获取功能:
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TestDemo {
    public static void main(String[] args){
        String s = "da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?";
        String regex = "\\b\\w{3}\\b";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(s);
        while (m.find()) {
            System.out.println(m.group());
        }
    }
}
//其实前面在String类中的方法都是基于生成的Matcher对象实现的
  • 正则表达式中,为了使用前面规则的匹配结果,可以使用组的概念。使用小括号就能将一个规则封装成一组,每个组都有自己的编号,从1开始。在后面通过\number来表示某一组的匹配结果。下面给出示例:
public class TestDemo {
    public static void main(String[] args){
        String str = "ekjdasfkkkifawkhppkdjfk";
        String pat = "(.)\\1+";
        String[] strArr = str.split(pat);
        for (String s:strArr){
            System.out.println(s);
        }
    }
}
  • 前面讲到\number能够在同一个正则表达式中匹配前面组的匹配结果,而$number则能够在不是同一个字符串的位置引用组的匹配结果。

Random类

  • 构造方法:
public Random()//默认种子,每次产生不同的随机数
public Random(long seed)//指定种子,每次种子相同,随机数就相同
  • 成员方法:
public int nextInt()//返回int范围内的随机数
public int nextInt(int n)//返回[0,n)之间的随机数

其他类常用方法

  • 生成start到end之间的随机数:int number = (int)(Math.random()*(end-start+1))+start;
  • 字符串类型转Data类型用DataFormat类的public Date parse(String source) throws ParseException方法(其实是通过子类SimpleDateFormat的对象调用)。
  • Data类型转为字符串类型用DataFormat类的public final String format(Date date)方法(其实是通过子类SimpleDateFormat的对象调用)。

Calendar类

  • 常用的几个方法:
public static Calendar getInstance()//获取一个Calendar类的对象
public int get(int field)//返回给定日历字段的值
public abstract void add(int field, int amount)//根据日历的规则,为给定的日历字段添加或减去指定的时间量
public final void set(int year, int month, int date)//设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值