黑马程序员技术交流社区

标题: 【石家庄校区】就业班前两天笔记 [打印本页]

作者: 黑马★涛仔    时间: 2018-11-14 17:07
标题: 【石家庄校区】就业班前两天笔记
本帖最后由 小石姐姐 于 2018-11-16 10:39 编辑

Day - 01
常用API
1.Object类: toString方法
       String toString() : :返回该对象的字符串表示
       如果不调用toString方法,直接打印对象时,打印的是对象的地址值  
       调用toString方法打印的是属性值   
       快捷键 :  Alt + Insert 选择 toString() 即可重写

1.1Object类: equals方法
     equals默认的是比较两个对象是否相等;
       重写equals()的作用:
       不重写时,自定义对象默认继承Object类的equals()方法, 通过 == 比较地址值
       但开发时, 一般要重写equals()方法, 让对象"根据属性值"来判断是否相等
       快捷键 :          Alt+Insert, 选 equals() and hashCode()

2.日期时间相关的类

2.1Date类: 构造方法, 成员方法
//  构造方法
Date(): 创建Date对象, 表示当前系统时间
Date(long date): 创建Date对象, 使用指定的毫秒值作为时间
// 常用成员方法
long getTime(): 获取Date对象中保存的时间毫秒值   
void setTime(long time): 修改Date对象的时间  

2.2DateFormat类和SimpleDateFormat类        
       DateFormat抽象类:  // 抽象类不能创建对象, 但可以有非抽象的方法供子类使用
     用于格式化和解析时间. 提供了方便的方法 ;
        String format(Date date): 格式化, 从Date对象转换为String对象   
        Date parse(String source): 解析, 从String对象转换为Date对象


SimpleDateFormat类 :
SimpleDateFormat(String pattern): 用给定的模式和默认语言环境的日期格式符号创建对象
创建对象 :
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

format(Date date)  :  从Date对象转换为String对象
       对象的模式是: "yyyy年MM月dd日  HH:mm:ss"
       e格式化后: 2018年01月02日  03:04:05
parse(String source): 从String对象转换为Date对象
      对象的模式是: "yyyy-MM-dd"
      解析为Date对象的字符串必须符合模式: 2000-01-02

3.Calendar类
3.1获取Calendar对象
      Calendar抽象类 : 代表日历, 提供了不同国家的历法, 封装了很多时间属性
      static Calendar getInstance(): 根据当前系统设置获取合适的Calendar对象,
                                                        表示当前系统时间


3.2Calendar类: 常用功能
     static int YEAR                             :年份
     static int MONTH                          :月份. 注意月份数值是 0-11
     static int DAY_OF_MONTH          :日期
     static int HOUR_OF_DAY             :小时(24小时制)


4.System类
4.1System类: currentTimeMillis()和arrayCopy()方法
              static long currentTimeMillis(): 返回当前系统时间的毫秒值
              static void arrayCopy(): 复制源数组中指定长度个元素到一个新数组中


5.StringBuilder类
5.1 StringBuilder原理: 字符串拼接问题
                +号拼接字符串的问题:    String是不可变的, 使用加号进行字符串拼接, 会创建很多额外的对象, 浪费内存空间

5.2 StringBuilder: 构造方法和append()拼接方法
          StringBuilder(): 构造一个空的StringBuilder容器
          StringBuilder append(任意类型): 添加任意类型数据的字符串形式, 并返回当前对象

链式调用:        
        new StringBuilder().append(1).append("hello").append(true);


Day - 02

1.Collection

1.1 集合和集合框架

集合: 长度可变容器, 可以存储多个对象

Collection接口: 单列集合顶层

List接口: 元素存取有序, 可重复, 有索引   

Set接口: 不可重复, 无索引



1.2 Collection常用功能

boolean add(E e):          把给定的对象添加到当前集合中   

void clear():                         清空集合中所有的元素   

boolean remove(E e):         把给定的对象在当前集合中删除   

boolean contains(E e):         判断当前集合中是否包含给定的对象   

boolean isEmpty():         判断当前集合是否为空(没有元素)   

int size():                         返回集合中元素的个数   

Object[] toArray():                 把集合中的元素,存储到数组中



测试Collection接口的方式:

使用多态方式创建对象: Collection c = new ArrayList();



2.迭代器  

2.1 和迭代步骤

使用迭代器遍历集合的3步:

1. 使用集合对象的 iterator() 获取迭代器对象, 用 Iterator 接口接收.(多态)   

2. 使用 Iterator 接口中的 hasNext() 方法, 判断是否有下一个元素   

3. 使用 Iterator 接口中的 next() 方法, 获取下一个元素



2.2使用迭代器的代码

Iterator<元素类型> iterator = 集合对象.iterator();

while (iterator.hasNext()) {   

元素类型 变量名 = iterator.next();

}



2.3 迭代器的实现原理

迭代器的原理:

hasNext() 方法可以判断当前索引是否有元素   

next() 方法返回当前元素, 并移动指针到下一个索引



2.4迭代器的并发修改异常

1. 迭代过程中不要修改集合长度

2. 在迭代的过程中添加, 删除元素, 要使用迭代器自带的方法, 而不能使用集合的方法

Iterator中的 remove() 方法        

ListIterator中的 add(), remove() 方法



3.增强for循

作用:   

遍历数组   

遍历集合

增强for格式:

for(元素的数据类型 变量名 : Collection集合或数组名)



4.泛型

4.1泛型的概述

定义集合时, 某些方法不知道使用什么类型时, 就可以使用泛型   

创建集合对象时, 需要确定泛型具体的类型

定义:

<E>: 声明了一个泛型 (声明了一个变量)



4.2定义带有泛型的类

修饰符 class 类名<代表泛型的名字>

类中的泛型, "在创建对象时", 确定泛型的具体类型



4.3定义含有泛型的方法

修饰符 <代表泛型的名字> 返回值类型 方法名(参数)



4.4 定义泛型的接口

  修饰符 interface 接口名<代表泛型的变量>



4.5泛型通配符

泛型通配符:

不知道使用什么类型来接收时, 此时可以使用 <?> 来表示未知通配符

泛型的上限:   

格式: 类型名称<? extends 类名> 对象名称   

示例: List<? extends Number> list   

作用: 只能接收泛型为该类型及其子类的对象 (Number及其子类的泛型)



泛型的下限:     

格式: 类型名称<? super 类名> 对象名称

示例: List<? super Number> list   

作用: 只能接收泛型为该类型及其父类型的对象 (Number及其父类的泛型)




作者: ztxtxwd    时间: 2018-11-14 22:19
如果不调用toString方法,直接打印对象时,打印的是对象的地址值
[Java] 纯文本查看 复制代码
package ToStringTest;

public class Test {
    public static void main(String[] args) {
        Student student=new Student("Jack");
        System.out.println(student);
    }
}

class Student {
    private String name;

    public Student(String name) {
        this.name = name;
    }
}

[Java] 纯文本查看 复制代码
/**
     * Prints an Object and then terminate the line.  This method calls
     * at first String.valueOf(x) to get the printed object's string value,
     * then behaves as
     * though it invokes <code>{@link #print(String)}</code> and then
     * <code>{@link #println()}</code>.
     *
     * @param x  The <code>Object</code> to be printed.
     */
    public void println(Object x) {
        String s = String.valueOf(x);
        synchronized (this) {
            print(s);
            newLine();
        }


}


[Java] 纯文本查看 复制代码
/**
     * Returns the string representation of the {@code Object} argument.
     *
     * @param   obj   an {@code Object}.
     * @return  if the argument is {@code null}, then a string equal to
     *          {@code "null"}; otherwise, the value of
     *          {@code obj.toString()} is returned.
     * @see     java.lang.Object#toString()
     */
    public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
    }


通过以上代码,我们可以看到不调用toString方法打印student对象时,在底层依然调用了“toString()”方法。所以此处更恰当地描述应为“不重写‘toString()’方法时,打印的是地址值”。另外重写之后打印时,也就无需再写“toString()”了,因为在底层会调。








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2