更新时间:2018年09月30日10时30分 来源:传智播客 浏览次数:
| 
	 1 
	2 
	 | 
	
	String toString() :返回该对象的字符串表示boolean equals(Object obj) :指示其他某个对象是否与此对象"相等" | 
	
| 
	 1 
	 | 
	
	public String toString() :返回该对象的字符串表示 | 
	
| 
	 1 
	2 
	3 
	4 
	5 
	 | 
	
	<> Object类中toString()的实现方式:public class Object {public String toString() {return getClass().getName() + "@" +Integer.toHexString(hashCode());}} | 
	
| 
	 1 
	2 
	3 
	4 
	5 
	6 
	 | 
	
	getClass().getName():getClass(): Object类的方法, 获取当前对象的类的字节码对象getClass().getName(): 通过字节码对象获取该类的全名Integer.toHexString(hashCode())hashCode(): Object类的方法, 获取当前对象地址值的哈希值Integer.toHexString(int n): 将参数转换为十六进制数字的字符串 | 
	
	IDEA快捷键: Alt+Insert, 选 equals() and hashCode() | 
	
| 
	 01 
	02 
	03 
	04 
	05 
	06 
	07 
	08 
	09 
	10 
	 | 
	
	public boolean equals(Object o) {// 如果对象地址值相同, 则是同一个对象, 那么属性值肯定相同,认为相等if (this == o) return true;// 如果被比较对象为null, 或者不是同一个类型, 则认为不相等if (o == null || getClass() != o.getClass()) returnfalse;// 如果不是同一个对象, 且不为null, 且是一个类型, 则向下转型比较子类特有属性Person person = (Person) o;// 基本类型属性值用==比较, 引用类型属性值用Objects工具类的equals()比较return age == person.age &&Objects.equals(name, person.name); | 
	
| 
	 1 
	2 
	3 
	 | 
	
	public static boolean equals(Object a, Object b) {return (a == b) || (a != null && a.equals(b));} | 
	
| 
	 1 
	2 
	 | 
	
	Date(): 创建Date对象, 表示当前系统时间Date(long date): 创建Date对象, 使用指定的毫秒值作为时间 | 
	
| 
	 1 
	2 
	3 
	4 
	5 
	 | 
	
	long getTime(): 获取Date对象中保存的时间毫秒值void setTime(long time): 修改Date对象的时间UNIX时间戳: 从0时区 1970-01-0100:00:00 开始, 至今经过的毫秒值(1 秒 = 1000 毫秒)10位 精确到秒 : 1494992791 = 2017/5/17 11:46:3113位 精确到毫秒: 1494992791000 = 2017/5/17 11:46:31 | 
	
| 
	 1 
	2 
	3 
	4 
	5 
	 | 
	
	java.text.DateFormat抽象类: 用于格式化和解析时间. 提供了方便的方法// 常用成员方法 (抽象类不能创建对象, 但可以有非抽象的方法供子类使用)String format(Date date): 格式化, 从Date对象转换为String对象Date parse(String source): 解析, 从String对象转换为Date对象java.text.SimpleDateFormat类 | 
	
| 
	 01 
	02 
	03 
	04 
	05 
	06 
	07 
	08 
	09 
	10 
	11 
	12 
	 | 
	
	y: 年M: 月d: 日H: 时(24小时制)m: 分s: 秒E: 星期D: 年中的天K: 小时(12小时制)S: 毫秒示例: "yyyy-MM-dd E HH:mm:ss.SSS"结果: 2016-04-01 星期五 17:29:15.868 | 
	
| 
	 1 
	 | 
	
	SimpleDateFormat format = newSimpleDateFormat("yyyy-MM-dd HH:mm:ss"); | 
	
| 
	 1 
	2 
	3 
	 | 
	
	例如, SimpleDateFormat对象的模式是: "yyyy年MM月dd日 HH:mm:ss"那么, 将Date格式化后就可以是这种样子: 2018年01月02日 03:04:05SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); | 
	
| 
	 1 
	 | 
	
	Date date = new Date(); | 
	
| 
	 1 
	2 
	 | 
	
	String s = sdf.format(date);System.out.println(s); | 
	
| 
	 1 
	2 
	3 
	 | 
	
	Date parse(String source): 解析, 从String对象转换为Date对象例如, SimpleDateFormat对象的模式是: "yyyy-MM-dd"要解析为Date对象的字符串必须符合模式: 2000-01-02[/size][/font][/align][align=left][font=微软雅黑][size=3][color=#df402a]String s = "2000-10-01";[/color][/size][/font][font=微软雅黑][size=3] | 
	
| 
	 1 
	2 
	 | 
	
	SimpleDateFormat sdf = newSimpleDateFormat("yyyy-MM-dd");Date date = sdf.parse(s); | 
	
| 
	 1 
	2 
	 | 
	
	long time = date.getTime();System.out.println(time); | 
	
| 
	 1 
	 | 
	
	static Calendar getInstance(): 根据当前系统设置获取合适的Calendar对象, 表示当前系统时间 | 
	
| 
	 1 
	 | 
	
	Calendar c = Calendar.getInstance(); // 代表了当前时间 | 
	
| 
	 1 
	 | 
	
	Calendar.getInstance() 会根据当前系统获取合适的子类对象, 我们获取到的是 GregorianCalendar | 
	
| 
	 1 
	2 
	3 
	4 
	5 
	6 
	7 
	 | 
	
	static int YEAR :年份static int MONTH :月份. 注意月份数值是 0-11static int DAY_OF_MONTH :日期static int HOUR :小时(12小时制)static int HOUR_OF_DAY :小时(24小时制)static int MINITE :分钟static int SECOND :秒 | 
	
| 
	 1 
	2 
	3 
	4 
	5 
	 | 
	
	int get(int field): 获取指定日历字段的值 int year = cal.get(Calendar.YEAR)void set(int field, int value): 修改指定日历字段为指定的值void add(int field, int amount): 调整指定日历字段的值. 正数增加,负数减少Date getTime(): Calendar转Datevoid setTime(Date d): Date转Calendar | 
	
| 
	 1 
	 | 
	
	int day = calendar.get(Calendar.DAY_OF_MONTH); | 
	
| 
	 1 
	 | 
	
	calendar.set(Calendar.YEAR, 2000); | 
	
| 
	 1 
	 | 
	
	calendar.set(Calendar.MONTH, 0); | 
	
| 
	 1 
	 | 
	
	calendar.add(Calendar.DAY_OF_MONTHY, 1); | 
	
| 
	 1 
	 | 
	
	calendar.add(Calendar.DAY_OF_MONTHY, -1); | 
	
| 
	 1 
	 | 
	
	currentTimeMillis() | 
	
| 
	 1 
	 | 
	
	static long currentTimeMillis(): 返回当前系统时间的毫秒值 | 
	
| 
	 01 
	02 
	03 
	04 
	05 
	06 
	07 
	08 
	09 
	10 
	11 
	12 
	 | 
	
	// 先记录开始时间毫秒值long start = System.currentTimeMillis();// 循环for (int i = 0; i < 100000; i++) {System.out.println("我爱Java " + i);}// 循环结束后记录结束时间毫秒值long end = System.currentTimeMillis();// 显示结果System.out.println("程序执行时间: " + (end - start) + "毫秒");arrayCopy(Object src, int srcPos, Object dest, intdestPos, int length)java.lang.System类: 系统相关功能 | 
	
| 
	 1 
	2 
	3 
	4 
	5 
	6 
	7 
	 | 
	
	static void arrayCopy(Object src, int srcPos, Objectdest, int destPos, int length): 复制源数组中指定长度个元素到一个新数组中* Object src: 源数组 (被复制的数组)* int srcPos: 源数组索引 (从源数组的哪个索引开始复制)* Object dest: 目标数组 (要复制到哪个数组)* int destPos: 目标数组索引 (指定目标数组接收元素的索引位置)* int length: 长度 (要复制的元素个数) | 
	
| 
	 1 
	 | 
	
	java.lang.StringBuilder类: 可变字符序列, 可以高效拼接字符串.底层使用数组保存 | 
	
| 
	 1 
	2 
	 | 
	
	StringBuilder(): 构造一个空的StringBuilder容器StringBuilder(String str): String转StringBuilder | 
	
| 
	 1 
	 | 
	
	java.lang.StringBuilder类: 可变字符序列, 可以高效拼接字符串.底层使用数组保存 | 
	
| 
	 1 
	2 
	 | 
	
	StringBuilder append(任意类型): 添加任意类型数据的字符串形式, 并返回当前对象String toString(): 将当前StringBuilder对象转换为String对象 | 
	
| 
	 1 
	2 
	3 
	 | 
	
	String和StringBuilder互转: 利用StringBuilderStringBuilder(String str): String转StringBuilderString toString(): StringBuilder转String | 
	
| 
	 1 
	2 
	3 
	4 
	5 
	 | 
	
	StringBuilder sb = new StringBuilder();// 链式调用sb.append(123).append(true).append("你好Java");// 转换为StringString s = sb.toString(); | 
	
| 
	 1 
	 | 
	
	Integer i2 = Integer.valueOf(4); | 
	
| 
	 1 
	 | 
	
	int num = i.intValue(); | 
	
| 
	 1 
	2 
	3 
	 | 
	
	Integer i = 10; // 自动装箱: Integer i =Integer.valueOf(10);Integer j = 20; // 自动装箱: Integer j =Integer.valueOf(20);Integer k = i + j; // 先拆箱再装箱: Integer k =Integer.valueOf(i.intValue() + j.intValue()); | 
	
| 
	 1 
	2 
	3 
	4 
	5 
	6 
	7 
	 | 
	
	static byte parseByte(String s): 将字符串参数转换为对应的byte基本类型static short parseShort(String s): 将字符串参数转换为对应的short基本类型 Shortstatic int parseInt(String s): 将字符串参数转换为对应的int基本类型 Integerstatic long parseLong(String s): 将字符串参数转换为对应的long基本类型static float parseFloat(String s): 将字符串参数转换为对应的float基本类型static double parseDouble(String s): 将字符串参数转换为对应的double基本类型static boolean parseBoolean(String s): 将字符串参数转换为对应的boolean基本类型 | 
	
| 
	 1 
	2 
	3 
	4 
	5 
	6 
	7 
	 | 
	
	Collection接口: 单列集合顶层|_ List接口: 元素存取有序, 可重复, 有索引|_ Set接口: 元素存取无序, 不可重复, 无索引ArrayList<String> add("aaaa")add("bbb") add("ccc") add("ccc")"aaaa" "bbb" "ccc"HashSet<String> add("aaaa")add("bbb") add("ccc")"bbb" "ccc" "aaaa" | 
	
| 
	 1 
	2 
	3 
	4 
	5 
	6 
	7 
	8 
	9 
	 | 
	
	boolean add(E e): 把给定的对象添加到当前集合中void clear(): 清空集合中所有的元素boolean remove(E e): 把给定的对象在当前集合中删除boolean contains(E e): 判断当前集合中是否包含给定的对象boolean isEmpty(): 判断当前集合是否为空(没有元素)int size(): 返回集合中元素的个数Object[] toArray(): 把集合中的元素,存储到数组中Iterator<E> iterator(): 获取集合的迭代器对象 (后面讲到)Iterator接口: 迭代器 | 
	
| 
	 1 
	 | 
	
	Collection c =new ArrayList(); | 
	
| 
	 1 
	2 
	 | 
	
	Iterator<E> iterator(): 获取集合的迭代器对象java.util.Iterator<E>接口: 迭代器 | 
	
| 
	 1 
	2 
	3 
	 | 
	
	boolean hasNext(): 判断是否有下一个元素E next(): 获取下一个元素void remove(): 删除next指向的元素 | 
	
| 
	 1 
	2 
	3 
	 | 
	
	Iterator<元素类型> iterator = 集合对象.iterator();while (iterator.hasNext()) {元素类型 变量名 =iterator.next(); | 
	
| 
	 1 
	2 
	 | 
	
	hasNext() 方法可以判断下一个索引是否有元素next() 方法移动指针到下一个索引, 并返回元素 | 
	
| 
	 1 
	2 
	3 
	 | 
	
	for(元素的数据类型变量名 : Collection集合或数组名){//操作代码} | 
	
| 
	 1 
	2 
	3 
	 | 
	
	public interfaceGenericInterface<I> {public abstract void method(I i);} | 
	
| 
	 1 
	2 
	3 
	4 
	 | 
	
	public class GenericInterfaceImpl1implements GenericInterface<String>{@Overridepublic void method(String s) {System.out.println(s);}} | 
	
| 
	 1 
	2 
	3 
	4 
	 | 
	
	public class GenericInterfaceImpl2<I>implements GenericInterface<I> {@Overridepublic void method(I i) {System.out.println(i);}} | 
	
| 
	 01 
	02 
	03 
	04 
	05 
	06 
	07 
	08 
	09 
	10 
	 | 
	
	public class Demo04GenericInterface {public static void main(String[] args) {//创建GenericInterfaceImpl1对象GenericInterfaceImpl1 gi1 = new GenericInterfaceImpl1();gi1.method("字符串");//创建GenericInterfaceImpl2对象GenericInterfaceImpl2<Integer> gi2= new GenericInterfaceImpl2<>();gi2.method(10);GenericInterfaceImpl2<Double> gi3= new GenericInterfaceImpl2<>();gi3.method(8.8);}} | 
	
| 
	 1 
	2 
	3 
	 | 
	
	List<?> list 这种集合不能调用 add() 添加元素, 只能调用 get() 获取元素List<?> list 其实是一个变量, 所以可以将一个集合赋值给它如: List<?> list =new ArrayList<String>(); | 
	
| 
	 1 
	2 
	3 
	 | 
	
	[font=微软雅黑][size=3][color=#df402a]格式: 类型名称<? extends 类名> 对象名称[/color][/size][/font]示例: List<? extendsNumber> list作用: 只能接收该类型及其子类 (Number及其子类的泛型) | 
	
| 
	 1 
	2 
	3 
	 | 
	
	格式: 类型名称<? super 类名> 对象名称示例: List<? superNumber> list作用: 只能接收该类型及其父类型 (Number及其父类的泛型) | 
	
| 
	 01 
	02 
	03 
	04 
	05 
	06 
	07 
	08 
	09 
	10 
	11 
	12 
	 | 
	
	static int i = 1;   public static void main(String args[]){     System.out.println("love " + new ToStringTest());//love java        ToStringTest a = new ToStringTest();        a.i++;      System.out.println("me " + a.i);//me 2    }  public String toString(){       System.out.print("I ");//I        return "java ";   }运行结果:I love java    me 2解析:System.out.println("love " + new ToStringTest());输出结果为字符串+;   先调用toString方法,本类中已经重写toString方法,应先调用重写的toString方法. | 
	
| 
	 1 
	2 
	3 
	4 
	 | 
	
	String s1 = "abc";                   String s2 = "abc";                   System.out.println(s1 == s2);         //true                   System.out.println(s1.equals(s2));    //true | 
	
| 
	 1 
	2 
	3 
	4 
	 | 
	
	String s1 = "a" + "b" + "c";                 String s2 = "abc";               System.out.println(s1 == s2);                  //true              System.out.println(s1.equals(s2));     //true | 
	
| 
	 1 
	2 
	3 
	4 
	5 
	 | 
	
	String s1 = "ab";             String s2 = "abc";          String s3 = s1 + "c";         System.out.println(s3 == s2);         //false          System.out.println(s3.equals(s2));    //true | 
	
| 
	 1 
	2 
	3 
	4 
	5 
	 | 
	
	1>   中的"abc"均取自堆中常量池.2>   s1="a" + "b" + "c"="abc";"a" + "b" + "c"取自于常量池,与"abc"相同;3>  s1="ab";    s3 = s1 + "c";s1是变量,在堆中,而不在常量池中. |