/*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 {
//11月14号,前两日学习内容笔记
/*
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("请输入出生日期, 格式yyyy年MM月dd日:");
String birthdayStr = scanner.next();
// 将出生日期String转换为Date, 再将Date转换为long毫秒值
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
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
|
|
|