黑马程序员技术交流社区

标题: 11/11-11/14日笔记 [打印本页]

作者: 杨纯纯    时间: 2018-11-14 17:26
标题: 11/11-11/14日笔记
/*1.重写toString 方法,以及重写equals
先创建一个类,我创建的类名是OverrideToString,(重写toString)
     用快捷键创建toString方法 可以任意修改后调用,有没有重写 toString打印后不是地址值就是重写了toString
     打印后是地址值就没有重写。*/
import java.util.Objects;
public class OverrideToString {
    private String name;
    private int age;
   public OverrideToString() {
    }
    public OverrideToString(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return"姓名:" + name  + "--->"+"年龄:" + age ;

    }
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        OverrideToString that = (OverrideToString) o;
        return age == that.age &&
                Objects.equals(name, that.name);
    }
    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}
//以上部分是创建类 重写toString 以及equals的 内容
public class Note {
    //1114号,前两日学习内容笔记
    /*
    1.Object 中的 toString如何重写。
    先创建一个类,我创建的类名是OverrideToString,(重写toString
     用快捷键创建toString方法 可以任意修改后调用,有没有重写 toString打印后不是地址值就是重写了toString
     打印后是地址值就没有重写,重写了得有Scanner ,和
     */
    public static void main(String[] args) {
        //创建类的对象 调用对象方法 进行toString 并用s接收。
      OverrideToString chongxie = new OverrideToString("二萌",18);
      OverrideToString chongxie1 = new OverrideToString("二哈",19);
      OverrideToString chongxie3 = new OverrideToString("二哈",19);
        String s = chongxie.toString();
        System.out.println(s);
/*
重写 equals 方法,后对比属性是否相等。
*/

        boolean equals = chongxie.equals(chongxie1);
        boolean equals1 = chongxie1.equals(chongxie3);
        System.out.println(equals);
        System.out.println(equals1);        

//2.创建Date 对象 获取 本机系统时间
        Date date = new Date();
        System.out.println(date);
//简单日期格式化 将本机系统时间到Date中,并进行格式化。
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd E HH:mm:ss.SSS");
String format = dateFormat.format(date);
System.out.println(format);
————————————————————
输出结果:
姓名:二萌--->年龄:18
false
true
Wed Nov 14 16:57:35 CST 2018
2018-11-14 周三 16:57:35.814
————————————————————————
3.求出你来这个世界上多少天:
public class Test {
    public static void main(String[] args) throws ParseException {
        // 键盘录入
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入出生日期, 格式yyyyMMdd:");
        String birthdayStr = scanner.next();

        // 将出生日期String转换为Date, 再将Date转换为long毫秒值
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        Date birthdayDate = sdf.parse(birthdayStr);
        long birthdayMillis = birthdayDate.getTime();

        // 获取当前系统时间
        long todayMillis = new Date().getTime();

        // 计算时间差
        long days = (todayMillis - birthdayMillis) / 1000 / 60 / 60 / 24;
        System.out.println("你出生了" + days + "");

    }

4.Calendar类: 获取Calendar对象
Calendar抽象类代表什么
获取Calendar的对象的特殊方式是什么
思考: 抽象类不能创建对象, 那么实际获取到的应该是什么对象?
java.util.Calendar抽象类: 代表日历, 提供了不同国家的历法, 封装了很多时间属性
        // 静态方法
        static Calendar getInstance(): 根据当前系统设置获取合适的Calendar对象, 表示当前系统时间
       
// 获取日历对象的示例
Calendar c = Calendar.getInstance();  // 代表了当前时间
4.1知识点:
如何通过Calendar对象, 获取年, 月, 日等时间属性?
如何通过Calendar对象, 修改年, 月, 日等时间属性?
如何通过Calendar对象, 调整年, 月, 日等时间属性? 如加X天, 减X天
如何将Calendar对象与Date对象互转
java.util.Calendar抽象类: 代表日历, 提供了不同国家的历法, 封装了很多时间属性
        // 静态成员变量
        static int YEAR         :年份
        static int MONTH        :月份. 注意月份数值是 0-11
        static int DAY_OF_MONTH :日期
        static int HOUR         :小时(12小时制)
        static int HOUR_OF_DAY  :小时(24小时制)
        static int MINITE       :分钟
        static int SECOND       :
        // 非静态成员方法  2018 09 11
        int get(int field): 获取指定日历字段的值   int date = cal.get(Calendar.DAY_OF_MONTH)
        void set(int field, int value): 修改指定日历字段为指定的值
        void set(int year, int month, int date): 快速设置年月日
        void add(int field, int amount): 调整指定日历字段的值. 正数增加, 负数减少
        Date getTime(): Calendar转Date
        void setTime(Date d): Date转Calendar

// 示例
// 获取日期:
int day = calendar.get(Calendar.DAY_OF_MONTH);
// 修改年:
calendar.set(Calendar.YEAR, 2000);
// 修改月:
calendar.set(Calendar.MONTH, 0);
// 日期增加一天:
calendar.add(Calendar.DAY_OF_MONTHY, 1);
// 日期减少一天:
calendar.add(Calendar.DAY_OF_MONTHY, -1);

4.2日期转换总结:
long (数学计算)
        \       SimpleDateFormat
         Date -------------------- String (用户输入和显示)
        /
Calendar (获取时间的某个部分, 调整时间)
long和Date对象互转
        利用Date
                Date(long millis): long转Date
                long getTime(): Date转long
String和Date对象互转
        利用SimpleDateFormat
                Date parse(String s): String转Date
                String format(Date): Date转String
Calendar对象和Date对象互转
        利用Calendar
                Date getTime(): Calendar转Date
                void setTime(Date d): Date转Calendar

5.System类: currentTimeMillis()和arrayCopy()方法
5.1知识点:
System类中, 哪个方法可以获取到当前系统时间的毫秒值?
System类中, 哪个方法可以复制数组?
java.lang.System类: 系统相关功能
        // 静态方法
        static long currentTimeMillis(): 返回当前系统时间的毫秒值
        static void arrayCopy(Object src, int srcPos, Object dest, int destPos, int length): 复制源数组中指定长度个元素到一个新数组中
        * Object src: 源数组 (被复制的数组)
        * int srcPos: 源数组索引 (从源数组的哪个索引开始复制)
        * Object dest: 目标数组 (要复制到哪个数组)
        * int destPos: 目标数组索引 (指定目标数组接收元素的索引位置)
        * int length: 长度 (要复制的元素个数)

5分钟练习: 测试代码运行时间:
需求:
写一个for循环, 打印10万次"我爱Java", 统计运行时间
public class Test {
    public static void main(String[] args) {
        // 先获取循环之前的毫秒值
        long start = System.currentTimeMillis();

        // 循环10万次
        for (int i = 0; i < 100000; i++) {
            System.out.println("我爱Java");
        }

        // 循环结束后, 再次获取一次毫秒值
        long end = System.currentTimeMillis();

        // 计算差值, 打印
        System.out.println("程序运行了:" + (end - start));

    }
}
6.StringBuilder类

StringBuilder原理: 字符串拼接问题
知识点:
                  理解 +拼接 String 有什么缺点?
+号拼接字符串的问题:
        String是不可变的, 使用加号进行字符串拼接, 会创建很多额外的对象, 浪费内存空间。

6.1 StringBuilder: 构造方法和append()拼接方法
知识点:
StringBuilder类有什么作用?
StringBuilder有哪些常用构造方法?
java.lang.StringBuilder类: 可变字符序列, 可以高效拼接字符串. 底层使用数组保存
        // 构造方法
        StringBuilder(): 构造一个空的StringBuilder容器
        StringBuilder(String str): String转StringBuilder
        // 常用方法
        StringBuilder append(任意类型): 添加任意类型数据的字符串形式, 并返回当前对象

链式调用:   
        new StringBuilder().append(1).append("hello").append(true);
————————————————————
6.2        StringBuilder: toString()
知识点:
如何将StringBuilder转换为String?
java.lang.StringBuilder类: 可变字符序列, 可以高效拼接字符串. 底层使用数组保存
        // 成员方法
        String toString(): 将当前StringBuilder对象转换为String对象。
补充:
String和StringBuilder互转: 利用StringBuilder
        StringBuilder(String str): String转StringBuilder
        String toString(): StringBuilder转String
——————————————————————————————————
5分钟练习: 测试StringBuilder
需求:
使用StringBuilder拼接以下内容:
        123
        true
        你好Java
并最终转换为String类型, 打印出来:
public class Test {
    public static void main(String[] args) {
        // 创建StringBuilder对象
        StringBuilder bu = new StringBuilder();
        // 拼接内容
        bu.append(123);
        bu.append(true);
        bu.append("你好Java");
        // 转换为String
        String s = bu.toString();
        System.out.println(s);

        System.out.println("-------------");

       // 还可以用匿名对象和链式调用, 一行代码完成
        String s2 = new StringBuilder().append(123).append(true).append("你好Java").toString();
        System.out.println(s2);
    }
}
7.包装类
包装类: 概述
知识点:
回忆什么是包装类?
包装类: 基本数据类型对应的引用数据类型

ArrayList<Integer> list = new ArrayList<>();
list.add(10);
int a = list.get(0);
基本类型
对应的包装类(位于java.lang包中)
byte
Byte
short
Short
int
Integer
long
Long
float
Float
double
Double
char
Character
boolean
Boolean













作者: ztxtxwd    时间: 2018-11-14 17:29
6666666666666666666666666666




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