A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Hi走走停停 初级黑马   /  2018-7-26 14:06  /  958 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小石姐姐 于 2018-7-26 16:58 编辑

      Object
Java.lang.Object类是Java语言中的根类,即所有类的父类.其中描述的所有方法子类都可以使用.在对象实例化的时候,最终找到父类就是Object.
如果一个类没有特别指定父类,那么默认则继承自Object
总共有11个方法
1.
[Java] 纯文本查看 复制代码
Public string toString ()  该对象的字符串表现形式
toString方法
使用Objecttostring方法需要重写该方法.否则输出的是对象的类型(类的全路径)+@+内存地址值(16进制地址值).重写后输出的是对象的成员属性(成员变量).

toString方法返回该对象的字符串,其实该字符串内容就是对象的类型+@+内存地址值
由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它.

格式1:  对象名()toString
[AppleScript] 纯文本查看 复制代码
System.out.println(person.toString());
System.out.println(person1.toString());
输出结果:
Person{name='迪丽热巴', age=10}
Person{name='古力娜扎', age=20}

格式2:直接用对象名
[AppleScript] 纯文本查看 复制代码
System.out.println(person);
System.out.println(person1);
输出结果
Person{name='迪丽热巴', age=10}
Person{name='古力娜扎', age=20}
// 在我们直接使用输出语句输出对象名的时候,其实通过该对象调用了其toString()方法。


2.public  boolean   equals(Object obj)  :指示其他某个对象是否于此对象”相等”.
Equals方法
调用成员方法equals方法并指定参数为另一个对象,则可以判断这两个对象是否是相同的.这里的”相同”有默认和自定义两种方式.
默认(地址比较)
如果没有覆盖重写equals方法,那么Object类中默认进行”==”运算符的对象地址比较,只要不是同一个对象,结果必然为false.
(指的是两个对象的  地址值  是否相同)\
格式:  对象名1()(对象名2)
[AppleScript] 纯文本查看 复制代码
System.out.println(p1.equals(p3));
Person p1 = new Person("葫芦娃",10);
Person p3 = new Person("葫芦娃",10);
System.out.println(p1.equals(p3));
p1.equals(p3):false


自定义(内容比较)
我们开发的时候往往认为  属性  都一样的   对象  是相同的
重写equals方法  :重写方法之后  就是  比较两个对象中的内容是否是相同的
如果相同就返回true  否则返回false
[AppleScript] 纯文本查看 复制代码
Objects类 是Object的工具类


Data
[AppleScript] 纯文本查看 复制代码
Java.util.Data类  表示特定的瞬间,精确到毫秒.
Data方法
[AppleScript] 纯文本查看 复制代码
Public Data() : 分配Data对象并初始化此对象,以表示分配它的时间(精确到毫秒)
Date d = new Date();
System.out.println(d);
无参构造方式: 输出的是计算机当前时间.
[AppleScript] 纯文本查看 复制代码
Date d1 = new Date(0);
System.out.println(d1);
有参构造方式(参数为0): 输出的是计算机基准时间Thu Jan 01 08:00:00 CST 1970
[AppleScript] 纯文本查看 复制代码
Date d2 = new Date(1000);
System.out.println(d2);
有参构造方式(参数非0/也叫偏移量): 输出的是以基准时间加偏移量的时间.偏移量值单位毫秒

对象名()geTime()  
获取当前时间与基准时间的差值,叫做时间毫秒值.以毫秒计算











构造
      
[AppleScript] 纯文本查看 复制代码
 Date()             创建了一个时间对象 表示当前计算机的时间 (以毫秒为单位)
       Date(long time)     传递了一个毫秒值
                         创建了一个时间对象,表示 基准时间+time 之后新生成的时间
      基准时间

       197011000000秒 零时区
       我们中国是东八区
       提供了一个 getTime() 把日期对象转换成对应的时间毫秒值
       重写了toString方法  展示时间的



DateFormat
java.text.DateFormat 是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。

(重点在格式化)
格式化:按照指定的格式,从Date对象转换为String对象。
解析:按照指定的格式,从String对象转换为Date对象。


构造方法:


[AppleScript] 纯文本查看 复制代码
public SimpleDateFormat(String pattern) :用给定的模式和默认语言环境的日期格式符号构造
SimpleDateFormat。
参数pattern是一个字符串,代表日期时间的自定义格式

常用的格式规则为:
标识字母(区分大小写) 含义

[AppleScript] 纯文本查看 复制代码
y 年
M 月
d 日
H 时
m 分
s 秒






DateFormat类的常用方法有:
[AppleScript] 纯文本查看 复制代码
public String format(Date date) :将Date对象格式化为字符串。
//用给定模式对象定义时间格式
[AppleScript] 纯文本查看 复制代码
SimpleDateFormat s = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
//获取当前时间
[AppleScript] 纯文本查看 复制代码
Date d =new Date();

//format方法将Date对象格式化为字符串
[AppleScript] 纯文本查看 复制代码
String str = s.format(d);
System.out.println(str);
public Date parse(String source) :将字符串解析为Date对象。

//定义一个时间字符串
[AppleScript] 纯文本查看 复制代码
String s = "2000-01-02";
//用给定模式对象定义时间格式
[AppleScript] 纯文本查看 复制代码
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//parse方法将sdf字符串解析为Date对象
[AppleScript] 纯文本查看 复制代码
Date date = sdf.parse(s);
System.out.println(date);













Calendar日历类(抽象类, 静态方法)
Date后出现,替换掉了许多Date的方法该类将所有可能用到的时间信息封装为静态成员变量,方便获取.日历类就是方便获取各个时间属性的.

小贴士:
西方星期的开始为周日,中国为周一。
Calendar类中,月份的表示是以0-11代表1-12月。
日期是有大小关系的,时间靠后,时间越大。

Calendar类中提供很多成员常量,代表给定的日历字段:

[AppleScript] 纯文本查看 复制代码
字段值                                 含义
YEAR                                 年
MONTH                                 月(从0开始,可以+1使用)
DAY_OF_MONTH                 月中的天(几号)
HOUR                                 时(12小时制)
HOUR_OF_DAY                 时(24小时制)
MINUTE                                 分
SECOND                                 秒
DAY_OF_WEEK                 周中的天(周几,周日为1,可以-1使用)

Calendar静态方法(获得日历)

[AppleScript] 纯文本查看 复制代码
public static Calendar getInstance() :使用默认时区和语言环境获得一个日历
import java.util.Calendar;
public class Demo06CalendarInit {
    public static void main(String[] args) {
       //获取日历对象
Calendar cal = Calendar.getInstance();
    }   
}

Get方法用来获取指定字段的值,set方法用来设置指定字段的值
[AppleScript] 纯文本查看 复制代码
public int get(int field) :返回给定日历字段的值。
public void set(int field, int value) :将给定的日历字段设置为给定值。
//获取年..
[AppleScript] 纯文本查看 复制代码
int year = c.get(Calendar.YEAR);
System.out.println(year);
int month = c.get(Calendar.MONTH)+1;
System.out.println(month);


//修改年..
[AppleScript] 纯文本查看 复制代码
c.set(Calendar.YEAR,2019);
System.out.println(c.get(Calendar.YEAR));
public abstract void add(int field, int amount) :根据日历的规则,为给定的日历字段添加或减去指定的时间量。
add方法可以对指定日历字段的值进行加减操作,如果第二个参数为正数则加上偏移量,如果为负数则减去偏移量
//偏移
[AppleScript] 纯文本查看 复制代码
c.add(Calendar.YEAR,100);
System.out.println(c.get(Calendar.YEAR));
public Date getTime() :返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。
//将一个日历对象转换成时期对象
[AppleScript] 纯文本查看 复制代码
Date d = c.getTime();
System.out.println(d);





System


Java.lang.System  类中提供了大量的静态方法,可以获得与系统相关的信息或系统级操作.

currentTimeMillis 方法
[AppleScript] 纯文本查看 复制代码
获取当前系统时间与1970年01月01日00:00点之间的毫秒差值
public static void main(String[] args) {
    System.out.println(System.currentTimeMillis()/1000/60/60/24/365);
}
当前时间2018722日星期日与1970年相差48
取两个时间段,后时间段减去前时间段可以得到两个时间段间的时间差毫秒值
[AppleScript] 纯文本查看 复制代码
arrayCopy
static void arrayCopy(Object src, int srcPos, Object dest, int destPos, int length): 复制源数组中指定长度个元素到一个新数组中
        * Object src: 源数组 (被复制的数组)
        * int srcPos: 源数组索引 (从源数组的哪个索引开始复制)
        * Object dest: 目标数组 (要复制到哪个数组)
        * int destPos: 目标数组索引 (指定目标数组接收元素的索引位置)
        * int length: 长度 (要复制的元素个数)




StringBuilder概述与构造
[AppleScript] 纯文本查看 复制代码
java.lang.StringBuilder类: 可变字符序列, 可以高效拼接字符串. 底层使用数组保存
        // 常用方法
        StringBuilder append(任意类型): 添加任意类型数据的字符串形式, 并返回当前对象
        String toString(): 将当前StringBuilder对象转换为String对象

包装类
基本类型
对应的包装类(位于java.lang包中)
byte
Byte
short
Short
int
Integer
long
Long
float
Float
double
Double
char
Character
boolean
Boolean


装箱: 从基本类型转换为对应的包装类对象
拆箱: 从包装类对象转换为对应的基本类型

[AppleScript] 纯文本查看 复制代码
JDK 5开始, 装箱和拆箱都是**自动的**
// 自动装箱原理
Integer i2 = Integer.valueOf(4); //使用包装类中的valueOf方法
// 自动拆箱原理
int num = i.intValue();
基本类型转为String: 拼接空字符串
        "" + 34
        true + ""
String转基本类型: 利用包装类的静态方法
    static byte parseByte(String s): 将字符串参数转换为对应的byte基本类型
    static short parseShort(String s): 将字符串参数转换为对应的short基本类型 Short
    static int parseInt(String s): 将字符串参数转换为对应的int基本类型 Integer
    static long parseLong(String s): 将字符串参数转换为对应的long基本类型
    static float parseFloat(String s): 将字符串参数转换为对应的float基本类型
    static double parseDouble(String s): 将字符串参数转换为对应的double基本类型
    static boolean parseBoolean(String s): 将字符串参数转换为对应的boolean基本类型

Day02

Collection
Collection接口: 单列集合顶层
        |_ List接口: 元素存取有序, 可重复, 有索引
        |_ Set接口: 元素存取无序, 不可重复, 无索引


[AppleScript] 纯文本查看 复制代码
ArrayList<String>  add("aaaa")  add("bbb")  add("ccc")  add("ccc")
        "aaaa"  "bbb" "ccc"
        
HashSet<String>  add("aaaa")  add("bbb")  add("ccc")
        "bbb"  "ccc"  "aaaa"

学习方法:
        学习顶层: 顶层接口/抽象类中共性的方法, 所有子类都可以使用
        使用底层: 使用底层子类/实现类创建对象

Collection常用功能
java.util.Collection接口:
     
[AppleScript] 纯文本查看 复制代码
   // 成员方法(子类都会实现)
        boolean add(E e): 把给定的对象添加到当前集合中
        void clear(): 清空集合中所有的元素
        boolean remove(E e): 把给定的对象在当前集合中删除
        boolean contains(E e): 判断当前集合中是否包含给定的对象
        boolean isEmpty(): 判断当前集合是否为空(没有元素)
        int size(): 返回集合中元素的个数
        Object[] toArray(): 把集合中的元素,存储到数组中
       
        Iterator<E> iterator(): 获取集合的迭代器对象 (后面讲到)
        Iterator接口: 迭代器

测试Collection接口的方式:
        使用多态方式创建对象: Collection c = new ArrayList();
        编译看左边, 这样只能调用Collection接口中定义的方法, 不会出现子类特有方法


迭代器
迭代: 类似于遍历, 判断是否有下一个元素, 有则取出下一个, 直到没有
迭代器: 用于遍历集合的对象

[AppleScript] 纯文本查看 复制代码
java.util.Collection<E>接口:
        // 成员方法(子类都会实现)
        Iterator<E> iterator(): 获取集合的迭代器对象

[AppleScript] 纯文本查看 复制代码
java.util.Iterator<E>接口: 迭代器
        // 成员方法
        boolean hasNext(): 判断是否有下一个元素
        E next(): 获取下一个元素
       
        void remove(): 删除next指向的元素

使用迭代器遍历集合的3:
        1. 使用集合对象的 iterator() 获取迭代器对象, Iterator 接口接收.(多态)
        2. 使用 Iterator 接口中的 hasNext() 方法, 判断是否有下一个元素
        3. 使用 Iterator 接口中的 next() 方法, 获取下一个元素

集合和迭代器对象的关系:
        每个集合都有对应的一个迭代器对象

迭代器的原理:
        迭代器有一个指针(其实就是个变量保存索引值), 最初指向集合的 -1 索引
        hasNext() 方法可以判断下一个索引是否有元素
        next() 方法移动指针到下一个索引, 并返回元素

增强for循环
增强for: 也称foreach循环, JDK 5出现, 用于遍历集合, 底层采用迭代器

作用:
        遍历数组
        遍历集合

增强for格式:


   
[AppleScript] 纯文本查看 复制代码
 for(元素的数据类型 变量名 : Collection集合或数组名){
        //操作代码
    }
    // 数组示例
    int[] arr = {1,2,3};
    for (int i : arr) {
        System.out.println(i);
    }

        // 集合示例

   
[AppleScript] 纯文本查看 复制代码
 Collection<Integer> c = new ArrayList<>();
    for (int i : c) {
        System.out.println(i);
    }

增强for对于数组和集合的操作:
        对数组只是写法上的优化, 底层还是普通for循环
        对集合是通过迭代器实现的

增强for, 普通for, 迭代器的区别:
        增强for:
                优点: 获取元素很方便, 格式简单
                缺点: 没有普通for中的索引, 没有迭代器对象可以进行元素的增删
                应用场景: 适用于遍历获取数组和集合元素的场景
        普通for:
                优点: 有索引可以使用, 某些方式可以在遍历过程中增删元素
                缺点: 格式繁琐
                应用场景: 需要用到索引的场景
        迭代器:
                优点: 可以使用迭代器对象的方法操作元素
                缺点: 格式繁琐
                应用场景: 需要在迭代过程中增删元素的场景

泛型
不使用泛型的问题:
        集合实际存储的是 Object 类型, 存入的元素无论是什么类型, 都会被提升为 Object, 取出来的也是 Object, 要想调用元素特有方法, 就要向下转型, 有可能发生类型转换异常 ClassCastException

泛型的好处:
1. 避免了类型转换的麻烦

2. 将运行时的类型转换异常, 转移到了编译时期 (有利于程序员提前发现问题)


定义泛型
        <泛型名>

泛型的定义和使用
        泛型在定义时, 不能是具体的类型, 只是一个变量名
        泛型在使用时, 必须是具体的数据类型

    // 带有泛型的类定义格式
    修饰符 class 类名<代表泛型的名字> {  // 泛型的变量一般用一个大写字母表示, 但也可以是多个字母

    }

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


定义泛型接口与定义泛型类一样

    // 带有泛型的类定义格式
    修饰符 interface接口名<代表泛型的变量> {

    }

实现类实现了泛型接口后可以有2种选择:
        1. 定义实现类时就确定泛型的具体类型
        2. 定义实现类时仍然沿用泛型, 直到创建该类对象时才确定泛型的具体类型

泛型通配符
泛型通配符:
        不知道使用什么类型来接收时, 此时可以使用 <?> 来表示未知通配符
        示例: List<?> list  接收泛型是任意类型的List对象
        注意: 只能接收数据, 不能调用方法存储元素
                List<?> list 这种集合不能调用 add() 添加元素, 只能调用 get() 获取元素
                List<?> list 其实是一个变量, 所以可以将一个集合赋值给它
                  
[AppleScript] 纯文本查看 复制代码
     如: List<?> list = new ArrayList<String>();
        使用方式:
                不能创建对象使用
                只能作为方法参数使用. (减少方法重载)

泛型的上限:
      
[AppleScript] 纯文本查看 复制代码
 格式: 类型名称<? extends 类名> 对象名称
        示例: List<? extends Number> list
        作用: 只能接收该类型及其子类 (Number及其子类的泛型)

泛型的下限:
      
[AppleScript] 纯文本查看 复制代码
  格式: 类型名称<? super 类名> 对象名称
        示例: List<? super Number> list
        作用: 只能接收该类型及其父类型 (Number及其父类的泛型)

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马